Aujourd'hui, Kubernetes s'est imposé comme un outil incontournable dans l'univers du DevOps. Développé à l'origine par Google, il bénéficie d'une …
DevOpsIntroduction Dans l'écosystème Docker, deux techniques puissantes permettent d'améliorer significativement la sécurité et l'efficacité des containers : les multi-stage builds et les images distroless. Cet article explore comment ces approches permettent de réduire …
Christian
Aug. 8, 2025
Dans l'écosystème Docker, deux techniques puissantes permettent d'améliorer significativement la sécurité et l'efficacité des containers : les multi-stage builds et les images distroless. Cet article explore comment ces approches permettent de réduire la taille des images, d'améliorer la sécurité et d'optimiser le processus de construction.
Les multi-stage builds permettent d'utiliser plusieurs étapes (FROM) dans un même Dockerfile, où chaque étape peut avoir une base différente et où seuls les artefacts nécessaires sont transférés vers l'image finale.
Réduction de la taille : Seuls les fichiers nécessaires sont inclus dans l'image finale
Sécurité améliorée : Les outils de build (compilateurs, etc.) ne sont pas inclus dans l'image finale
Clarté : Le processus de build est mieux organisé en étapes logiques
dockerfile
# Étape de build FROM golang:1.21 as builder WORKDIR /app COPY . . RUN go build -o myapp # Étape finale FROM alpine:3.18 WORKDIR /app COPY --from=builder /app/myapp . CMD ["./myapp"]
Dans cet exemple, l'image finale ne contient que l'application compilée et non tout l'environnement Go.
Développées par Google, les images distroless contiennent uniquement l'application et ses dépendances directes, sans shell, package managers ni autres outils système.
Sécurité renforcée : Surface d'attaque réduite (pas de shell, pas d'outils inutiles)
Taille minimale : Seules les dépendances strictement nécessaires sont incluses
Stabilité : Moins de composants signifie moins de mises à jour critiques
dockerfile
# Étape de build FROM python:3.11-slim as builder WORKDIR /app COPY requirements.txt . RUN pip install --user -r requirements.txt # Étape finale avec distroless FROM gcr.io/distroless/python3 WORKDIR /app COPY --from=builder /root/.local /root/.local COPY . . ENV PATH=/root/.local/bin:$PATH CMD ["app.py"]
La combinaison des multi-stage builds avec des images distroless offre le meilleur des deux mondes :
dockerfile
# Étape 1: Construction FROM node:18 as builder WORKDIR /app COPY package*.json ./ RUN npm install COPY . . RUN npm run build # Étape 2: Exécution FROM gcr.io/distroless/nodejs:18 WORKDIR /app COPY --from=builder /app/dist ./dist COPY --from=builder /app/node_modules ./node_modules CMD ["dist/index.js"]
Choix de l'image de base :
Préférer les images officielles
Utiliser des versions spécifiques (pas de latest)
Gestion des dépendances :
Nettoyer les caches après l'installation
Utiliser .dockerignore pour exclure les fichiers inutiles
Sécurité :
Mettre à jour régulièrement les images de base
Scanner les images avec des outils comme Trivy ou Clair
Debugging :
Pour les images distroless, prévoir des images de debug avec shell
Utiliser des logs applicatifs détaillés
L'utilisation combinée des multi-stage builds et des images distroless permet de créer des containers Docker optimisés :
Plus petits : Réduction significative de la taille des images
Plus sécurisés : Surface d'attaque minimisée
Plus efficaces : Processus de build clair et maintenable
Ces techniques sont devenues des standards dans le déploiement d'applications containerisées en production, répondant aux exigences de performance et de sécurité des environnements modernes.
No comments yet. Be the first to comment!
Aujourd'hui, Kubernetes s'est imposé comme un outil incontournable dans l'univers du DevOps. Développé à l'origine par Google, il bénéficie d'une …
DevOps
1. Introduction Dans le monde du développement et du déploiement d’applications, les conteneurs ont révolutionné la façon dont nous créons …
Docker
Table des Matières 1. introduction-à-nginx 2. le-processus-principal-master-process 3. les-processus-travailleurs-worker-processes 4. le-contexte-principal-main-context 5. le-contexte-http-http-context 6. le-contexte-serveur-server-context 7. le-contexte-de-localisation-location-context 8. proxy-inverse-reverse-proxy …
Web
1. Introduction Dans le monde du développement et du déploiement d’applications, les conteneurs ont révolutionné la façon dont nous créons …
Docker
Questions d'entretien Docker - Guide Professionnel avec Explications et Illustrations 1. Qu'est-ce que Docker ? Docker est une plateforme open …
Docker