Docker · Volumes

Volumes

Conservez les données importantes avec des volumes nommés et utilisez les bind mounts consciemment.

Leçon disponible
20 min

Objectifs

  • Comprendre la durée de vie de la couche d’écriture d’un container.
  • Créer et inspecter un volume Docker nommé.
  • Distinguer un volume géré par Docker d’un bind mount hôte.
  • Monter des données en lecture seule lorsque l’écriture n’est pas nécessaire.

Persister les données des containers

Les fichiers écrits dans la couche du container survivent à un simple arrêt, mais disparaissent avec la suppression du container. Les données durables doivent donc être placées dans un stockage extérieur à cette couche.

Un volume est géré par Docker et possède son propre cycle de vie. Un bind mount relie directement un chemin précis de l’hôte à un chemin du container.

Créer et inspecter un volume nommé

Docker choisit l’emplacement physique du volume sur l’hôte du daemon. Le nom stable permet de le rattacher à un autre container sans dépendre de l’ancienne instance.

Gérer les métadonnées du volume
docker volume create app-data
docker volume ls
docker volume inspect app-data
Monter le volume dans nginx
docker run -d \
  --name nginx-volume \
  -p 8080:80 \
  -v app-data:/usr/share/nginx/html \
  nginx

La commande crée ou réutilise app-data. Aucun exemple de cette leçon ne supprime automatiquement le volume.

Bind mounts

Un bind mount convient lorsqu’un fichier de configuration ou du code doit rester directement accessible depuis l’hôte. Il dépend toutefois du chemin et des permissions de cette machine.

Monter le dossier html courant en lecture seule sous Bash
docker run -d \
  -p 8080:80 \
  -v "$(pwd)/html:/usr/share/nginx/html:ro" \
  nginx

$(pwd) correspond à un shell de type Bash. Sous PowerShell, utilisez un chemin absolu compatible, par exemple fondé sur ${PWD}, et sous CMD un chemin fondé sur %cd%. Vérifiez toujours le chemin réellement transmis à Docker Desktop.

Volume nommé ou bind mount ?

Le volume nommé est portable au niveau de la configuration Docker et adapté aux données applicatives. Le bind mount donne un contrôle direct sur le chemin hôte, pratique pour le développement ou une configuration locale.

  • Volume nommé : emplacement géré par Docker, cycle de vie indépendant du container.
  • Bind mount : emplacement choisi sur l’hôte, dépendant de son arborescence.
  • Suffixe :ro : le processus du container ne peut pas écrire dans le montage.

Bonnes pratiques

Identifiez quelles données doivent persister, sauvegardez les volumes critiques et limitez les droits d’écriture. Un montage peut masquer les fichiers déjà présents au même chemin dans l’image.

  • Nommer explicitement les volumes de données importantes.
  • Préférer :ro pour une configuration qui ne doit pas être modifiée.
  • Tester les procédures de sauvegarde et de restauration.

Mini résumé

  • La couche d’écriture disparaît quand le container est supprimé.
  • Un volume nommé est géré par Docker et persiste indépendamment du container.
  • Un bind mount relie un chemin hôte précis au container.
  • Le mode lecture seule réduit les modifications possibles sur les données montées.

Mini quiz

Trois questions pour vérifier les notions essentielles de la leçon.

1. Que devient la couche d’écriture quand son container est supprimé ?
2. Quand un bind mount est-il particulièrement adapté ?
3. Pourquoi ajouter :ro à un montage de configuration ?