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