在Dockerfile中不使用多个RUN命令的原因是什么?

Edw*_*ard 2 performance docker dockerfile

我见过几个Dockerfile,我觉得人们试图避免使用RUN命令.但为什么?

所以有什么(但在这个例子中是重复的文本)更喜欢

RUN gem install \
  jekyll \
  github-pages
Run Code Online (Sandbox Code Playgroud)

过度

RUN gem install jekyll
RUN gem install github-pages
Run Code Online (Sandbox Code Playgroud)

BMi*_*tch 5

每次执行RUN命令都会从最后生成的图像创建一个临时容器,执行命令并将结果保存为新图层.最小化RUN命令既减少了这些中间容器的开销量,又可以显着缩小生成的图像的大小.

例如,如果您执行2个运行命令,一个下载1 gig数据,另一个删除该数据,则生成的图像将超过一个gig,即使它在正在运行的容器中不可见.

因此,在进行大量下载缓存文件以进行安装或构建应用程序并在完成时清理构建环境时,最好将其作为一个步骤进行清理,以便删除的文件永远不会进入任何部分.图片.

最后一个原因是缓存.如果您需要从软件包存储库中提取新版本的应用程序,您还需要apt-get update在安装之前更新该远程存储库(例如)上的信息以获取最新版本.如果将其apt-get update与the 分开apt-get install,则可以从旧版本缓存update命令,安装将尝试提取旧的或不存在的文件.