0 XP
?
Docker : de zéro à professionnel/Volumes et persistance
Intermédiaire50 min35 XP

Objectifs de cette leçon

  • Persister les données avec les volumes
  • Comprendre la différence bind mounts vs volumes
  • Gérer le partage de données entre conteneurs

Volumes et persistance des données 💾

Le problème de la persistance

Par défaut, les données dans un conteneur sont éphémères :

# Créer un conteneur et ajouter un fichier
docker run -it ubuntu bash
root@abc:/# echo "données importantes" > /data.txt
root@abc:/# exit

# Supprimer le conteneur
docker rm abc

# Les données sont PERDUES 💀

Solution : Utiliser des volumes ou des bind mounts.


Les 3 types de stockage

1. Volumes nommés (recommandé en prod)

┌─────────────────────────┐
│      Conteneur           │
│  /app/data ──────────┐   │
└──────────────────────┼───┘
                       │
            ┌──────────▼──────────┐
            │   Volume Docker     │
            │  (géré par Docker)  │
            │  /var/lib/docker/   │
            │    volumes/         │
            └─────────────────────┘
# Créer un volume
docker volume create mon-volume

# Lister les volumes
docker volume ls

# Utiliser un volume
docker run -d \
  -v mon-volume:/app/data \
  mon-app

# Inspecter un volume
docker volume inspect mon-volume

2. Bind mounts (développement)

┌─────────────────────────┐
│      Conteneur           │
│  /app ─────────────┐     │
└────────────────────┼─────┘
                     │
        ┌────────────▼────────────┐
        │  Répertoire de l'hôte   │
        │  /home/dev/mon-app      │
        └─────────────────────────┘
# Monter un dossier de l'hôte
docker run -d \
  -v $(pwd):/app \
  -v /app/node_modules \
  mon-app

# Le 2ème -v empêche l'écrasement de node_modules

3. tmpfs (données temporaires)

# Données en mémoire uniquement (disparaissent à l'arrêt)
docker run -d \
  --tmpfs /app/tmp \
  mon-app

Commandes pour les volumes

# Créer un volume
docker volume create ma-bdd

# Lister les volumes
docker volume ls

# Inspecter un volume
docker volume inspect ma-bdd

# Supprimer un volume
docker volume rm ma-bdd

# Supprimer tous les volumes inutilisés
docker volume prune

Exemple concret : PostgreSQL avec volume

# Créer un volume pour les données
docker volume create pgdata

# Lancer PostgreSQL avec le volume
docker run -d \
  --name ma-postgres \
  -e POSTGRES_PASSWORD=secret \
  -v pgdata:/var/lib/postgresql/data \
  -p 5432:5432 \
  postgres:15-alpine

# Les données survivent aux redémarrages !
docker stop ma-postgres
docker start ma-postgres
# → Les données sont toujours là ✅

Bonnes pratiques

CasType recommandéExemple
Base de donnéesVolume nommé-v pgdata:/var/lib/postgresql/data
DéveloppementBind mount-v $(pwd)/src:/app/src
Fichiers temporairestmpfs--tmpfs /app/cache
ConfigurationBind mount ou config-v ./nginx.conf:/etc/nginx/nginx.conf

Exercices 🎯

  1. Volume : Créez un volume, montez-le dans un conteneur, ajoutez un fichier, supprimez le conteneur, recréez-le avec le même volume. Le fichier est toujours là ?
  2. Bind mount : Montez votre dossier de code dans un conteneur et modifiez un fichier. La modification apparaît-elle dans le conteneur ?
  3. Persistance : Lancez PostgreSQL avec un volume, créez une table, redémarrez le conteneur. La table est toujours là ?

Prochaine leçon : Les réseaux Docker.

Volumes et persistance
Cliquez pour basculer
ConteneurNginx
Disque hôte/data
⚠️ docker rm <conteneur> → données perdues !
$ docker run -d nginx