Docker 构建缓存

当您多次构建相同的 Docker 镜像时,了解如何优化 构建缓存是确保构建快速运行的绝佳工具。

构建缓存的工作原理

了解 Docker 的构建缓存有助于您编写更好的 Dockerfile,这些 从而加快构建速度。

以下示例显示了一个用 C 语言编写的程序的小型 Dockerfile。

# syntax=docker/dockerfile:1
FROM ubuntu:latest

RUN apt-get update && apt-get install -y build-essentials
COPY main.c Makefile /src/
WORKDIR /src/
RUN make build

此 Dockerfile 中的每个指令都会转换为最终镜像中的一个层。 您可以将镜像图层视为一个堆栈,每个图层都会添加更多内容 在它之前的层之上:

Image layer diagram

每当图层发生变化时,都需要重新构建该图层。例如 假设您对文件中的程序进行了更改。在此之后 change 时,该命令必须再次运行,以便对 显示在镜像中。换句话说,Docker 将使 this 的缓存失效 层。main.cCOPY

如果图层发生更改,则其之后的所有其他图层也会受到影响。什么时候 带有该命令的图层将失效,所有后续图层都将失效 也需要再次运行:COPY

Image layer diagram, showing cache invalidation

简而言之,这就是 Docker 构建缓存。一旦图层发生变化,那么所有 下游图层也需要重新构建。即使他们不会建造 任何不同的东西,他们仍然需要重新运行。

其他资源

有关使用 cache 执行高效构建的更多信息,请参阅: