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 :

  1. 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.
  2. 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.
  3. 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