預先建置依賴關係以加快Docker 映像建置
建置Docker 映像可能是一個耗時的過程,尤其是在需要依賴時在它們可以被緩存之前建構。為了優化這個過程,可以預先建立所有必要的模組並快取它們。
Dockerfile 結構
實現此目的的推薦Dockerfile 結構如下:
FROM docker.io/golang:1.16.7-alpine AS build WORKDIR /src COPY go.* . RUN go mod download COPY . . RUN --mount=type=cache,target=/root/.cache/go-build go build -o /out/example . FROM scratch COPY --from=build /out/example /
或者,對於單一架構構建,您可以將Dockerfile 簡化為:
FROM docker.io/golang:1.16.7-alpine AS build WORKDIR /src COPY go.* . RUN go mod download COPY . . RUN --mount=type=cache,target=/root/.cache/go-build go build -o /out/example . FROM scratch COPY --from=build /out/example /
快取掛載
這個的關鍵最佳化是在/root/.cache/go-build 上掛載一個快取目錄。這是 Go 建置快取的預設位置。第一次建置將填充此緩存,後續建置將重複使用快取的文件,從而顯著減少建置時間。
使用 Docker BuildKit 進行建置
使用此快取機制實際上,您必須在啟用 Docker BuildKit 的情況下進行建置。您可以透過在建置映像之前設定DOCKER_BUILDKIT=1 來實現此目的:
DOCKER_BUILDKIT=1 docker build -t myimage .
或者,您可以使用docker buildx:
docker buildx build -t myimage .
透過預先建置和快取相依性您可以大幅減少Docker 映像的建置時間,尤其是對於大型或複雜的專案。這種最佳化可以在開發和部署過程中節省大量時間。
以上是如何透過預先建置依賴項和使用建置快取來優化 Docker 映像建置?的詳細內容。更多資訊請關注PHP中文網其他相關文章!