docker - 如何将 docker 层拆分为较小的文件(上传时)?
问题描述
我有一个创建大约 7 层的 dockerfile,但其中一些大约 500MB。
我想知道如何将 500MB 层拆分为许多较小的层 50MB 假设当我上传并且连接失败时,500MB 层不会失败,而只是 50MB 层。
解决方案
确实没有什么可以替代将包列表分成多个块并运行多个几乎重复的 RUN 语句一次处理一个块,执行更小块的包列表的部分安装以获得容器中的多个更小的层。安装过程不会快多少,但后续的安全扫描和 docker push 肯定会。
从文件中的包列表安装适用于 bash (apt/yum) 和 python (pip/conda) 安装程序,但您的里程可能因其他语言而异。
但是在这个特定的用例中变得更有趣,即在安装包时,因为它们具有依赖项,这导致之前安装的块的意外增长(例如 10-20 倍)(而后来安装的块可能会重新使用与先前安装的块相同的依赖项,并包括已作为依赖项安装的包,因此它们最终会比预期的要小)。
因此,如果您确实必须具有(大致)相等大小的容器层(而不是 10-20 倍的块大小范围),建议使用几何系列的块大小(例如,使用 构造np.geomspace()
并馈入more_itertools.split_into()
)。
推荐阅读
- ruby - 将 Array 与哈希项一起使用
- swift4 - UIActivityViewController Facebook 分享 URL + IMAGE 和 URL + TEXT 不起作用
- java - 在 Java 中为 GC 与 WeakReference 设置空对象
- c++ - 有没有像 BigInteger 这样的变量,但作为浮点数?
- solr - SolrCloud 异常将文档 id 写入索引;可能的分析错误
- abap - 未从 EQUI 中选择记录
- javascript - Realm.js 查询字符串属性列表
- ruby-on-rails - Javascript:Firefox 中显示的日期无效
- python - 关闭交互式 python 会话时结束非守护线程
- ios - UITableView 单元格折叠动画看起来很糟糕