gpt4 book ai didi

linux - docker 容器大小远大于实际大小

转载 作者:太空狗 更新时间:2023-10-29 12:14:08 24 4
gpt4 key购买 nike

我正在尝试从 debian:latest 构建一个镜像。构建后,docker images 命令报告的图像虚拟大小为 1.917 GB。我登录查看大小 (du -sh/),它是 573 MB。我很确定这种巨大的尺寸通常是不可能的。这里发生了什么?如何获得正确的图像尺寸?更重要的是,当我推送这个存储库时,它的大小是 1.9 GB 而不是 573 MB。

enter image description here

du -sh/* 的输出

8.9M    /bin
4.0K /boot
0 /dev
1.1M /etc
4.0K /home
30M /lib
4.0K /lib64
4.0K /media
4.0K /mnt
4.0K /opt
du: cannot access '/proc/11/task/11/fd/4': No such file or directory
du: cannot access '/proc/11/task/11/fdinfo/4': No such file or directory
du: cannot access '/proc/11/fd/4': No such file or directory
du: cannot access '/proc/11/fdinfo/4': No such file or directory
0 /proc
427M /root
8.0K /run
3.9M /sbin
4.0K /srv
0 /sys
8.0K /tmp
88M /usr
15M /var

最佳答案

您是否通过 Dockerfile 构建该镜像?当你这样做时,请注意你的 RUN声明。当你执行多个 RUN语句为其中的每一个创建一个新图像,它保留在图像历史记录中并计算图像总大小。

例如,如果一个 RUN语句下载一个巨大的存档文件,下一个解压缩该存档,然后下一个清理该存档存档其提取的文件保留在图像历史记录中:

RUN curl <options> http://example.com/my/big/archive.tar.gz
RUN tar xvzf <options>
RUN <do whatever you need to do with the unpacked files>
RUN rm archive.tar.gz

在图像大小方面有更有效的方法将多个步骤合并为一个 RUN使用 && 的语句运算符(operator)。喜欢:

RUN curl <options> http://example.com/my/big/archive.tar.gz \
&& tar xvzf <options> \
&& <do whatever you need to do with the unpacked files> \
&& rm archive.tar.gz

通过这种方式,您可以清理构建过程所需但不在结果图像中的文件和文件夹,并将它们也排除在图像历史记录之外。这是保持图像尺寸较小的一种非常常见的模式。

但是当然,您不会有可以重复使用的细粒度图像历史记录。

更新:

以及RUN报表 ADD语句还会创建新的图像层。无论您以何种方式添加到图像中,它都会保留在历史记录中 并计算图像的总大小。你暂时不能ADD东西,然后删除它们,这样它们就不会计入总大小。

尝试ADD尽可能少的图像。尤其是当您处理大文件时。有没有其他方法可以在 RUN 中临时获取这些文件?语句,以便您可以在相同的 RUN 期间进行清理执行?例如。 RUN git clone <your repo> && <do stuff> && rm -rf <clone dir>

一个好的做法是只使用 ADD那些应该留在图像上的东西。应使用单个 RUN 添加和清理临时事物尽可能改为声明。

关于linux - docker 容器大小远大于实际大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31627772/

24 4 0
文章推荐: iphone - 如何在 iPhone 的 MFMailComposeViewController 中将图像嵌入 html
文章推荐: css - 带有蓝图 CSS 的 HTML5 样板
文章推荐: html - 使用
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com