首页 > 解决方案 > 如何将 docker 层拆分为较小的文件(上传时)?

问题描述

我有一个创建大约 7 层的 dockerfile,但其中一些大约 500MB。

我想知道如何将 500MB 层拆分为许多较小的层 50MB 假设当我上传并且连接失败时,500MB 层不会失败,而只是 50MB 层。

标签: dockerupload

解决方案


确实没有什么可以替代将包列表分成多个块并运行多个几乎重复的 RUN 语句一次处理一个块,执行更小块的包列表的部分安装以获得容器中的多个更小的层。安装过程不会快多少,但后续的安全扫描和 docker push 肯定会。

从文件中的包列表安装适用于 bash (apt/yum) 和 python (pip/conda) 安装程序,但您的里程可能因其他语言而异。

但是在这个特定的用例中变得更有趣,即在安装包时,因为它们具有依赖项,这导致之前安装的块的意外增长(例如 10-20 倍)(而后来安装的块可能会重新使用与先前安装的块相同的依赖项,并包括已作为依赖项安装的包,因此它们最终会比预期的要小)。

因此,如果您确实必须具有(大致)相等大小的容器层(而不是 10-20 倍的块大小范围),建议使用几何系列的块大小(例如,使用 构造np.geomspace()并馈入more_itertools.split_into())。


推荐阅读