Retour au cours

Leçon 21 : Dockerfile Avancé : Constructions Multi-Étapes (Multi-Stage Builds)

Docker, de zéro à héros : Le cours complet sur la conteneurisation pour débutants

Leçon 21 : Dockerfile Avancé : Constructions Multi-Étapes (Multi-Stage Builds)

Un problème courant est que la compilation de code (par exemple, Java, Go, React) nécessite de grandes images d'outillage (SDKs, compilateurs, paquets npm), mais ces outils ne sont pas nécessaires dans l'environnement d'exécution final.

Le Problème : Images Gonflées (Bloated Images)

Si vous compilez une application Go dans une image Go standard, l'image finale résultante inclura l'ensemble de la chaîne d'outils du compilateur et les dépendances, rendant l'image inutilement volumineuse.

La Solution : Les Constructions Multi-Étapes (Multi-Stage Builds)

Les constructions multi-étapes vous permettent de définir plusieurs instructions FROM dans un seul Dockerfile. Vous copiez uniquement les artefacts nécessaires (le binaire compilé ou les fichiers statiques finaux) de l'étape 'builder' vers l'étape finale 'runtime' légère.

Exemple : Construction d'une Application Go

dockerfile

--- ÉTAPE 1 : Étape de Construction (Builder Stage) ---

FROM golang:1.21-alpine AS builder

WORKDIR /app COPY go.mod go.sum ./ RUN go mod download COPY . .

Compiler le binaire statique

RUN CGO_ENABLED=0 go build -o /app/my_app .

--- ÉTAPE 2 : Étape d'Exécution Finale (Runtime Stage) ---

Utiliser une image minimale (alpine) qui n'inclut pas le compilateur

FROM alpine:latest

WORKDIR /root/

Copier uniquement le binaire compilé à partir de l'étape 'builder'

COPY --from=builder /app/my_app .

Définir la commande exécutable finale

CMD ["./my_app"]

Avantages :

  • Images Plus Petites : L'image finale est considérablement plus petite car elle ne contient que l'exécutable et les bibliothèques OS nécessaires.
  • Sécurité Améliorée : Moins de surface d'attaque car les outils de développement sont absents de l'image de production.