docker build 缓存机制

在构建镜像的过程中,Docker将按照顺序逐步执行Dockerfile中的指令。随着每条指令的检查,Docker将在其缓存中查找可重用的现有镜像像,而不是创建一个新的(重复)镜像。

docker build

这条命令中,内部逻辑如下:

  1. 把当前目录及子目录当作上下文传递给docker服务
  2. 从当前目录找到dockerfile文件
  3. 检查dockerfile语法
  4. 依次执行dockerfile中的指令,根据指令生成中间过渡镜像(储存在本地,为之后的指令或构建做缓存)

docker build --no-cache=true (不使用缓存机制)

Docker 遵循基本规则如下:

  1. 从已经缓存中的父镜像开始,将下一条指令与从该base镜像导出的所有子镜像进行比较,以查看其中一个是否使用完全相同的指令构建。如没有,则缓存无效。
  2. 在大多数情况下,只需将Dockerfile中的指令与其中一个子镜像比较即可。但是,某些指令需要一些额外的检查。对于ADD和COPY指令,会检查镜像中文件的内容,并为每个文件计算校验和,这些校验和不包括文件的最后修改时间和最后访问时间,将校验和与现有镜像中的校验和对比,如有任何变化,则缓存无效
  3. 除了ADD和COPY指令外,缓存检查将不再查看容器内的文件来确定缓存匹配。例如,RUN curl -o /home/admin/prepare_code_files.tar.gz http://ebsoperation-dependencies.oss-cn-hangzhou-zmf.aliyuncs.com/haitu_tianji_deploy_docker_copy.tar.gz 不会去检查容器这个文件,只会检查指令字符串是否一致来匹配缓存。
  4. 一旦某一层的缓存无效,所有后续的Dockerfile命令将生成新的镜像,并且高速缓存将不被使用。

你可能感兴趣的:(docker,缓存,容器)