Ceci est une ancienne révision du document !
Table des matières
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
