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