首頁  >  文章  >  後端開發  >  如何有效快取Golang專案的Docker映像中的依賴關係?

如何有效快取Golang專案的Docker映像中的依賴關係?

Susan Sarandon
Susan Sarandon原創
2024-10-27 00:51:02399瀏覽

How to Effectively Cache Dependencies in Docker Images for Golang Projects?

Docker 映像中的預先建置與快取相依性

製作 Docker 映像時,需要快取相依性以加快建置流程。本文解決了預先建置所有必需模組並快取它們的問題。

一種方法是在建置映像時新增一個層來快取相依性。但是,此步驟需要建立依賴關係,這可能非常耗時。另一種方法是使用 go build 指令。

另一個選項是預先建立 go.mod 檔案中列出的所有依賴項。幸運的是,Docker 提供了解決這個問題的文件。建議的方法是以以下方式建置Dockerfile:

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 /

對於單一架構進行簡化,相關的快取方面如下所示:

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn