
Docker 映像中的預先建置與快取相依性
製作 Docker 映像時,需要快取相依性以加快建置流程。本文解決了預先建置所有必需模組並快取它們的問題。
一種方法是在建置映像時新增一個層來快取相依性。但是,此步驟需要建立依賴關係,這可能非常耗時。另一種方法是使用 go build 指令。
另一個選項是預先建立 go.mod 檔案中列出的所有依賴項。幸運的是,Docker 提供了解決這個問題的文件。建議的方法是以以下方式建置Dockerfile:
1 2 3 4 5 6 7 8 9 10 11 12 13 | FROM --platform=${BUILDPLATFORM} docker.io/golang:1.16.7-alpine AS build
ARG TARGETOS
ARG TARGETARCH
WORKDIR /src
ENV CGO_ENABLED=0
COPY go.* .
RUN go mod download
COPY . .
RUN --mount=type=cache,target=/root/.cache/go-build \
GOOS=${TARGETOS} GOARCH=${TARGETARCH} go build -o /out/example .
FROM scratch
COPY --from=build /out/example /
|
登入後複製
對於單一架構進行簡化,相關的快取方面如下所示:
1 2 3 4 5 6 7 8 9 | 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 build 指令建置映像時包含 DOCKER_BUILDKIT=1,或使用 docker buildx。測試證實了這種方法的有效性。
以上是如何有效快取Golang專案的Docker映像中的依賴關係?的詳細內容。更多資訊請關注PHP中文網其他相關文章!