Docker图像层次增加图层大小?

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

例如:图像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等)的单个图像?

问:在图像从另一个图像等扩展的情况下,这种行为会增加自定义图像的大小,增加更大的图层?

每一层都configuration了不同数量的数据,而不重复以前的数据。

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

我们说:

 [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 app1 = size(C) + size(B) + size(A)

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

问:在这种情况下,所有依赖的大小将是(115MB + 3.97MB)?

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

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

您可以有1GB的基本映像和1MB的100个儿童映像,总磁盘空间将(大致)= 1GB + 100 * 1MB〜= 2GB。 而不是 1GB + 100 *(1MB + 1GB)。
但是,每个子图像的大小仍然是1GB + 1MB。

dockerregistry中应用了相同的概念,该registry将重新使用以前推送的图层。

有些文档在这里