在使用Docker时,我们从一个基本映像开始。我们启动它,创建更改,这些更改被保存在图层中形成另一个图像。

因此,最终我为我的PostgreSQL实例和我的web应用程序提供了一个图像,对这些图像的更改将持续保存。

什么是容器?


当前回答

I would like to fill the missing part here between docker images and containers. Docker uses a union file system (UFS) for containers, which allows multiple filesystems to be mounted in a hierarchy and to appear as a single filesystem. The filesystem from the image has been mounted as a read-only layer, and any changes to the running container are made to a read-write layer mounted on top of this. Because of this, Docker only has to look at the topmost read-write layer to find the changes made to the running system.

其他回答

将映像看作容器的“快照”可能会有所帮助。

你可以从容器中创建映像(新的“快照”),也可以从映像中启动新的容器(实例化“快照”)。例如,您可以从一个基本映像实例化一个新容器,在容器中运行一些命令,然后将其“快照”为一个新映像。然后,您可以从这个新映像实例化100个容器。

其他需要考虑的事情:

图像是由层组成的,层是快照“差别”;当你推送一个图像时,只有“diff”被发送到注册表。 Dockerfile在基本映像之上定义了一些命令,这些命令可以创建新的层(“diffs”),从而生成新的映像(“snapshot”)。 容器总是从映像实例化。 图像标签不仅仅是标签。它们是图像的“全名”(“repository:tag”)。如果同一个映像有多个名称,则在处理docker映像时显示多次。

长话短说。

码头工人图片:

用于创建容器的文件系统和配置(只读)应用程序。

码头工人的容器:

容器和映像之间的主要区别是最上面的可写层。容器是顶层可写层的Docker映像的运行实例。容器运行实际的应用程序。容器包括应用程序及其所有依赖项。当容器被删除时,可写层也会被删除。底层图像保持不变。


其他需要注意的重要术语:

码头工人守护进程:

运行在主机上的后台服务,它管理构建,运行和分发Docker容器。

码头工人客户:

允许用户与Docker守护进程交互的命令行工具。

码头工人商店:

Store是一个Docker映像的注册表。您可以将注册表视为所有可用Docker映像的目录

这篇博文中的一张图片胜过千言万语。

简介:

从Docker中心提取图像或从Dockerfile构建=>给出一个 Docker图像(不可编辑)。 运行image (docker Run image_name:tag_name) =>给出一个运行 图片即容器(可编辑)

也许解释一下整个工作流程会有帮助。

一切都从Dockerfile开始。Dockerfile是映像的源代码。

创建Dockerfile之后,构建它来创建容器的映像。图像只是Dockerfile“源代码”的“编译版本”。

一旦有了容器的映像,就应该使用注册表重新分发它。注册表类似于Git存储库——您可以推送和拉出图像。

接下来,您可以使用映像来运行容器。在许多方面,运行中的容器与虚拟机非常相似(但没有管理程序)。

工作流

下面是端到端的工作流,显示各种命令及其相关的输入和输出。这应该澄清了映像和容器之间的关系。

+------------+  docker build   +--------------+  docker run -dt   +-----------+  docker exec -it   +------+
| Dockerfile | --------------> |    Image     | --------------->  | Container | -----------------> | Bash |
+------------+                 +--------------+                   +-----------+                    +------+
                                 ^
                                 | docker pull
                                 |
                               +--------------+
                               |   Registry   |
                               +--------------+

要列出你可以运行的图像,执行:

docker image ls

列出你可以执行命令的容器:

docker ps

映像是构建容器(正在运行的实例)的蓝图。