Docker 将RUN命令放在一行中可以加快构建速度?

Docker 将RUN命令放在一行中可以加快构建速度?,docker,Docker,在我的docker文件中,是否将RUN命令放在一行中真的很重要吗?将它们放在一行中是否会加快构建时间 RUN apt-get update RUN apt-get -y install --no-install-recommends python3 RUN apt-get -y install --no-install-recommends open-vm-tools vs 通过减少层数,您可以减少图像的大小,当然,还可以缩短构建时间。在中也建议这样做 在旧版本的Docker中,最小化图像中的

在我的docker文件中,是否将RUN命令放在一行中真的很重要吗?将它们放在一行中是否会加快构建时间

RUN apt-get update
RUN apt-get -y install --no-install-recommends python3
RUN apt-get -y install --no-install-recommends open-vm-tools
vs


通过减少层数,您可以减少图像的大小,当然,还可以缩短构建时间。在中也建议这样做

在旧版本的Docker中,最小化图像中的层数以确保其性能是很重要的。添加了以下功能以减少此限制

只有运行、复制、添加和创建层的说明。其他说明会创建临时中间映像,并且不会增加生成的大小。


实际上,一个运行命令与多个运行命令相比,构建和运行时的成本是难以察觉的,我不会仅仅为了性能而在这里进行优化

在您展示的具体示例中,有两件事是正确的:

Debian APT工具本身有一个不平凡的启动时间;与一个运行命令与多个运行命令不同,一个apt get install与两个将更快

运行apt get install-y-不安装python3开放虚拟机工具 Debian和Ubuntu相当频繁地更新他们的存储库,当他们更新时,上周apt get更新中的包链接停止工作。同时,Docker层缓存将尝试避免重新运行已经运行的步骤。如果你在一周前建立了你的镜像,Docker会说我已经运行了这个程序来获取更新,所以我不需要再次运行它;但这意味着它缓存了一个过时的包索引。在同一运行步骤中运行apt get update和apt get install非常重要

运行apt获取更新\ &&apt get install-y-无安装建议使用python3开放虚拟机工具 总的来说:

如果要运行某些清理步骤,请在同一运行步骤中运行它们。这个序列在构建步骤之后创建一个层,因此运行rm步骤实际上不会使最后一个层变小

所有这些示例都应该合并到一个运行步骤中 运行tar xzf包-1.2.3.tar.gz 运行cd包-1.2.3&&&&./configure&&make&&make install 这里有一个层,包括构建树 运行rm-rf包-1.2.3 如果您在Dockerfile上进行迭代,那么在调试时可以更容易地将内容拆分为许多小的运行命令,并在以后合并它们。那很好,你应该在最后得到一棵相同的树

我正在尝试找出配置选项,以便 运行tar xzf包-1.2.3.tar.gz 运行cd包-1.2.3&&&./configure-some选项 运行cd包-1.2.3和制作(&M)
如果您不在一行代码末尾清理apt缓存,那么实际上您并没有取得很多成果。一个大图层仍然添加到您的图像中

其主要思想是将所有安装放在一行上,并以清理结束该行,以便docker在继续执行下一个命令之前保存该层时,只保存新安装的软件,而不保存所有不再使用的下载和缓存

至于速度,在一行上多写一点可能会有一点提高,但我认为没有那么多。当然,如果你有数百个,那么你会看到不同

RUN apt-get update && apt-get -y install --no-install-recommends python3
RUN apt-get -y install --no-install-recommends open-vm-tools