Stockage et Volumes Persistants

Docker
Système & Réseau
Gérer la persistance des données avec les volumes Docker gérés et les montages liés (bind mounts).

Par défaut, les données générées au sein d’un conteneur sont temporaires et éphémères. Lorsqu’un conteneur est supprimé (docker rm), tous les fichiers créés ou modifiés pendant son exécution sont définitivement perdus.

Pour héberger des applications d’État (Stateful) — comme une base de données PostgreSQL, des fichiers téléversés par des utilisateurs ou des journaux d’audit —, Docker propose des mécanismes de persistance des données indépendants du cycle de vie du conteneur.

🧱 L’Anatomie du Stockage Docker (Copy-on-Write)

Une image Docker est constituée de plusieurs couches en lecture seule (Read-Only Layers). Lorsqu’un conteneur démarre, Docker ajoute une mince couche supérieure en lecture-écriture (Writable Layer ou Container Layer).

Superposition des Couches d’Image et de la Couche Conteneur Éphémère

Toutes les écritures (création de fichier, modification) s’effectuent dans cette couche éphémère grâce au système Copy-on-Write (CoW).

💾 Les 3 Types de Montages Docker

Docker propose trois stratégies distinctes pour conserver les données hors de la couche éphémère :

2.0.1. Bind Mounts

Lie un dossier ou fichier précis de votre ordinateur hôte directement dans le conteneur.

  • Idéal pour : Le développement local (mise à jour du code en direct / hot-reload).
  • Inconvénient : Dépend du système de fichiers et des chemins de la machine hôte.
2.0.2. Volumes Nommés

Gérés intégralement par Docker dans une zone dédiée isolée (/var/lib/docker/volumes/).

  • Idéal pour : La production, les bases de données et la sauvegarde.
  • Avantage : Indépendants de la structure du système d’exploitation hôte.
2.0.3. tmpfs Mounts

Stocke les données directement dans la mémoire RAM de la machine hôte sans écriture disque.

  • Idéal pour : Les secrets, clés privées ou caches nécessitant une haute performance et zéro trace disque.
  • Inconvénient : Données perdues à l’arrêt de la machine.

📊 Comparatif Interactif des Performances & Fonctions

Sélectionnez le mode de stockage pour analyser ses métriques de performance et de sécurité :

Matrice d’Évaluation des Modes de Stockage

Partage direct de répertoires système hôte.

Stockage isolé et géré par le Docker Daemon.

Espace mémoire vive (RAM) temporaire.

🧪 Simulateur Interactif : Impact du docker rm

Testez l’impact de la suppression d’un conteneur avec et sans montage de stockage :

Simulateur de Persistance des Données

Conteneur standard sans volume attaché.

Dossier du projet hôte monté avec -v $PWD/app:/app.

Volume géré par Docker monté avec -v ma-db-data:/var/lib/mysql.

État du Système de Fichiers

💻 Pratique : Syntaxe des Commandes -v et --mount

4.1. Utiliser un Bind Mount (Développement Local)

Pour lier votre dossier de code actuel ($PWD sous Linux/macOS) à un serveur Nginx :

# Syntaxe courte (-v) : cheminhôte:cheminconteneur
docker run -d -p 8080:80 -v $PWD/site-web:/usr/share/nginx/html --name mon-web nginx
💡 Modifiez en direct !

Toute modification apportée à un fichier HTML sur votre ordinateur dans ./site-web sera immédiatement reflétée sur http://localhost:8080 sans redémarrer le conteneur.

5.1. Utiliser un Volume Nommé (Production & Bases de Données)

# 1. Créer un volume nommé géré par Docker
docker volume create ma-db-data

# 2. Attacher le volume lors du lancement de MySQL
docker run -d --name base-donnees \
  -e MYSQL_ROOT_PASSWORD=secret \
  -v ma-db-data:/var/lib/mysql \
  mysql:8.0

5.2. Gérer les Volumes en Ligne de Commande

# Lister les volumes gérés par Docker
docker volume ls

# Obtenir l'emplacement exact et les détails d'un volume
docker volume inspect ma-db-data

# Supprimer un volume inactif
docker volume rm ma-db-data

# Nettoyer TOUS les volumes non rattachés à un conteneur
docker volume prune