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 中的每條指令都轉換為最終映象中的一個層。您可以將映象層視為一個堆疊,每個層都在其之前的層之上新增更多內容。


每當一個層發生更改時,該層都需要重新構建。例如,假設您更改了 `main.c` 檔案中的程式。此更改後,`COPY` 命令必須再次執行,以便這些更改出現在映象中。換句話說,Docker 將使此層的快取失效。
如果一個層發生更改,其後的所有其他層也會受到影響。當帶有 `COPY` 命令的層失效時,所有後續層也需要重新執行。


這便是 Docker 構建快取的精髓。一旦一個層發生更改,所有下游層也都需要重新構建。即使它們不會以不同的方式構建任何內容,它們仍然需要重新執行。
其他資源
有關使用快取進行高效構建的更多資訊,請參閱