====== Gestion des volumes sous Docker ====== ===== Introduction ===== L'objectif des volumes est de pouvoir utiliser des données persistantes dans les conteneurs (sauf pour le tmpfs). Il faut distinguer 3 types de volume sous Docker : - Type **Volume** : Les données seront initialisées avec les celles de l'image s'il n'y a pas déjà de données dans le volume. - Type **Bind** : Permet de monter un dossier de l'hôte dans un dossier du conteneur. Les données du dossier ne seront pas initialisées par celle de l'image. - Type **tmpfs** : Permet d'utiliser la mémoire RAM comme espace de stockage. Utile pour charger des données rapidement. ===== Type Volume ===== Lister les volumes : docker volume ls Créer un volume nommé ''MyVolume'' : docker volume create MyVolume Ci-dessous pour démarrer un conteneur en utilisant le volume ''MyVolume'' qui sera monté dans le dossier ''/mnt/vol_docker'' du conteneur : docker run -d --name MyContainer -v MyVolume:/mnt/vol_docker ubuntu ou docker run -d --name MyContainer --mount type=bind,source=MyVolume,destination=/mnt/vol_docker ubuntu Pour identifier où sont stockées les données de ''MyVolume'' sur la machine hôte : docker volume inspect MyVolume Exemple de résultat attendu : [ { "CreatedAt": "2023-11-17T11:06:32Z", "Driver": "local", "Labels": null, "Mountpoint": "/var/lib/docker/volumes/MyVolume/_data", "Name": "MyVolume", "Options": null, "Scope": "local" } ] :!: Les données des volumes sont stockées dans le répertoire ''/var/lib/docker/volumes/'' de la machine hôte. Les données de ''MyVolume'' sont stockées dans le répertoire ''/var/lib/docker/volumes/MyVolume/_data''. Pour identifier les conteneurs qui utilisent le volume ''MyVolume'' : docker ps -a --filter volume=MyVolume Exemple de résultat attendu : CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b3f7ec23a377 httpd "httpd-foreground" 29 minutes ago Up 29 minutes 80/tcp MyContainer Pour supprimer le volume ''MyVolume'' : docker volume rm MyVolume :!: Remarque : Les conteneurs créés en utilisant le volume, doivent être arrêté et supprimé avant : docker stop MyContainer docker rm MyContainer docker volume rm MyVolume ===== Type Bind ===== On peut aussi démarrer un conteneur en montant un dossier du système hôte dans un répertoire du conteneur. Par exemple, ci-dessous on monte le dossier ''/mnt'' de l'hôte dans le dossier ''/home'' du conteneur. docker run -d --name MyC2 --mount type=bind,source=/mnt,destination=/home httpd Pour inspecté le montage du conteneur : docker inspect -f '{{ .Mounts }}' MyC2 ===== Type TmpFs ===== Pour démarrer une instance avec le dossier ''/home'' du conteneur en mémoire RAM de l'hôte : docker run -d --name MyC3 --mount type=tmpfs,destination=/home httpd