Comprendre les Volumes Docker

Les conteneurs Docker sont éphémères par conception. Lorsqu’un conteneur est arrêté et supprimé, toutes les données écrites dans le système de fichiers du conteneur sont perdues. La plupart des applications réelles ont besoin de données persistantes.

Docker fournit trois mécanismes de persistance :

  1. Volumes Nommés : Gérés par Docker, stockés dans /var/lib/docker/volumes/.
  2. Bind Mounts : Mappent un répertoire spécifique de l’hôte dans le conteneur.
  3. Montages tmpfs : Stockage en mémoire éliminé à l’arrêt du conteneur.

Prérequis

  • Docker Engine 20.10+ installé.
  • Accès shell à l’hôte Docker.
  • Familiarité de base avec les commandes CLI Docker.

Problèmes Courants de Volumes Docker

1. Perte de Données au Redémarrage

docker volume create myapp-data
docker run -d --name postgres-db \
  -v myapp-data:/var/lib/postgresql/data \
  -e POSTGRES_PASSWORD=secret postgres:16

Critique : docker-compose down -v supprimera tous les volumes.

2. Erreurs de Permission Refusée

docker exec mycontainer id
ls -lan /chemin/vers/repertoire/hote
docker exec mycontainer ls -lan /data
docker run -d -v myvolume:/data myimage
docker run -d --user "$(id -u):$(id -g)" -v ./data:/data myimage

3. Bind Mount Affiche un Répertoire Vide

Les bind mounts remplacent le système de fichiers du conteneur. Utilisez des volumes nommés qui préservent le contenu de l’image.

4. Volumes Orphelins Consommant de l’Espace Disque

docker volume ls -f dangling=true
docker system df
docker volume prune

5. Synchronisation sur macOS/Windows

  • Utilisez VirtioFS (Docker Desktop 4.15+).
  • Utilisez des volumes nommés pour les grands ensembles de données.

Prévention et Meilleures Pratiques

  • Utilisez toujours des volumes nommés pour les bases de données.
  • N’utilisez jamais docker-compose down -v en production.
  • Sauvegardez les volumes régulièrement.
  • Configurez les montages en lecture seule avec le suffixe :ro.

Résumé

  • Les conteneurs Docker sont éphémères — utilisez toujours des volumes pour les données persistantes.
  • Les erreurs de permission proviennent d’incompatibilités d’UID.
  • Les volumes nommés sont préférés en production.
  • Nettoyez les volumes orphelins avec docker volume prune.

Articles Connexes