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

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

什么是容器?


当前回答

Dockerfile类似于生成tarball (Docker映像)的Bash脚本。

Docker容器就像tarball的提取版本。您可以在不同的文件夹(容器)中拥有尽可能多的副本。

其他回答

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

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

其他需要考虑的事情:

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

就像对象是面向对象编程语言中类的实例一样,Docker容器也是Docker映像的实例。

映像的实例称为容器。你有一个图像,它是你描述的一组图层。如果启动这个映像,就有了这个映像的运行容器。同一个映像可以有多个正在运行的容器。

你可以用docker images看到你所有的图像,而你可以用docker ps看到你正在运行的容器(你可以用docker ps -a看到所有的容器)。

因此,映像的运行实例就是一个容器。

Image相当于OOP中的类定义,层是该类的不同方法和属性。

容器是图像的实际实例化,就像对象是实例化或类的实例一样。

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

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

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

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

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