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!