为什么docker必须先从dockerfile创建映像,然后再从该映像创建容器,而不是直接从Dockerfile创建容器?
首先从Dockerfile创建映像,然后从该容器创建映像的目的/好处是什么?
-----编辑-----
这个问题What is the difference between a Docker image and a container? 没有回答我的问题。
我的问题是:为什么我们需要从映像而不是dockerfile创建容器?首先从Dockerfile创建映像然后从该容器创建映像的目的/好处是什么?
答案 0 :(得分:2)
您不希望每个主机都根据配方构建自己的映像。对于某些主机来说,下载图像并使用它更容易。
创建图像可能非常昂贵。我有复杂的Dockerfile,可能要花几个小时才能建立,可能会下载50 GB的数据,但仍然只能创建一个200 MB的映像,可以发送给其他主机。
从现有映像启动容器非常便宜。
如果只剩下Dockerfile以便旋转图像容器,那么整个工作流程将变得非常繁琐。
答案 1 :(得分:1)
图像和容器是两个不同的概念。
基本上,图像就像文件系统的快照以及一些元数据一样。
容器是实际运行的几个进程之一(基于图像)。进程结束后,您的容器不再存在(确切地说,它已停止运行)
您可以查看图像作为运行容器的基础。
因此,您的Dockerfile将创建一个映像(静态),您可以将该映像存储在本地或推送到存储库中,以便以后使用。
容器不能“存储”,因为它是“活着的”东西。
答案 2 :(得分:1)
您可以想到与类与对象或定义与实例类似的图像与容器。该映像包含文件系统和用于创建容器的默认设置。容器包含特定实例的设置以及运行时的名称空间和运行过程。
关于为什么要将它们分开,效率和可移植性。由于我们有单独的图像,因此我们也有继承,其中一个图像扩展了另一图像。该继承的关键细节是不会为每个映像复制映像中的文件系统层。这些图层是静态的,您可以通过使用新图层创建新图像来进行设置。使用覆盖文件系统(或其他联合文件系统驱动程序之一),我们可以使用新映像将其他更改附加到该文件系统。运行映像时,容器会执行相同的操作。这意味着您可以拥有一个1 Gig的基础映像,将其扩展为具有100 Meg更改的子映像,并运行5个容器,每个容器写入1 Meg的文件,而docker主机上使用的总磁盘空间仅为1.105 Gigs比7.6兆。
当您使用注册表时,可移植性部分将发挥作用。 Docker Hub。映像是容器的一部分,它是通用,可重用和可转移的。它不与任何主机上的实例关联。因此,您可以推拉图像,但是容器与它们所运行的主机,该主机上的命名卷,该主机上定义的网络等紧密地绑定在一起。