Heim  >  Artikel  >  Backend-Entwicklung  >  Wie kann man Abhängigkeiten in Docker-Images für Golang-Projekte effektiv zwischenspeichern?

Wie kann man Abhängigkeiten in Docker-Images für Golang-Projekte effektiv zwischenspeichern?

Susan Sarandon
Susan SarandonOriginal
2024-10-27 00:51:02399Durchsuche

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

Abhängigkeiten in Docker-Images vorab erstellen und zwischenspeichern

Beim Erstellen von Docker-Images besteht die Notwendigkeit, Abhängigkeiten zwischenzuspeichern, um den Erstellungsprozess zu beschleunigen. Dieser Artikel befasst sich mit dem Problem, alle erforderlichen Module vorab zu erstellen und zwischenzuspeichern.

Ein Ansatz besteht darin, beim Erstellen des Images eine Ebene zum Zwischenspeichern von Abhängigkeiten hinzuzufügen. Dieser Schritt erfordert jedoch den Aufbau der Abhängigkeit, was zeitaufwändig sein kann. Eine alternative Methode ist die Verwendung des Befehls go build.

Eine andere Option besteht darin, alle in der Datei go.mod aufgeführten Abhängigkeiten vorab zu erstellen. Glücklicherweise stellt Docker eine Dokumentation bereit, die genau dieses Problem behebt. Der vorgeschlagene Ansatz besteht darin, die Docker-Datei wie folgt zu strukturieren:

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 /

Vereinfacht für eine einzelne Architektur sieht der relevante Caching-Aspekt wie folgt aus:

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 /

Dieser Mechanismus stellt einen Cache bereit Verzeichnis auf /root/.cache/go-build, das den Go-Build-Cache enthält. Während des ersten Builds wird der Cache gefüllt. Nachfolgende Builds nutzen die zwischengespeicherten Dateien.

Um diese Funktionalität zu aktivieren, schließen Sie DOCKER_BUILDKIT=1 ein, wenn Sie das Image mit dem Docker-Build-Befehl erstellen, oder verwenden Sie Docker Buildx. Tests haben die Wirksamkeit dieses Ansatzes bestätigt.

Das obige ist der detaillierte Inhalt vonWie kann man Abhängigkeiten in Docker-Images für Golang-Projekte effektiv zwischenspeichern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn