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
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.
Les trois types de montages
Dans le monde de l'exécution (docker run,
Compose), quand un conteneur tourne, on peut lui attacher trois types de
montages :
/var/lib/docker/volumes/, entièrement gérées par
Docker. Le mécanisme que la documentation
officielle recommande../wordpress et
./database.--mount type=... force d'ailleurs à
nommer le type explicitement.
Les volumes nommés dans la partition
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.
./.
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
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 :
VOLUME,
écrite au build du Dockerfile, prend effet au lancement du
conteneur.down --volumes enlève
les volumes nommés et anonymes du projet, jamais les répertoires
liés.
Défi : refaites la preuve avec les volumes nommés
Basculez la partition. Remplacez
les répertoires liés ./wordpress et
./database par les volumes nommés de la partition
alternative.
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.
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.