docker 如何将基础图像层“压缩”成一个单独的层?

s4n0splo  于 2022-12-29  发布在  Docker
关注(0)|答案(1)|浏览(208)

我试图在我的一个映像中升级基础映像版本,但由于40层的限制,我的构建失败了。
我注意到在旧映像中,docker history给出了以下输出:

IMAGE          CREATED        CREATED BY                      SIZE      
092c6c14cf83   8 days ago     /bin/sh -c #(nop)  ENV LANG     0B        
376101232840   8 days ago     /bin/sh -c /tmp/tmp.sh         65.4MB    
6c58dda60477   8 days ago     /bin/sh -c #(nop) COPY file:a   1.27kB    
1264065f6ae8   7 months ago                                   4.72kB    
<missing>      7 months ago                                   207MB

但在更新映像版本后,输出如下:

IMAGE          CREATED        CREATED BY                       SIZE     
3233036cf707   41 hours ago   /bin/sh -c #(nop)                0B        
1e72b109fe29   41 hours ago   /bin/sh -c /tmp/tmp.sh           65.5MB    
e4bb0f8240aa   41 hours ago   /bin/sh -c #(nop) COPY file:a    1.27kB    
dea12a7906f5   12 days ago    /bin/sh -c rm -f /tmp/tls-ca-    207MB     
<missing>      12 days ago    /bin/sh -c rm -f '/etc/yum.re'    0B        
<missing>      12 days ago    /bin/sh -c #(nop) LABEL "dist    0B        
<missing>      12 days ago    /bin/sh -c #(nop) ADD file:7     0B        
<missing>      12 days ago    /bin/sh -c #(nop) ADD file:ad    0B        
<missing>      12 days ago    /bin/sh -c #(nop) LABEL relea    0B        
<missing>      12 days ago    /bin/sh -c mkdir -p /var/log     0B        
<missing>      12 days ago    /bin/sh -c rm -rf /var/log/      0B        
<missing>      12 days ago    /bin/sh -c #(nop) CMD ["/bin     0B        
<missing>      12 days ago    /bin/sh -c #(nop) ENV PATH /     0B        
<missing>      12 days ago    /bin/sh -c #(nop) ENV contain    0B        
<missing>      12 days ago    /bin/sh -c #(nop) LABEL io.      0B        
<missing>      12 days ago    /bin/sh -c #(nop) LABEL io.      0B        
<missing>      12 days ago    /bin/sh -c #(nop) LABEL io.      0B        
<missing>      12 days ago    /bin/sh -c #(nop) LABEL des      0B        
<missing>      12 days ago    /bin/sh -c #(nop) LABEL sum      0B        
<missing>      12 days ago    /bin/sh -c #(nop) LABEL com      0B        
<missing>      12 days ago    /bin/sh -c #(nop) LABEL com      0B        
<missing>      12 days ago    /bin/sh -c #(nop) LABEL          0B        
<missing>      12 days ago    /bin/sh -c #(nop) ADD multi:3    0B        
<missing>      12 days ago    /bin/sh -c #(nop) ADD file:21    0B        
<missing>      12 days ago    /bin/sh -c #(nop) ADD file:09    0B

你知道为什么会这样吗?这些额外的图层似乎来自于基础图片。你知道如何让它们看起来像旧版本中的一个图层吗?
先谢了!

ux6nzvsh

ux6nzvsh1#

所以我后来意识到了一些关于这个问题的事情。
首先,docker history没有给予你真实的层数 *。为了找到真实的层数,我使用docker inspect --format='{{join .RootFS.Layers "\n"}} $INSTANCE_ID | wc -l来获得真实的层数。
其次,如果您仍然需要压缩层,请尝试使用docker build中的--squash指令(实验特性),或者使用docker-squash

**-docker history的输出显示了Map到层差异的散列列表。由于这些散列是随机生成的,因此Map由docker引擎处理。当图像被拉取时,此Map丢失,您将在IMAGE字段中获得<missing>值。如果没有this amazing blog post,则无法解决此问题 *

相关问题