Exercice 03 : Persister les données avec les volumes
🎯 Objectifs
À la fin de cet exercice, vous serez capable de :
- ✅ Créer un volume nommé avec
docker volume create - ✅ Lister et inspecter des volumes avec
docker volume lsetdocker volume inspect - ✅ Monter un volume dans un conteneur avec
-v nom:/chemin - ✅ Utiliser un bind mount avec
-v $(pwd):/app - ✅ Vérifier que les données persistent après suppression du conteneur
Durée estimée : 30 min | Difficulté : ⭐⭐⭐☆☆
📖 Contexte
Par défaut, les données écrites dans un conteneur disparaissent avec lui. Les volumes nommés sont gérés par Docker et survivent aux suppressions de conteneurs. Les bind mounts pointent directement vers un dossier de l'hôte - idéaux pour le développement. Comprendre la différence est essentiel pour ne pas perdre de données en production.
📋 Énoncé
Démontrez la persistance des données en créant un volume nommé, en écrivant des données depuis un conteneur, en supprimant ce conteneur, puis en vérifiant que les données sont toujours accessibles depuis un nouveau conteneur.
🧭 Déroulement
Tâche 1 : Créer et inspecter un volume nommé
Créez un volume Docker nommé mes-donnees, puis affichez ses détails (chemin sur l'hôte, driver, date de création).
Indice :
docker volume create <nom>crée le volume.docker volume inspect <nom>affiche ses métadonnées en JSON, notamment le champMountpoint.
Vérification : docker volume ls liste mes-donnees avec le driver local.
Tâche 2 : Écrire des données depuis un conteneur
Lancez un conteneur Alpine en montant mes-donnees sur /data, puis créez un fichier dans ce volume :
docker run --rm -v mes-donnees:/data alpine \
sh -c "echo 'persistance Docker' > /data/test.txt && cat /data/test.txt"Indice :
--rmsupprime le conteneur automatiquement après exécution. Les données restent dans le volume.
Vérification : La commande affiche persistance Docker et le conteneur est supprimé (docker ps -a ne le liste plus).
Tâche 3 : Vérifier la persistance après suppression
Lancez un nouveau conteneur Alpine (sans --rm cette fois) monté sur le même volume et lisez le fichier précédemment créé.
Indice : Le volume
mes-donneesexiste indépendamment du conteneur. N'importe quel conteneur qui le monte voit les mêmes données.
Vérification : cat /data/test.txt dans le nouveau conteneur affiche persistance Docker.
Tâche 4 : Utiliser un bind mount
Créez un dossier mon-projet/ sur votre hôte, ajoutez-y un fichier config.json, puis lancez un conteneur Alpine en montant ce dossier sur /app. Modifiez config.json depuis l'intérieur du conteneur et vérifiez que la modification est visible sur l'hôte.
Indice :
-v $(pwd)/mon-projet:/appmonte le dossier courant dans le conteneur. Les modifications sont immédiatement reflétées des deux côtés.
Vérification : Le fichier modifié dans le conteneur est visible avec cat mon-projet/config.json sur l'hôte.
Tâche 5 : Nettoyer les volumes
Listez tous les volumes, supprimez mes-donnees, puis vérifiez qu'il n'existe plus.
Indice :
docker volume rm <nom>supprime un volume. Docker refuse la suppression si un conteneur (même arrêté) l'utilise encore.
Vérification : docker volume ls ne liste plus mes-donnees.
🗂️ Mini-Projet
Démontrez la persistance complète et validez chaque checkpoint :
docker volume create mes-donnees
docker volume inspect mes-donnees
docker run --rm -v mes-donnees:/data alpine \
sh -c "echo 'persistance Docker' > /data/test.txt"
docker run -it --name lecture -v mes-donnees:/data alpine \
cat /data/test.txt
docker rm lecture
mkdir mon-projet && echo '{"env":"dev"}' > mon-projet/config.json
docker run --rm -v $(pwd)/mon-projet:/app alpine \
sh -c "echo '{\"env\":\"prod\"}' > /app/config.json"
cat mon-projet/config.json
docker volume rm mes-donnees
docker volume lsCheckpoints de validation :
docker volume create mes-donneescrée le volume sans erreurdocker volume inspectaffiche leMountpointsur l'hôte- Les données écrites dans le volume survivent à la suppression du conteneur
- Un second conteneur lit les données du volume
- Le bind mount reflète les modifications hôte <-> conteneur en temps réel
docker volume rmsupprime le volume proprement