Go Academy · Leçon

Builds Docker en plusieurs étapes pour Go

Étape de construction avec une image finale scratch/alpine

Leçon 1 sur 413 étapes

Builds Docker en plusieurs étapes pour Go est une leçon Go Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Go Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Go Academy comprend 4 leçons au total.

Pourquoi utiliser plusieurs étapes ?

Une compilation en une seule étape qui compile le code Go produit une grande image contenant toute la chaîne d’outils Go. Les compilations en plusieurs étapes compilent le code lors d’une étape, puis copient uniquement le binaire dans une image finale minimale.

Dockerfile multi-étape de base

L’étape de compilation compile le binaire ; l’étape finale le copie dans une base minimale :

FROM golang:1.22-alpine AS build
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 GOOS=linux go build -ldflags="-s -w" -o myapp ./cmd/server

FROM scratch
COPY --from=build /app/myapp /myapp
COPY --from=build /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
ENTRYPOINT ["/myapp"]

FROM scratch

Une image FROM scratch ne contient rien : ni interpréteur de commandes ni bibliothèques du système d’exploitation. Le binaire Go doit être lié statiquement (CGO_ENABLED=0) et inclure explicitement tous les fichiers nécessaires.

FROM distroless

Les images distroless de Google fournissent des bibliothèques minimales du système d’exploitation (certificats CA, données de fuseau horaire) sans interpréteur de commandes — elles sont plus sûres que scratch pour les binaires qui nécessitent libc ou des certificats TLS.

FROM gcr.io/distroless/static-debian12
COPY --from=build /app/myapp /
ENTRYPOINT ["/myapp"]

FROM alpine pour disposer d’un interpréteur de commandes

Utilisez Alpine comme base finale lorsque vous avez besoin d’un interpréteur de commandes pour le débogage ou si le binaire utilise CGO. Alpine ajoute environ 5 Mo, mais inclut un interpréteur de commandes et un gestionnaire de paquets.

Mise en cache des couches pour go.mod

Copiez d’abord go.mod et go.sum, puis exécutez go mod download avant de copier le code source. Cette couche reste en cache jusqu’à la modification des dépendances, ce qui accélère les recompilations.

COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN go build ...

-ldflags="-s -w"

-s supprime la table des symboles ; -w supprime les informations de débogage DWARF. Ensemble, ces options réduisent la taille du binaire de 30 à 50 % sans incidence sur l’exécution.

Arguments de compilation

Utilisez ARG pour injecter des informations de version au moment de la compilation :

ARG VERSION=dev
RUN go build -ldflags="-X main.version=${VERSION}" -o myapp .

Utilisateur sans privilèges

Exécutez le binaire avec un utilisateur sans privilèges root pour renforcer la sécurité. Ajoutez un utilisateur dans l’image de base ou utilisez la balise nonroot de distroless :

FROM gcr.io/distroless/static-debian12:nonroot

Taille de l’image finale

Un binaire Go typique issu de scratch fait 5 à 20 Mo. Alpine ajoute environ 5 Mo. Une image golang complète fait environ 800 Mo. Les compilations en plusieurs étapes réduisent considérablement la surface d’attaque et le temps de téléchargement de l’image.

.dockerignore

Ajoutez un fichier .dockerignore pour exclure des fichiers du contexte de compilation : vendor/, .git/, *.test, *.prof. Cela accélère la compilation Docker et empêche l’inclusion de fichiers sensibles.

.git
vendor
*.test
*.prof
.env

Vérification rapide

Pourquoi CGO_ENABLED=0 doit-il être défini lors de la compilation d’un binaire Go destiné à une image Docker FROM scratch ?

Récapitulatif : compilations Docker en plusieurs étapes

Points clés :

  • Étape de compilation : image golang ; étape finale : scratch/distroless/alpine
  • CGO_ENABLED=0 pour un binaire statique (requis pour scratch)
  • Copiez d’abord go.mod pour la mise en cache des couches ; -ldflags="-s -w" pour réduire la taille du binaire
  • .dockerignore pour exclure .git, vendor et les fichiers de test
Gratuit pour commencer

Apprends Go avec un tuteur IA — gratuit

Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.

Cours
51
Leçons
203

Questions Fréquemment Posées

La leçon « Builds Docker en plusieurs étapes pour Go » est-elle gratuite ?

Oui — le texte complet de « Builds Docker en plusieurs étapes pour Go » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Go Academy, passe à CoddyKit PRO. Le cours Go Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Builds Docker en plusieurs étapes pour Go » ?

Étape de construction avec une image finale scratch/alpine Tu pratiques Go Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Go Academy ?

Aucune expérience préalable n'est requise. Go Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.

Combien de temps prend la leçon « Builds Docker en plusieurs étapes pour Go » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Go Academy ?

Oui. Chaque leçon Go Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Builds Docker en plusieurs étapes pour Go
  2. Configuration de l’environnement et secrets
  3. Docker Compose pour le développement local
  4. Contrôles d’état et réglages de production
← Retour à Go Academy