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 :
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
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
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