Heim  >  Artikel  >  Backend-Entwicklung  >  Wie kann ich die Erstellungszeiten für Docker-Images erheblich verkürzen, indem ich Go-Module vorab erstellt und zwischenspeichere?

Wie kann ich die Erstellungszeiten für Docker-Images erheblich verkürzen, indem ich Go-Module vorab erstellt und zwischenspeichere?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-27 06:38:02712Durchsuche

How can I significantly reduce Docker image build times by pre-building and caching Go modules?

Vorab-Build- und Caching-Module für die schnelle Docker-Image-Erstellung

Beim Erstellen eines Docker-Images ist es unbedingt erforderlich, den Build-Prozess zu optimieren, um den Zeitaufwand für die Erstellung von Abhängigkeiten zu minimieren. Während Docker das Caching von Abhängigkeitsebenen ermöglicht, bleibt der anfängliche Aufbau der Abhängigkeit eine zeitaufwändige Aufgabe. Um dies zu umgehen, beschäftigen wir uns mit der Vorerstellung und dem Zwischenspeichern aller erforderlichen Module, die in go.mod aufgeführt sind.

Vorerstellung aller Go-Module

Der Befehl „go“ bietet eine Dedizierter Mechanismus zur Voraberstellung von Go-Modulen. Sehen wir uns an, wie es funktioniert:

go build -i github.com/mattn/go-sqlite3

Dieser Befehl weist Go an, das go-sqlite3-Modul einschließlich seiner transitiven Abhängigkeiten zu erstellen. Die erstellten Artefakte werden im Modulcache gespeichert, der sich unter $GOPATH/pkg/mod/cache/download befindet.

Mit diesem Ansatz können Sie alle in go.mod aufgeführten Module vorab erstellen, indem Sie sie durchlaufen und Geben Sie für jeden den Befehl go build -i aus.

Vorgefertigte Module in Docker zwischenspeichern

Um die vorgefertigten Module in Ihrem Docker-Image-Build zu nutzen, nutzen wir Dockers Mount-Mechanismus zur gemeinsamen Nutzung des Modulcaches zwischen den Build- und Laufzeitumgebungen des Containers.

Beachten Sie die folgende Docker-Dateistruktur:

FROM docker.io/golang:1.16.7-alpine AS build
WORKDIR /src
COPY go.* .
RUN go mod download

# Mount the module cache from the host to the container
RUN --mount=type=bind,source=$GOPATH/pkg/mod/cache/download,target=/root/.cache/go-build \
go build -o /out/example .

FROM scratch
COPY --from=build /out/example /

Das Argument --mount mountet den Modulcache des Hosts die Umgebung des Containers unter /root/.cache/go-build. Dadurch wird sichergestellt, dass die vorgefertigten Module während der Image-Erstellung verfügbar sind.

Build-Optimierung mit DOCKER_BUILDKIT

Um die Cache-Funktionalität zu nutzen, stellen Sie sicher, dass Sie währenddessen DOCKER_BUILDKIT=1 verwenden der Image-Build:

DOCKER_BUILDKIT=1 docker build -t myimage .

Alternativ können Sie Docker Buildx verwenden:

docker buildx build -t myimage .

Fazit

Go-Module vorab erstellen und zwischenspeichern in Docker nutzt Optimierungen, die die Image-Erstellungszeiten erheblich verkürzen. Durch das Verständnis des Befehls go build -i und die Nutzung des Cache-Mount-Mechanismus von Docker können Entwickler ihre Arbeitsabläufe zur Container-Image-Erstellung verbessern.

Das obige ist der detaillierte Inhalt vonWie kann ich die Erstellungszeiten für Docker-Images erheblich verkürzen, indem ich Go-Module vorab erstellt und zwischenspeichere?. 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