在Docker的阅读中,我停止了几次,因为Docker容器不仅共享主机内核,而且如果可能,它们共享公共二进制文件和库。
我从中理解的是,如果我在同一主机上运行相同的docker Image两次,并且此图像使用一些文件x,y,z(比如库/箱子......任何东西)。这些文件也将在2个发射容器之间共享?更重要的是,如果我运行两个不同的图像,他们仍然可以共享这些共同的依赖关系。我要求的只是两件事......
1-验证/解释 - >这是真/假+解释(这是怎么发生的)
2-如果是真的 - >是否有一个实际的例子,我可以运行2个容器(相同/差异图像)并验证它们是否看到相同的文件/库。
我希望我的问题很明确,有人有答案:)
答案 0 :(得分:4)
是的,答案是" true"两个问题。 如果您在同一主机上启动2个(或更多)容器,所有容器都使用相同的基本映像,则将共享基本映像的整个内容。
所谓的"图像"事实上,是多个图像被称为"层"与亲子关系,堆叠在一起。
现在,如果您启动具有不同图像的多个容器,则可能会发生这些图像共享一些公共图层,具体取决于它们的构建方式。
在系统级别,Docker将每个图像层安装在另一个图像层之上,直到最终/顶部图像。如果重叠,每个图层都会覆盖其父内容。为此,它使用所谓的" union文件系统" (Aufs),甚至是卷快照。更多信息here。
图像永远不会被修改,它们是只读的。在最后/上图上,添加了一个额外的可写层,它将包含正在运行的容器所做的更改/添加。
这意味着此可写图层也可以转换为图像图层,您可以从这个新图像中启动其他容器。
要亲眼看看图层共享"请运行以下示例:
docker run ubuntu:trusty /bin/bash
然后:
docker run ubuntu-upstart:trusty /bin/bash
Docker会告诉你它已经有了一些图层,因此会全部下载它们。
查看有关编写Dockerfile(图像构建脚本)的文档,这应该可以让您对所有这些工作原理有一个很好的了解。