Docker“共享依赖”

随着Docker的阅读,我停了几次Docker容器不仅共享主机内核,而且如果可能的话,他们共享常见的二进制文件和库。

我的理解是,如果我在同一台主机上运行同一个docker Image两次,并且这个映像正在使用一些文件x,y,z(比如说库/库)。 这些文件也将在两个集装箱之间共享? 更重要的是,如果我运行两个不同的图像,他们仍然可以共享这些常见的依赖关系。 我要求的仅仅是两件事情…

1-validation/说明 – >是真/假+解释(如何发生)
2-如果是的话 – >是否有一个实际的例子,我可以运行2容器(相同/ diff图像),并validation他们看到相同的文件/库。

我希望我的问题是明确的,有人有答案:)

是的,两个问题的答案都是“真实的”。 如果在同一主机上启动2个(或更多)容器,全部使用相同的基本映像,则基本映像的全部内容将被共享。

实际上,所谓的“图像”是指叠加在一起的具有父子关系的称为“图层”的多个图像。

现在,如果你用不同的图像启动多个容器,可能会发生这些图像共享一些常见的图层,具体取决于它们的构build方式。

在系统级别,Docker将每个图像层放在另一个图层的顶部,直到最终/顶部图像。 如果重叠,则每个图层都覆盖其父级内容。 为此,它使用所谓的“联合文件系统”(Aufs),甚至是卷快照。 更多信息在这里 。

图像从不修改,它们是只读的。 在最后/上面的图像的顶部,增加了一个额外的,可写的图层,它将包含正在运行的容器所做的更改/添加。

这意味着这个可写层也可以变成一个图像层,你可以从这个新的图像启动其他容器。

要看到图层共享“你自己的眼睛”,只需运行以下示例:

docker run ubuntu:trusty /bin/bash 

然后:

 docker run ubuntu-upstart:trusty /bin/bash 

Docker会告诉你,它已经有一些图层,并将它们全部下载。

检查有关编写Dockerfile (图像构build脚本)的文档,这应该给你一个关于如何工作的良好愿景。