DevOpsFacile
AccueilParcours de formationCertificationsModulesCheat SheetÀ Propos
DevOpsFacile

Une plateforme d'apprentissage complète pour maîtriser les pratiques DevOps modernes, du débutant à l'expert.

contact@devopsfacile.fr

Formation

  • Parcours de formation
  • Modules

Informations

  • À Propos
  • Conditions d'utilisation
  • Confidentialité
  • Mentions légales

© 2026 DevOps Facile. Tous droits réservés.

Fait avec pour la communauté DevOps

ModulesCréer ses images Docker : Dockerfile, volumes et réseaux

Module

Écrivez des Dockerfiles, gérez les volumes et configurez les réseaux Docker.

  • 1h30
  • Intermédiaire
  • 6 exercices
Voir les exercices

Formation 100 % Linux

Tous les modules nécessitent un environnement Linux. Si vous êtes sur Windows, installez d'abord WSL (Windows Subsystem for Linux) avant de continuer.

Créer ses images Docker : Dockerfile, volumes et réseaux

🎯 Objectifs

  • Configurer le port mapping et les réseaux Docker
  • Persister les données avec les volumes
  • Écrire un Dockerfile pour construire une image
  • Appliquer les bonnes pratiques de construction d'images

📋 Prérequis

  • Docker Débutant - images, conteneurs, commandes de base
  • Docker installé et fonctionnel

🌐 Ports et Réseaux

Port mapping

Le flag -p redirige un port de l'hôte vers le conteneur :

bash
# Port 8080 de l'hôte → port 80 du conteneur
docker run -d -p 8080:80 nginx

# Plusieurs ports
docker run -d -p 8080:80 -p 8443:443 nginx

Types de réseaux

TypeDescriptionCas d'usage
bridgeRéseau isolé par défautConteneurs sur la même machine
hostPartage le réseau de l'hôtePerformance maximale
noneAucun réseauConteneur totalement isolé

Réseaux personnalisés

Les conteneurs sur un réseau personnalisé se découvrent par nom DNS :

bash
# Créer un réseau
docker network create mon-reseau

# Lancer deux conteneurs sur ce réseau
docker run -d --name api --network mon-reseau node-api
docker run -d --name db --network mon-reseau postgres:16

💡 Depuis le conteneur api, vous pouvez atteindre la base avec db:5432 - Docker résout le nom automatiquement.

bash
# Gestion des réseaux
docker network ls
docker network inspect mon-reseau
docker network rm mon-reseau

💾 Volumes et Données Persistantes

Pourquoi ?

Par défaut, les données d'un conteneur sont perdues à sa suppression. Les volumes permettent de persister les données.

Trois types de montage

TypeSyntaxeCas d'usage
Bind mount-v /chemin/hôte:/chemin/conteneurDéveloppement (code source)
Named volume-v nom-volume:/chemin/conteneurProduction (bases de données)
tmpfs--tmpfs /cheminDonnées temporaires en mémoire

Exemples pratiques

bash
# Bind mount - synchroniser le code local
docker run -d -v $(pwd)/src:/app/src -p 3000:3000 node-app

# Named volume - persister les données PostgreSQL
docker run -d --name db \
  -v pgdata:/var/lib/postgresql/data \
  -e POSTGRES_PASSWORD=secret \
  postgres:16

Gestion des volumes

bash
docker volume ls
docker volume inspect pgdata
docker volume rm pgdata
docker volume prune          # Supprimer les volumes inutilisés

⚠️ docker volume prune supprime tous les volumes non utilisés. Vérifiez avant d'exécuter.


📝 Dockerfile

Concept

Un Dockerfile est une recette pour construire une image. Chaque instruction crée une couche.

Exemple : application Node.js

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

Instructions principales

InstructionRôleExemple
FROMImage de baseFROM node:20-alpine
WORKDIRRépertoire de travailWORKDIR /app
COPYCopier des fichiersCOPY . .
RUNExécuter une commande au buildRUN npm install
ENVVariable d'environnementENV NODE_ENV=production
ARGVariable de build uniquementARG VERSION=1.0
EXPOSEDocumenter le port utiliséEXPOSE 3000
CMDCommande par défaut au lancementCMD ["node", "app.js"]
ENTRYPOINTPoint d'entrée fixeENTRYPOINT ["python"]
USERUtilisateur d'exécutionUSER appuser
HEALTHCHECKVérification de santéHEALTHCHECK CMD curl -f http://localhost/

Construire et lancer

bash
# Construire l'image
docker build -t mon-app:1.0 .

# Lancer un conteneur
docker run -d -p 3000:3000 mon-app:1.0

Le fichier .dockerignore

Empêche de copier des fichiers inutiles dans l'image (comme .gitignore pour Git) :

node_modules
.git
.env
*.log
Dockerfile
.dockerignore

💡 Un bon .dockerignore réduit la taille de l'image et accélère le build.


✨ Bonnes Pratiques Dockerfile

1. Exploiter le cache de couches

Copiez les dépendances avant le code source - les dépendances changent moins souvent :

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

2. Minimiser le nombre de couches

Chaînez les commandes RUN avec && :

dockerfile
RUN apt-get update && \
    apt-get install -y curl && \
    rm -rf /var/lib/apt/lists/*

3. Utiliser un utilisateur non-root

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

⚠️ Ne jamais exécuter un conteneur en production en tant que root.

4. Préférer COPY à ADD

COPY est explicite et prévisible. Réservez ADD uniquement si vous avez besoin de décompresser une archive.


⚠️ Erreurs Courantes

ErreurCauseSolution
COPY failed: file not foundFichier absent ou dans .dockerignoreVérifier le chemin et .dockerignore
Build lent après chaque changementMauvais ordre des instructionsCopier les dépendances avant le code
Image trop volumineuseImage de base lourdeUtiliser une variante -alpine
EACCES permission deniedFichiers non accessibles par l'utilisateurVérifier USER et les permissions
Volume vide au démarrageBind mount écrase le contenuUtiliser un named volume

📌 Points Clés

  • Le port mapping (-p) expose les conteneurs sur le réseau hôte
  • Les réseaux personnalisés permettent la découverte DNS entre conteneurs
  • Les volumes persistent les données au-delà du cycle de vie du conteneur
  • Un Dockerfile est une recette reproductible pour construire une image
  • Respectez l'ordre des instructions pour optimiser le cache de build

📚 Ressources

  • Dockerfile reference
  • Docker Networking
  • Manage data in Docker
  • Best practices for Dockerfiles

🚀 Prochaines étapes

Vous maîtrisez Dockerfile, volumes et réseaux. Passez à Docker en production :

  1. Docker Compose et optimisation pour la production - Docker Compose, multi-stage builds et production

Exercices Pratiques

6 exercices pour mettre en pratique

01

01 - Écrire votre premier Dockerfile

35 minutesIntermédiaire
02

02 - Optimiser les layers d'une image Docker

30 minutesIntermédiaire
03

03 - Persister les données avec les volumes

30 minutesIntermédiaire
04

04 - Configurer les réseaux Docker

20 minutesIntermédiaire
05

05 - Déboguer avec docker exec et les outils internes

15 minutesIntermédiaire
06

07 - Projet Capstone : Construire et déployer une image Docker personnalisée

45 minutesAvancé
Retour aux modules

Sur cette page

  • 🎯 Objectifs
  • 📋 Prérequis
  • 🌐 Ports et Réseaux
  • Port mapping
  • Types de réseaux
  • Réseaux personnalisés
  • 💾 Volumes et Données Persistantes
  • Pourquoi ?
  • Trois types de montage
  • Exemples pratiques
  • Gestion des volumes
  • 📝 Dockerfile
  • Concept
  • Exemple : application Node.js
  • Instructions principales
  • Construire et lancer
  • Le fichier .dockerignore
  • ✨ Bonnes Pratiques Dockerfile
  • 1. Exploiter le cache de couches
  • 2. Minimiser le nombre de couches
  • 3. Utiliser un utilisateur non-root
  • 4. Préférer COPY à ADD
  • ⚠️ Erreurs Courantes
  • 📌 Points Clés
  • 📚 Ressources
  • 🚀 Prochaines étapes