Avis Google vérifiés Tutoriels techniques

Comment écrire un Dockerfile de production

Apprenez à construire une image Docker légère et sécurisée avec multi-stage, utilisateur non-root et healthcheck.

Suggestions populaires
Ctrl K ouvrir · esc fermer
Voir toutes les formations →
Qualiopi · depuis 2024
511+ villes · 25 pays
OPCO et FNE
Par ··8 min de lecture
Série · DevOps ← Retour au blogComment écrire un Dockerfile de production

Ce que vous allez faire

À la fin de ce tutoriel vous disposerez d’un Dockerfile de production qui génère une image de moins de 150 Mo, exécute l’application sous un utilisateur non-root et expose un healthcheck. L’opération complète prend moins de trente minutes sur une machine disposant de Docker.

Prérequis

  • Docker 24.0 ou supérieur installé et dans le PATH
  • Accès en écriture dans le répertoire du projet
  • Application Node.js ou Python prête à être conteneurisée
  • Terminal ouvert avec droits utilisateur standard

Étape 1 — Créer le fichier .dockerignore

Le fichier .dockerignore exclut les fichiers inutiles du contexte de build et réduit la taille de l’image finale.

dockerfile
.git
node_modules
.env
*.log
Dockerfile*
docker-compose*.yml

Étape 2 — Écrire un build multi-étapes

Le build multi-étapes sépare la phase de compilation de l’exécution et produit une image finale contenant uniquement les artefacts nécessaires.

dockerfile
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

FROM node:20-alpine
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY package*.json ./
RUN npm ci --only=production
EXPOSE 3000
CMD ["node", "dist/main.js"]

Étape 3 — Ajouter un utilisateur non-root

L’exécution sous root augmente les risques en cas de compromission du conteneur.

dockerfile
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
USER appuser

Étape 4 — Optimiser le cache des couches

Placer les instructions COPY des dépendances avant le code source permet de réutiliser le cache tant que package.json ne change pas.

dockerfile
COPY package*.json ./
RUN npm ci
COPY . .

Étape 5 — Ajouter un HEALTHCHECK

Le healthcheck permet à Docker de détecter automatiquement les conteneurs défaillants.

dockerfile
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
  CMD curl -f http://localhost:3000/health || exit 1

Vérifier que tout fonctionne

bash
docker build -t monapp:prod .
docker run --rm -p 3000:3000 monapp:prod

Le conteneur répond sur le port 3000 et le healthcheck passe au vert dans docker ps.

Erreurs fréquentes

COPY . . copie tout le contexte y compris node_modules

Ajoutez ou mettez à jour le fichier .dockerignore avant le build.

L’image reste volumineuse malgré le multi-stage

Vérifiez que la seconde étape part bien d’une image minimale (alpine ou distroless) et que seuls les artefacts compilés sont copiés.

HEALTHCHECK échoue en permanence

Assurez-vous que curl est présent dans l’image finale ou remplacez la commande par wget ou node.

Aller plus loin

Intégrez le build dans un pipeline CI/CD, activez la signature des images et configurez Azure Container Registry pour la distribution.

Se former avec Learni

Formation Azure Container Registry : Gestion efficace des images Docker dans le Cloud

Administrateurs cloud et ingénieurs DevOps qui veulent stocker et distribuer des images Docker sur Azure. 3 journées en présentiel, niveau intermédiaire. Lien vers la formation

Formation Azure Container Registry 2026 - Stocker et gérer images Docker

Développeurs et administrateurs systèmes novices souhaitant maîtriser Azure Container Registry. 1 journée en présentiel, niveau novice. Lien vers la formation

Formation Container image scanning 2026 - Sécuriser vos images Docker

Ingénieurs DevOps et responsables sécurité qui veulent détecter les vulnérabilités dans les images. 4 journées en présentiel, niveau novice. Lien vers la formation

Devis sous 24 h

FAQ

Quelle commande permet de construire l’image avec le Dockerfile ?

La commande docker build -t monapp:prod . construit l’image en utilisant le Dockerfile présent dans le répertoire courant.

Comment vérifier que l’utilisateur non-root est bien actif ?

Exécutez docker run --rm monapp:prod id pour afficher l’UID et le GID de l’utilisateur dans le conteneur.

Le HEALTHCHECK fonctionne-t-il avec une image alpine ?

Oui, à condition d’installer curl ou d’utiliser wget dans le conteneur final.

Quelle est la différence entre COPY et ADD dans un Dockerfile de production ?

COPY est préféré car il ne décompresse pas automatiquement les archives et reste plus prévisible.

Cet article vous a-t-il été utile ?

Notez-le de 1 à 5 étoiles.

Commentaires

Une question sur cet article, un retour d'expérience ? Lancez la discussion.

Laisser un commentaire

Votre nom et votre texte sont affichés sous l'article. Un commentaire qui contient un lien ou un terme de notre liste de modération est d'abord relu par l'équipe ; les liens ne sont jamais cliquables.

Aller plus loin

Se former sur ce sujet avec Learni

Ce tutoriel couvre l'essentiel. Ces trois formations intra-entreprise vont plus loin : cas réels, environnement de votre SI, formateur praticien.

Formation Azure Container Registry : Gestion efficace des images Docker dans le Cloud

3 journées · présentiel · Intermédiaire

3 300 € HT

Voir la formation

Formation Azure Container Registry 2026 - Stocker et gérer images Docker

1 journée · présentiel · Novice

1 100 € HT

Voir la formation

Formation Container image scanning 2026 - Sécuriser vos images Docker

4 journées · présentiel · Novice

4 400 € HT

Voir la formation

Une équipe à former sur ce sujet ? Devis sous 24 h

Votre formation professionnelle partout

Construisons
votre prochain
parcours.

30 minutes avec un conseiller formation. Sans engagement. Sans argumentaire commercial maquillé en démo.

Réponse sous 24 h · Qualiopi · OPCO
WhatsApp