如何将Docker层拆分为较小的文件(上传时)?

时间:2018-08-20 07:17:45

标签: docker upload

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

我想知道如何将500MB层分成许多较小的50MB,比如说,当我上传并失败连接时,不会失败500MB层,而只会失败50MB层。

2 个答案:

答案 0 :(得分:0)

Docker层对应于在构建时执行的Dockerfile指令。每个层的大小取决于指令执行的读/写次数。

要减小层大小,请标识大小为500MB的层,然后在Dockerfile中找到相应的指令。尝试将此指令拆分为多个指令,以使图层尺寸更小。

答案 1 :(得分:0)

确实没有替代方法,可以将软件包列表分成多个块,并运行多个几乎重复的RUN语句,一次处理一个块,对较小的软件包列表块进行部分安装,以在容器中获得多个较小的层。安装过程不会很快,但是随后的安全扫描和docker push肯定会。

从文件包列表中进行安装适用于bash(apt / yum)和python(pip / conda)安装程序,但是您的使用其他语言可能会有所不同。

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

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