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

2024-05-20

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

输出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声明对于每一个新图像layer被建造它保留在图像历史记录中并依赖于图像总大小。

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

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声明使用&&操作员。喜欢:

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

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

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

Update:

RUN声明ADD语句还创建新的图像层。无论您以这种方式添加到图像中什么留在历史中并计算总图像大小。你暂时不能ADD things然后删除它们,以便它们不计入总大小。

Try to ADD尽可能少的图像。特别是当您处理大文件时。是否有其他方法可以临时获取这些文件RUN声明,以便您可以在同一期间进行清理RUN执行?例如。RUN git clone <your repo> && <do stuff> && rm -rf <clone dir>?

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

docker容器大小远大于实际大小 的相关文章

随机推荐

  • 将 numpy 舍入到最近的步骤

    我想知道如何将 numpy 中的数字舍入到上限或下限阈值 该阈值是预定义步长的函数 希望以更清晰的方式说明 如果我有数字 123 且步长等于 50 我需要将 123 舍入到最接近的 150 或 100 在本例中为 100 我得出了下面的函数
  • 文件“PyInstaller/loader/pyimod03_importers.py”,第 546 行,在 exec_module 中,ModuleNotFoundError:没有名为“x”的模块

    EDIT 我正在尝试导入algosec models在一个文件里面algobot包裹 我尝试添加 hidden import algosec 我还尝试在导入之前添加路径 使用sys path append algosec 这是我尝试运行该程
  • 沿着预定路径移动图像?

    是否可以通过按下 iphone SDK 中的按钮来将图像设置为沿着预定路径运动 我不是在寻找任何奇特的东西 我正在研究一个简单的概念 但这会节省大量动画工作 是的 您可以通过创建一个路径来为任何 CALayer 制作动画CAKeyframe
  • 使用 Pillow 时出错:ImportError:无法导入名称 _imaging

    我已经阅读了类似问题的答案 但似乎没有一个适合我的情况 当尝试使用 Pillow 时 我收到此错误 gt gt gt from PIL import Image Traceback most recent call last File
  • Presto/Trino - where 子句中的静态日期和时间戳

    我非常确定以下查询在 Presto 上对我有用 select segment sum count from modeling trends where segment 2557172 and date 2016 06 23 and coun
  • 使用 Parceler 与 Kotlin 数据类和构造函数进行序列化

    有没有办法使用Parceler https github com johncarl81 parceler使用 Kotlin 数据类和构造函数进行序列化 无需使用 ParcelProperty每个字段的注释 如果我尝试使用这样的库 Parce
  • gulp-sass 5 没有默认的 Sass 编译器;请自行设置

    插件 gulp sass 错误 信息 gulp sass 5 没有默认的 Sass 编译器 请自行设定 这俩sass and node sass包裹是允许的 例如 在你的 gulpfile 中 var sass require gulp s
  • 除非我在项目目录中,否则 Git 不会显示日志

    我正在尝试打电话git log当我在不同的目录中时 我经过的位置 git is git log Users Leica proj1 但它说 不是 git repo 如果我cd进入这个目录 就可以正常工作了 cd Users Leica Pr
  • 参数无效--model_config_file_poll_wait_seconds

    我正在尝试使用以下两个选项启动tensorflow serving 如文档中所示 docker run t rm p 8501 8501 v pwd models models tensorflow serving model config
  • 在 HTML5 中创建可拖动和可缩放的网格

    与其他 HTML5 不同如何创建网格问题 我想知道如何制作一个可拖动且可扩展的 绘制网格非常简单 var c document getElementById canvas var ctx c getContext 2d var width
  • MySQL InnoDB 约束不起作用

    我偶然发现 innoDB 约束的奇怪行为 但找不到原因 我有包含数据的表格 下面列出了它们的结构 CREATE TABLE contents id int 10 unsigned NOT NULL AUTO INCREMENT title
  • 使用 jQuery 清除 IMG

    我正在尝试从 a 中删除加载的图像 img 元素 但清除或删除 src 不会执行此操作 该怎么办 HTML img src https www google com images srpr logo3w png JQUERY img att
  • 仅从日期计算夏令时

    我正在使用 Arduino 和实时时钟芯片 该芯片补偿了闰年等 因此它始终具有正确的日期 但我认为由于区域复杂性 它不处理夏令时 时钟可以给出日 月 年 从 1 开始 以及星期几 星期日 0 到星期六 6 因为我需要与用户输入的日期和时间进
  • pg_restore错误:角色XXX不存在

    尝试将数据库从一个系统复制到另一个系统 涉及的版本是9 5 0 源 和9 5 2 目标 源数据库名称是foodb与主人pgdba并且目标数据库名称将被命名foodb dev与主人pgdev 所有命令都在将托管副本的目标系统上运行 The p
  • 在 Flash Player 10 中打开 pdf

    我需要在 Flash Player 10 中打开 PDF 该 swf 不会在浏览器中运行 并且系统上不会有 adobe reader 程序 我需要知道是否可以在 Flash 播放器中打开 PDF 而无需以任何方式进行转换 我在谷歌上搜索了无
  • 如何在c#中创建延迟启动应用程序?

    我正在使用 WPF C net 创建一些桌面应用程序 我想将其创建为计算机启动应用程序 我可以将快捷方式链接添加到启动文件夹 我的问题是 我想在计算机启动一分钟后启动此应用程序 如何执行此操作 如果您确实想知道互联网连接是否可用 也许最好检
  • Android Studio 3.0.0 不允许 DOCTYPE

    升级到Android Studio 3 0 0 同步并更新gradle插件 出现以下错误 Error DOCTYPE not allowed if function http apache org xml features disallow
  • 如何将今天的日期返回到 Oracle 中的变量

    我想做这个 DECLARE today as smalldatetime SELECT today GetDate 但我需要一个oracle翻译 甲骨文使用SYSDATE 还有 ANSI 标准CURRENT TIMESTAMP 除其他外 S
  • 在 Angular 中使用 Vue 组件

    我有一个用 Vue 构建的项目 我想在 Angular 应用程序中重用 Vue 应用程序中的组件 这样我就不必从头开始重建每个组件 我在medium上看到了这个教程 如何在 Angular 应用程序中使用 Vue 2 0 组件 https
  • docker容器大小远大于实际大小

    我正在尝试从中构建图像debian latest 构建后 报告的图像虚拟大小来自docker images命令为 1 917 GB 我登录查看尺寸 du sh 大小为 573 MB 我很确定这么大的尺寸通常是不可能的 这里发生了什么 如何获