是的,两个问题的答案都是“正确”。
如果您在同一主机上启动 2 个(或更多)容器,并且全部使用相同的基础镜像,则基础镜像的全部内容将被共享。
所谓“图像”,其实就是多个具有父子关系、称为“层”的图像堆叠在一起。
现在,如果您使用不同的映像启动多个容器,这些映像可能会共享一些公共层,具体取决于它们的构建方式。
在系统级别,Docker 将每个映像层安装在另一个映像层之上,直到最终/顶部映像。如果重叠,每个图层都会覆盖其父内容。为此,它使用所谓的“联合文件系统”(Aufs),甚至卷快照。更多信息here https://docs.docker.com/engine/userguide/storagedriver/imagesandcontainers/#images-and-layers.
图像从未被修改,它们是只读的。在最后一个/上面的图像之上,添加了一个额外的可写层,它将包含正在运行的容器所做的更改/添加。
这意味着这个可写层也可以变成镜像层,并且您可以从这个新镜像启动其他容器。
要“用自己的眼睛”查看共享的图层,只需运行以下示例:
docker run ubuntu:trusty /bin/bash
Then:
docker run ubuntu-upstart:trusty /bin/bash
Docker 会告诉你它已经有了一些层,因此会下载所有层。
检查有关编写的文档Dockerfile http://docs.docker.com/reference/builder/#from(图像构建脚本),这应该能让您对这一切如何工作有一个很好的了解。