Constructions en plusieurs étapes pour gagner en efficacité
Utilisez des constructions en plusieurs étapes pour créer des images de production plus petites et plus sécurisées en séparant les dépendances de construction et d’exécution.
Constructions en plusieurs étapes pour gagner en efficacité est une leçon Docker & DevOps Fundamentals 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 Docker & DevOps Fundamentals, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Docker & DevOps Fundamentals comprend 4 leçons au total.
Introduction aux compilations en plusieurs étapes
Bienvenue dans l’optimisation avancée des Dockerfile ! Aujourd’hui, nous allons découvrir les compilations en plusieurs étapes, une technique puissante pour créer des images Docker plus petites et plus efficaces.
Des images plus petites permettent des téléchargements plus rapides, une sécurité renforcée et une meilleure utilisation des ressources.

Pourquoi la taille des images est importante
Lorsque vous construisez une image Docker, elle contient souvent des outils et des dépendances nécessaires uniquement pendant le processus de compilation, et non lors de l’exécution finale de l’application.
- Téléchargements plus rapides : les images plus petites se téléchargent plus rapidement.
- Moins d’espace disque : cela économise de l’espace de stockage sur les registres et les hôtes.
- Surface d’attaque réduite : moins de composants signifie moins de vulnérabilités potentielles.
- Sécurité renforcée : votre image de production ne contient que les éléments essentiels.
Le problème des étapes uniques
Prenons le cas d’une application compilée, comme une application écrite en Go. Un Dockerfile traditionnel à étape unique inclurait l’intégralité du compilateur Go et des dépendances de développement dans l’image finale.
L’image finale serait ainsi beaucoup plus volumineuse que nécessaire, car le compilateur n’est pas requis pour exécuter le fichier binaire compilé.
Exemple à étape unique (Go)
Voici une application Go simple et un Dockerfile qui la construit en une seule étape. Remarquez que l’environnement de compilation est inclus dans l’image finale.
main.go :
package main
import "fmt"
func main() {
fmt.Println("Hello from Single-Stage Docker!")
}Dockerfile à étape unique
Ce Dockerfile utilise `golang:1.21-alpine` comme base. Après la compilation de l’application, cette image de base volumineuse, ainsi que tous ses outils de compilation, reste dans l’image finale.
FROM golang:1.21-alpine
WORKDIR /app
COPY main.go .
RUN go build -o myapp main.go
EXPOSE 8080
CMD ["./myapp"]Anatomie des compilations en plusieurs étapes
Les compilations en plusieurs étapes résolvent ce problème en vous permettant de définir plusieurs instructions `FROM` dans un seul Dockerfile. Chaque `FROM` démarre une nouvelle étape de compilation.
- Utilisez le mot-clé
ASpour nommer une étape (par exemple,FROM golang:1.21-alpine AS builder). - Vous pouvez ensuite copier des artefacts depuis une étape précédente à l’aide de
COPY --from=<stage_name>.
Seule l’étape finale est enregistrée comme image.
Structure en plusieurs étapes
Un Dockerfile classique en plusieurs étapes comporte au moins deux étapes :
- Étape de compilation : elle contient tous les outils et le code source nécessaires pour compiler votre application.
- Étape d’exécution : une image de base minimale qui contient uniquement l’application compilée et ses dépendances d’exécution.
L’image intermédiaire de l’étape de compilation est supprimée, ce qui laisse une image finale légère.
Exemple en plusieurs étapes (Go)
Réécrivons le Dockerfile de notre application Go en utilisant une approche en plusieurs étapes. Nous construirons l’application lors de la première étape, puis nous copierons uniquement le fichier binaire compilé dans une image de base `alpine` beaucoup plus petite.
# Stage 1: Build the application
FROM golang:1.21-alpine AS builder
WORKDIR /app
COPY main.go .
RUN go build -o myapp main.go
# Stage 2: Create the final lightweight image
FROM alpine:latest
WORKDIR /app
COPY --from=builder /app/myapp .
EXPOSE 8080
CMD ["./myapp"]Exécuter une compilation en plusieurs étapes
Lorsque vous construisez ce Dockerfile, Docker exécute chaque étape. Toutefois, seul le contenu de la dernière instruction `FROM`, associé aux fichiers copiés depuis les étapes précédentes, constitue l’image finale.
Le résultat est une image nettement plus petite que celle issue d’une compilation à étape unique, car le compilateur Go et les outils de compilation restent dans les étapes précédentes.
Avantages des compilations en plusieurs étapes
Les compilations en plusieurs étapes sont particulièrement utiles pour :
- Les langages compilés : Go, Java, C++ et Rust.
- Les infrastructures frontales : construire des applications React/Angular et servir des ressources statiques avec Nginx.
- Les applications Node.js : installer `node_modules` dans une étape de compilation, puis copier uniquement `package.json`, `package-lock.json` et l’application construite dans une image d’exécution légère.
Vérifiez vos connaissances
Quels sont les principaux avantages de l’utilisation de compilations Docker en plusieurs étapes ?
Récapitulatif : efficacité des compilations en plusieurs étapes
Vous avez découvert les compilations Docker en plusieurs étapes !
- Elles utilisent plusieurs instructions
FROMdans un seul Dockerfile. - Le mot-clé
ASnomme les étapes, etCOPY --from=transfère les artefacts. - Le principal avantage réside dans des images finales nettement plus petites, plus sécurisées et plus efficaces.
Cette technique est essentielle pour optimiser vos applications conteneurisées. Ensuite, nous verrons comment exploiter la mise en cache des compilations !
Questions Fréquemment Posées
La leçon « Constructions en plusieurs étapes pour gagner en efficacité » est-elle gratuite ?
Oui — le texte complet de « Constructions en plusieurs étapes pour gagner en efficacité » 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 Docker & DevOps Fundamentals, passe à CoddyKit PRO. Le cours Docker & DevOps Fundamentals comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Constructions en plusieurs étapes pour gagner en efficacité » ?
Utilisez des constructions en plusieurs étapes pour créer des images de production plus petites et plus sécurisées en séparant les dépendances de construction et d’exécution. Tu pratiques Docker & DevOps Fundamentals 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 Docker & DevOps Fundamentals ?
Aucune expérience préalable n'est requise. Docker & DevOps Fundamentals 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 « Constructions en plusieurs étapes pour gagner en efficacité » ?
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 Docker & DevOps Fundamentals ?
Oui. Chaque leçon Docker & DevOps Fundamentals 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
- Constructions en plusieurs étapes pour gagner en efficacité
- Tirer parti de la mise en cache des constructions
- Bonnes pratiques de sécurité des Dockerfiles
- Réduire la taille des images avec des bases Slim et Distroless