我的理解是 Docker 在 dockerfile 的每个阶段都会创建一个镜像层。
如果我有 X 个容器在同一台机器上运行(其中 X >=2)并且每个容器都有一个共同的底层映像层(即 debian),docker 会在该机器上只保留一个基本映像的副本,还是它有每个容器有多个副本?
这是否存在问题,或者对于 dockerfile 中的每一层都是如此?
这是如何运作的?
Kubernetes 会以任何方式影响这一点吗?
我的理解是 Docker 在 dockerfile 的每个阶段都会创建一个镜像层。
如果我有 X 个容器在同一台机器上运行(其中 X >=2)并且每个容器都有一个共同的底层映像层(即 debian),docker 会在该机器上只保留一个基本映像的副本,还是它有每个容器有多个副本?
这是否存在问题,或者对于 dockerfile 中的每一层都是如此?
这是如何运作的?
Kubernetes 会以任何方式影响这一点吗?
Dockers了解镜像、容器和存储驱动程序的大部分细节。
从 Docker 1.10 开始,构成映像的所有层在构建时都具有与其关联的 SHA256 安全内容哈希。只要层的内容相同,此哈希值在主机和构建之间是一致的。
如果任意数量的图像共享一个层,则该层的 1 个副本将被 Docker 引擎实例上的所有图像存储和使用。
随着新版本的发布,随着时间的推移,一个标签debian
可以引用多个 SHA256 图像哈希。仅当 SHA256 哈希匹配时,构建的两个图像FROM debian
不一定共享层。
在下面运行 Docker 引擎的任何东西都将使用此存储设置。
这种共享也适用于 Docker Registry(>2.2 以获得最佳结果)。如果您要推送具有该注册表中已存在的层的图像,则会跳过现有层。与将图层拉到本地引擎相同。