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 ?
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!