En savoir plus

Les volumes Docker

La surprise de down --volumes : pourquoi l'incendie ne brûle rien dans votre laboratoire, et le deuxième mécanisme de persistance que Docker gère lui-même.

420-5A4-MT · Serveurs évolutifs · Compose

La surprise : un incendie qui ne brûle rien

Expérience Essayez-la sur votre partition du laboratoire
sudo docker compose down --volumes
# enleve les conteneurs, le reseau... et les volumes
sudo docker compose up -d
# surprise : l'article temoin est toujours la !

La commande tient pourtant sa promesse : elle enlève bel et bien les volumes. Mais votre partition n'en utilise aucun : ./wordpress et ./database sont des répertoires liés (bind mounts), des dossiers de la machine hôte que Docker ne s'autorise jamais à effacer. down --volumes n'a donc rien à se mettre sous la dent.

La commande n'est pas cassée : elle vise un mécanisme que votre partition n'utilise pas.

Les trois types de montages

Taxonomie « mount » est le terme parapluie

Dans le monde de l'exécution (docker run, Compose), quand un conteneur tourne, on peut lui attacher trois types de montages :

📦 volume (nommé ou anonyme)
Données rangées dans /var/lib/docker/volumes/, entièrement gérées par Docker. Le mécanisme que la documentation officielle recommande.
🔗 bind mount (répertoire lié)
Un répertoire de la machine hôte prêté au conteneur, géré par vous : c'est ce que fait votre partition avec ./wordpress et ./database.
⚡ tmpfs
De la mémoire vive gérée par le noyau Linux : rien n'est écrit sur le disque, tout disparaît à l'arrêt du conteneur.
Donc techniquement, un volume EST un type de mount. Le drapeau moderne --mount type=... force d'ailleurs à nommer le type explicitement.

Les volumes nommés dans la partition

Partition alternative Enlever ./ change tout
services:
  wordpress:
    volumes:
      - wordpress:/var/www/html
      # sans ./ : un volume, plus un repertoire
  db:
    volumes:
      - database:/var/lib/mysql
volumes:
# la section racine declare les volumes du projet
  wordpress:
  database:

Sans le ./, le nom ne désigne plus un répertoire : il désigne un volume que Docker crée et gère lui-même, déclaré dans la section racine volumes:. Avec cette partition, down préserve les volumes et down --volumes les brûle pour de vrai : le trio pause, rangement, incendie fonctionne sans rm -rf.

Deux caractères séparent les deux mécanismes : la confusion la plus classique de Compose tient dans un ./.

La boîte à outils docker volume

sudo docker volume create my-vol
# creer un volume
sudo docker volume ls
# lister les volumes de la machine
sudo docker volume inspect my-vol
# inspecter : montre le chemin reel sur l'hote
sudo docker volume rm my-vol
# enlever un volume

Pour verser les fichiers du répertoire courant dans un volume (astuce tirée de stackoverflow.com/a/67280719) :

sudo docker volume create my_named_volume
sudo cp -p . /var/lib/docker/volumes/my_named_volume/_data/

Le troisième étage : les volumes anonymes

Sous le capot L'instruction VOLUME des images

Les images officielles wordpress et mysql contiennent chacune une instruction VOLUME dans leur Dockerfile (/var/www/html et /var/lib/mysql). Elle dit à Docker : « si personne ne monte quelque chose ici au lancement, crée un volume anonyme ». La persistance se joue donc sur trois étages :

🏗️ 1. Ce que l'image déclare
L'instruction VOLUME, écrite au build du Dockerfile, prend effet au lancement du conteneur.
🧩 2. Ce que la partition monte
Votre répertoire lié recouvre la déclaration de l'image : aucun volume anonyme n'est créé dans le laboratoire.
🧹 3. Ce que le nettoyage cible
down --volumes enlève les volumes nommés et anonymes du projet, jamais les répertoires liés.
Superposez les trois étages et vous prédisez sans vous tromper ce qui survit à quoi.

Défi : refaites la preuve avec les volumes nommés

Défi facultatif La preuve de survie, version volumes
1

Basculez la partition. Remplacez les répertoires liés ./wordpress et ./database par les volumes nommés de la partition alternative.

2

Refaites la preuve. Article témoin, puis down et up -d : l'article survit. Puis down --volumes et up -d : l'installation vous accueille comme au premier jour.

3

Expliquez dans vos mots la nuance stop / down / down --volumes : une question d'examen toute trouvée.

Repartez d'une copie de votre partition : la remise du laboratoire officiel se fait, elle, avec les répertoires liés.