在图像从另一个图像延伸的情况下,这种行为是否会增加添加更大图层的自定义图像的大小?
例如: 图像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等) ?
答案 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