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

每當層級變更時,該層級就需要重新建置。例如,假設您在 `main.c` 檔案中變更了程式。變更後,必須再次執行 `COPY` 指令,才能讓這些變更顯示在映像檔中。換句話說,Docker 將會使此層級的快取失效。

如果某個層級變更,其後的所有其他層級也會受到影響。當包含 `COPY` 指令的層級失效時,其後的所有層級也需要再次執行。

Image layer diagram, showing cache invalidation

這就是 Docker 建置快取的簡要說明。一旦某個層級變更,所有下游層級也需要重新建置。即使它們的建置結果沒有任何不同,它們仍然需要重新執行。

其他資源

如需使用快取進行高效建置的詳細資訊,請參閱