Docker 学习 7. Docker Cache
镜像组成
镜像由文件系统和 JSON 文件组成。所以相同的文件系统和 JSON 文件的镜像是同一个镜像,ImageID 必相同。
镜像构建过程
build cache 机制
Docker Daemnon 通过 Dockerfile 构建镜像时,当发现即将新构建出的镜像(层)与本地己存在的某镜像(层)重复时,默认会复用己存在镜像(层)而不是重新构建新的镜像(层),这种机制称为 docker build cache 机制。该机制不仅加快了镜像的构建过程,同时也大量节省了 Docker 宿主机的空间。
docker build cache 并不是占用内存的 cache,而是一种对磁盘中相应镜像层的检索、复用机制。所以,无论是关闭 Docker 引擎,还是重启 Docker 宿主机,只要该镜像(层)存在于本地,那么就会复用。
build cache 失效
Docker build cache 在以下几种情况下会失效:
Dockerfile 变化
当 Dockerfile 文件中某个指令内容发生变化,那么从发生变化的这个指令层开始的所有镜像层 cache 全部失效。即从该指令行开始的镜像层将构建出新的镜像层,而不再使用 build cache,即使后面的指令并未发生变化。因为镜像关系本质上是一种树状关系,只要其上层节点变了,那么该发生变化节点的所有下层节点也就全部变化了。·
ADD 或 COPY 指令内容变化
Dockerfile 文件内容没有变化,但 ADD 或 coPY 指令所复制的文件内容发生了变化,同样会使从该指令镜像层开始的后面所有镜像层的 build cache 失效。
RUN 指令外部依赖变化
与 ADD/COPY 指令相似。Dockerfile 文件内容没有变化,但 RUN 命令的外部依赖发生了变化,例如本例中要安装的 ⅵm 软件源发生了变更(版本变化、下载地址变化等),那么从发生变化的这个指令层开始的所有镜像层 cache 全部失效。
指定不使用 build cache
有些时候为了确保在镜像构建过程中使用到新的数据,在镜像构建 docker build 时,通过-no-cache 选项指定不使用 build cache。