Volumes
Les volumes sont le mécanisme préféré pour persister les données générées par et utilisées par les conteneurs Docker. Alors que les montages par liaison dépendent de la structure des répertoires et du système d'exploitation de la machine hôte, les volumes sont entièrement gérés par Docker. Les volumes présentent plusieurs avantages par rapport aux montages par liaison :
- Les volumes sont plus faciles à sauvegarder ou à migrer que les montages par liaison.
- Vous pouvez gérer les volumes à l'aide des commandes de l'interface en ligne de commande Docker ou de l'API Docker.
- Les volumes fonctionnent à la fois sur les conteneurs Linux et Windows.
- Les volumes peuvent être partagés plus sûrement entre plusieurs conteneurs.
- Les pilotes de volumes vous permettent de stocker des volumes sur des hôtes distants ou des fournisseurs de cloud, de chiffrer le contenu des volumes ou d'ajouter d'autres fonctionnalités.
- De nouveaux volumes peuvent avoir leur contenu pré-rempli par un conteneur.
- Les volumes sur Docker Desktop ont des performances bien supérieures aux montages par liaison depuis des hôtes Mac et Windows.
De plus, les volumes sont souvent un meilleur choix que la persistance des données dans la couche inscriptible d'un conteneur, car un volume n'augmente pas la taille des conteneurs qui l'utilisent, et le contenu du volume existe en dehors du cycle de vie d'un conteneur donné.
Note : L'utilisation de volumes de données est similaire au montage d'un répertoire ou fichier sous Linux. Les fichiers dans le répertoire spécifié comme point de montage dans l'image seront copiés dans le volume de données (seulement si le volume de données est vide).
Créer un volume de données
$ docker volume create my-vol
Afficher tous les volumes de données
$ docker volume ls
DRIVER VOLUME NAME
local my-vol
Utilisez la commande suivante sur l'hôte pour afficher des informations sur un volume de données
spécifique
$ docker volume inspect my-vol
[
{
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/my-vol/_data",
"Name": "my-vol",
"Options": {},
"Scope": "local"
}
]
Démarrer un conteneur avec un volume de données monté
Lors de l'utilisation de la commande docker run, utilisez l'option --mount pour monter le volume de données dans le conteneur. Plusieurs volumes de données peuvent être montés dans un seul docker run.
Nous créons un conteneur nommé web et chargeons un volume de données dans le répertoire /usr/share/nginx/html
du conteneur.
$ docker run -d -P \
--name web \
# -v my-vol:/usr/share/nginx/html \
--mount source=my-vol,target=/usr/share/nginx/html \
nginx:alpine
Afficher des informations spécifiques sur le volume
Utilisez la commande suivante sur l'hôte pour afficher des informations sur le conteneur web
.
$ docker inspect web
Les informations sur le volume de données se trouvent sous la clé "Mounts"
"Mounts": [
{
"Type": "volume",
"Name": "my-vol",
"Source": "/var/lib/docker/volumes/my-vol/_data",
"Destination": "/usr/share/nginx/html",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
],
Supprimer des volumes
$ docker volume rm my-vol
Les volumes sont conçus pour persister les données, indépendamment du cycle de vie du conteneur. Docker ne supprime pas automatiquement les volumes de données lorsque vous supprimez un conteneur, et il n'a pas de mécanisme de collecte des ordures pour les volumes de données qui ne sont plus référencés par aucun conteneur. Si vous souhaitez supprimer un volume avec un conteneur, utilisez la commande docker rm -v
lors de la suppression du conteneur.
Pour supprimer tous les volumes inutilisés et libérer de l'espace :
$ docker volume prune
Bons cas d'utilisation pour les volumes
Les volumes sont la manière préférée de persister les données dans les conteneurs et services Docker. Quelques cas d'utilisation pour les volumes comprennent :
-
Partager des données entre plusieurs conteneurs en cours d'exécution. Si vous ne le créez pas explicitement, un volume est créé la première fois qu'il est monté dans un conteneur. Lorsque ce conteneur s'arrête ou est supprimé, le volume existe toujours. Plusieurs conteneurs peuvent monter le même volume simultanément, soit en lecture-écriture soit en lecture seule. Les volumes ne sont supprimés que lorsque vous les supprimez explicitement.
-
Lorsque l'hôte Docker n'est pas garanti d'avoir une structure de répertoire ou de fichier donnée. Les volumes vous aident à découpler la configuration de l'hôte Docker de l'exécution du conteneur.
-
Lorsque vous souhaitez stocker les données de votre conteneur sur un hôte distant ou un fournisseur de cloud, plutôt que localement.
-
Lorsque vous avez besoin de sauvegarder, restaurer ou migrer des données d'un hôte Docker à un autre, les volumes sont un meilleur choix. Vous pouvez arrêter les conteneurs utilisant le volume, puis sauvegarder le répertoire du volume (tel que
/var/lib/docker/volumes/<nom-du-volume>
). -
Lorsque votre application nécessite une E/S haute performance sur Docker Desktop. Les volumes sont stockés dans la VM Linux plutôt que sur l'hôte, ce qui signifie que les lectures et écritures ont une latence beaucoup plus faible et un débit plus élevé.
-
Lorsque votre application nécessite un comportement de système de fichiers complètement natif sur Docker Desktop. Par exemple, un moteur de base de données nécessite un contrôle précis du vidage de disque pour garantir la durabilité des transactions. Les volumes sont stockés dans la VM Linux et peuvent fournir ces garanties, tandis que les montages par liaison sont remontés vers macOS ou Windows, où les systèmes de fichiers se comportent légèrement différemment.