Maison >développement back-end >Golang >Comment puis-je réduire considérablement les temps de création d'images Docker en pré-construisant et en mettant en cache les modules Go ?

Comment puis-je réduire considérablement les temps de création d'images Docker en pré-construisant et en mettant en cache les modules Go ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-27 06:38:02805parcourir

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

Modules de pré-construction et de mise en cache pour la création d'images Swift Docker

Lors de la création d'une image Docker, il est impératif d'optimiser le processus de construction afin de minimiser le temps passé à créer des dépendances. Bien que Docker permette la mise en cache des couches de dépendances, la création initiale des dépendances reste une tâche fastidieuse. Pour contourner cela, nous nous penchons sur la pré-construction et la mise en cache de tous les modules requis répertoriés dans go.mod.

Pré-construction de tous les modules Go

La commande go fournit un mécanisme dédié pour pré-construire les modules Go. Explorons comment cela fonctionne :

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

Cette commande demande à Go de créer le module go-sqlite3, y compris ses dépendances transitives. Il stocke les artefacts construits dans le cache du module, situé dans $GOPATH/pkg/mod/cache/download.

En utilisant cette approche, vous pouvez pré-construire tous les modules répertoriés dans go.mod en les itérant et en émettant la commande go build -i pour chacun.

Mise en cache des modules prédéfinis dans Docker

Pour utiliser les modules prédéfinis dans la construction de votre image Docker, nous exploitons Mécanisme de montage de Docker pour partager le cache de module entre les environnements de construction et d'exécution du conteneur.

Considérez la structure Dockerfile suivante :

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 /

L'argument --mount monte le cache de module de l'hôte dans l'environnement du conteneur à /root/.cache/go-build. Cela garantit que les modules prédéfinis sont disponibles lors de la création de l'image.

Optimisation de la construction avec DOCKER_BUILDKIT

Pour exploiter la fonctionnalité de cache, assurez-vous d'utiliser DOCKER_BUILDKIT=1 pendant la construction de l'image :

DOCKER_BUILDKIT=1 docker build -t myimage .

Vous pouvez également utiliser docker buildx :

docker buildx build -t myimage .

Conclusion

Pré-construction et mise en cache des modules Go dans Docker exploite des optimisations qui réduisent considérablement les temps de création d’images. En comprenant la commande go build -i et en tirant parti du mécanisme de montage du cache de Docker, les développeurs peuvent améliorer leurs flux de travail de création d'images de conteneurs.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn