Volume managé

Vidéo sur Youtube Le play Youtube

Avant d'utiliser cette fonctionnalité, il faut créer un volume qui sera ensuite lié à un dossier du conteneur.

Créer un volume

La commande suivante permet de créer un volume managé.

docker volume create mon_volume

Le nom du volume est mon_volume.

Bien entendu, si vous en avez besoin, vous pouvez créer plusieurs volumes.

Mais dans ce cas, comment faire la liste des volumes pour s'y retrouver ?

Liste des volumes managés

Pour connaître la liste des volumes managés dans Docker vous pouvez utiliser la commande qui suit.

docker volume ls

On nous affiche un tableau en retour.

DRIVER    VOLUME NAME
local     mon_volume

Nous voyons le nom du volume précédemment créé, mon_volume. Si nous en avions eu d'autres, ils seraient également présents dans la liste.

Comment supprimer un volume managé ?

Supprimer un volume managé

Pour supprimer un volume managé (dans notre cas mon_volume), il faut taper la commande :

docker volume rm mon_volume

Vérifions que la suppression ait bien fonctionné.

docker volume ls
DRIVER    VOLUME NAME

Parfait 😃, tout à bien fonctionné 👍.

Lier un volume à un dossier du conteneur

Après avoir supprimé un volume, on va en créer un autre pour continuer à pratiquer. Cette fois-ci, nous allons l'appeler super_volume et on va vérifier s'il apparaît bien dans la liste des volumes managés.

docker volume create super_volume
docker volume ls
DRIVER    VOLUME NAME
local     super_volume

Très bien 😄 ! Le super_volume a été créé.

Maintenant nous allons le connecter au dossier du conteneur.

Voici la commande qui permet d'atteindre cet objectif.

docker run --rm -it -v super_volume:/bin ubuntu:18.04

Nous allons expliquer cette commande.

Comme vous le savez, nous avons créé un conteneur ubuntu:18.04 qui se détruira automatiquement lorsque nous le quitterons.

Et nous avons relié le volume managé au dossier /bin du conteneur.

Le dossier /bin est rempli de fichiers alors que le volume super_volume ne contient rien.

Qu'est-ce qui va donc se passer 🤔?

Dans un volume managé, si celui-ci est vide, c'est le dossier du conteneur qui prend le dessus. Par conséquent, super_volume contiendra les fichiers de /bin.

À présent nous allons quitter le conteneur qui va être détruit pour en créer un autre. Dans celui-ci, nous allons relier le volume super_volume à un autre dossier /test qui n'existe pas et qui sera de ce fait crée automatiquement.

docker run --rm -it -v super_volume:/test ubuntu:18.04

Dans ce conteneur, si nous listons le contenu du dossier /test, des fichiers apparaissent.

👆 En effet, puisque super_volume (qui ne contenait rien) a été relié à /bin, il a récupéré tout le contenu. Mais lorsque nous supprimons le conteneur, les fichiers de super_volume ne sont pas supprimés (il n'est alors plus vide).

Si on le relie à un autre dossier, dans notre cas /test, celui-ci contiendra les fichiers présents dans super_volume.

⚠️ Attention, si votre dossier dans le conteneur est rempli de plusieurs fichiers, ils seront écrasés par le contenu du volume managé (si celui-ci n'est pas vide).

Informations volume managé

Pour connaître les informations du volume (date de création, ...), vous pouvez taper la commande suivante.

docker volume inspect super_volume

Voici le résultat de la commande.

[
    {
        "CreatedAt": "2021-08-18T09:34:16Z",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/super_volume/_data",
        "Name": "super_volume",
        "Options": {},
        "Scope": "local"
    }
]

Qui prend le dessus ?

Pour un débutant, il n'est pas évident de s'y retrouver. Pour aider à une bonne compréhension des choses, nous allons utiliser un schéma.

En effet, comme l'a dit Napoléon en son temps, un bon croquis vaut mieux qu'un long discours.

Comprendre qui prend le dessus entre le volume et le dossier du conteneur