Docker - 5.2 Les volumes Docker : garder les données d'un conteneur
Un conteneur peut être supprimé à tout moment, mais certaines données doivent survivre à cette suppression. C'est le rôle des volumes Docker. Cette leçon montre comment Docker crée un volume automatiquement, comment le repérer, puis comment le nommer pour le retrouver facilement.
Les volumes créés automatiquement par l'image
Certaines images, comme MySQL, déclarent elles-mêmes un volume. Quand vous lancez un conteneur à partir de cette image, Docker crée un nouveau volume et le rattache au répertoire où la base de données stocke ses fichiers.
Ce volume ne disparaît pas avec le conteneur. Il doit être supprimé à la main, car il contient souvent des données plus importantes que le conteneur lui-même.
Pour retrouver les volumes présents sur votre machine, on utilise la commande de liste. Pour en voir le détail, on utilise la commande d'inspection suivie de l'identifiant du volume.
docker volume ls
docker volume inspect <identifiant-du-volume>
Supprimer un conteneur sans perdre les données
Arrêter et supprimer un conteneur ne touche pas à ses volumes. Les données restent donc disponibles pour un prochain conteneur.
Avec des volumes anonymes, l'identifiant aléatoire ne dit pas à quoi sert le volume. Il devient difficile de savoir quel volume appartient à quelle base de données, surtout quand plusieurs conteneurs ont été lancés.
docker container stop <nom-du-conteneur>
docker container rm <nom-du-conteneur>
Nommer le volume pour le retrouver
L'option -v permet de déclarer un volume nommé. On écrit d'abord le nom du volume, puis deux-points, puis le chemin dans le conteneur. Docker réutilise alors le même volume à chaque lancement avec ce nom.
Pour MySQL, le chemin à droite est celui où la base stocke ses données, soit /var/lib/mysql. L'image demande aussi une variable d'environnement avant de démarrer.
La commande docker container inspect permet ensuite de vérifier le volume utilisé par un conteneur. Le nom est plus lisible, et l'emplacement source est plus facile à identifier.
docker run --name <nom-du-conteneur> -v <nom-du-volume>:/var/lib/mysql -e <variable>=<valeur> mysql
En résumé
Un volume conserve les données au-delà de la vie d'un conteneur. Il faut le supprimer manuellement, car la suppression d'un conteneur ne suffit pas. Un volume nommé reste beaucoup plus simple à identifier qu'un volume anonyme. Sur Windows et macOS, les données sont stockées dans la machine virtuelle Linux utilisée par Docker.
Points clés
- Une image peut déclarer un volume pour conserver ses données.
- Supprimer un conteneur ne supprime pas son volume.
- Les volumes doivent être supprimés manuellement.
- L'option -v relie un volume nommé à un chemin du conteneur.
- Un volume nommé reste identifiable, contrairement à un volume anonyme.
Questions fréquentes
Un volume est-il supprimé avec le conteneur ?
Non. Le volume reste sur la machine après la suppression du conteneur. Il faut le supprimer séparément.
Pourquoi un volume existe-t-il déjà pour MySQL ?
L'image MySQL déclare elle-même un volume. Docker en crée un automatiquement au premier lancement du conteneur.
Où sont stockées les données sous Windows ?
Elles sont dans la machine virtuelle Linux utilisée par Docker. Vous ne pouvez pas les ouvrir directement depuis Windows.