当多个容器在同一主机上运行时,docker是否会重用映像?

时间:2016-08-06 14:08:17

标签: docker kubernetes dockerfile docker-image docker-container

我的理解是Docker在dockerfile的每个阶段都创建了一个图像层。

如果我在同一台机器上运行X容器(其中X> = 2)并且每个容器都有一个共同的底层图像层(即debian),那么docker只会在该机器上保留一个基本映像副本,或者每个容器有多个副本吗?

是否存在这一点,或者对于dockerfile中的每一层都是如此?

这是如何运作的?

Kubernetes会以任何方式影响这个吗?

1 个答案:

答案 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以获得最佳效果)。如果要使用该注册表中已存在的图层推送图像,则会跳过现有图层。将图层拉到本地引擎也是如此。