Docker图像层次结构增加了图层大小?

时间:2017-07-12 18:40:11

标签: image docker dockerfile

在图像从另一个图像延伸的情况下,这种行为是否会增加添加更大图层的自定义图像的大小?

例如: 图像cbelleza / springboot-maven-s2i从高山图像延伸,在这种情况下所有依赖的大小(115MB + 3.97MB)?

$ docker images
REPOSITORY                      TAG                 IMAGE ID            CREATED             SIZE
cbelleza/springboot-maven-s2i   latest              3b92af74af2d        28 minutes ago      115MB
alpine                          latest              7328f6f8b418        2 weeks ago         3.97MB

拥有在多个子图像中引用的共享父图像,它是否会减小这些子图像的大小,或者更好地拥有包含所有依赖项和命令的单个图像(apk,.gz,tar等) ?

1 个答案:

答案 0 :(得分:1)

  

Q值。在图像从另一个图像扩展的情况下,这种行为是否会增加添加更大图层的自定义图像的大小?

每一层都会分配不同数量的数据,而不会重复以前的数据。

将图像视为图层加元数据。将图层视为依赖树。图像的大小是其尖层加上每个祖先的总和。

让我们说:

[layer A, image alpine] -> [layer B, no image] .-> [layer C, image app 1]
                                               |
                                                -> [layer D, image app 2]

image app1 = size(C) + size(B) + size(A)

的大小

image app2 = size(D) + size(B) + size(A)

的大小
  

Q值。在这种情况下,所有依赖项的大小将是(115MB + 3.97MB)?

是的,但由于它们共享图层,因此磁盘中的实际大小会小得多。

  

Q值。拥有在多个子图像中引用的共享父图像,它是否会减小这些子图像的大小,或者更好地拥有包含所有依赖项和命令的单个图像(apk,.gz,tar等)?

您可以拥有1GB的1个基本映像和1MB的100个子映像,总磁盘空间(大致)= 1GB + 100 * 1MB~ = 2GB。并且 1GB + 100 *(1MB + 1GB) 但是,每个子图像的大小仍然是1GB + 1MB。

在docker注册表中应用了相同的概念,它将重用任何先前推送的图层。

一些文档here