在构建过程中,docker是根据什么来决定是创建一个新的层还是使用现有的层?

问题描述 投票:0回答:1

docker文件中有FROM、RUN等各种命令。每一个命令都会创建一个层(中间镜像)。

在构建过程中,假设图层已经存在,docker是根据什么来决定是创建一个新图层还是使用现有图层?

docker docker-image docker-build
1个回答
1
投票

docker build 缓存系统非常简单。 对于大多数命令,如果前一层被缓存,而有一层运行完全相同的命令(RUN, ENV, CMD...),那么它就会重复使用缓存层,并为下一条命令重复这个检查。 对于 COPYADD 命令的决定是基于文件内容的哈希值。

这在 编写Docker文件的最佳实践 在Docker文档中。

实际上,这意味着几件事。

  • 你几乎不需要 docker build --no-cache因为如果Dockerfile或任何涉及的文件发生了变化,缓存将自动失效。
  • 如果你有一个昂贵的步骤来安装依赖关系(npm install, pip install, bundle install,...)有一个第一步,只需 COPY的文件,然后是 RUN whatever install那么 COPY 应用程序的其余部分。 这样可以避免在 "安装 "步骤中,如果只有应用程序的代码发生了变化,缓存就会失效。
  • 如果你有一个基于Debian或Ubuntu的镜像。RUN apt-get update && apt-get install 在一条命令中完成。 这就避免了 "更新 "步骤中的URL被缓存,但 "安装 "步骤中的包发生变化,缓存的URL不再有效的问题。
© www.soinside.com 2019 - 2024. All rights reserved.