Que sont les volumes Docker et comment les utilisez-vous ?

0
200

Par défaut, les conteneurs Docker sont entièrement sans état. Les données stockées sur le conteneur sont éphémères et seront effacées lors de la fermeture du conteneur. Ce n'est évidemment pas idéal pour de nombreuses applications, c'est pourquoi Docker fournit quelques façons de gérer l'état.

Que sont les volumes ?

Le moyen le plus simple de rendre les données Docker persistantes consiste à effectuer des montages de liaison, qui lient littéralement un emplacement sur le disque de l'hôte à un emplacement sur le disque du conteneur. Ceux-ci sont simples à créer et à utiliser, mais sont un peu compliqués car vous devez configurer les répertoires et les gérer vous-même.

Les volumes sont comme des disques durs virtuels gérés par Docker. Docker gère leur stockage sur disque (généralement dans /var/lib/docker/volumes/) et leur donne un nom unique facilement mémorisable plutôt qu'un chemin de répertoire. Il est facile de les créer et de les supprimer à l'aide de la CLI Docker.

Ceux-ci ont quelques autres avantages en plus d'être gérés par Docker. Ils fonctionnent à la fois sur les conteneurs Linux et Windows, ils peuvent être partagés de manière plus sûre entre plusieurs conteneurs, et les pilotes de volume permettent aux fournisseurs de cloud de fournir un hébergement à distance pour les données sous-jacentes. Dans l'ensemble, les volumes sont plus faciles à utiliser que les montages liés et sont recommandés par Docker pour la gestion de l'état.

Bien sûr, vous devez déterminer si vous avez vraiment besoin que les données Docker soient stockées sur le serveur. Pour de nombreuses applications, l'utilisation d'un magasin de données distant externe comme Amazon S3 ou d'une base de données externe suffit pour stocker les données qu'elles utilisent sans les lier au serveur frontal.

Comment les utilisez-vous ?

Vous pouvez créer un nouveau volume à partir de la ligne de commande avec la commande suivante :

docker volume create nginx-config Advertisement

Et puis , lorsque vous allez exécuter votre conteneur Docker, associez-le à la cible dans le conteneur avec l'indicateur –mount :

docker run -d –name devtest –mount source=nginx-config,target=/etc/nginx nginx:latest

Si vous exécutez docker inspect <name>, vous verrez le volume répertoriés dans la section Montages.

Si vous utilisez Docker Compose, la configuration est également simple. Ajoutez simplement une entrée de volume pour chaque service de conteneur dont vous disposez, puis mappez un nom de volume à un emplacement dans l'invité. Vous devrez également fournir une liste de volumes dans une clé de volumes de niveau supérieur pour Compose à provisionner.

version : “3.0” services : web : image : nginx:latest ports : – “80:80” volumes : – nginx-config:/etc/nginx/volumes : nginx-config :

Cela créera automatiquement le volume pour cette composition. Si vous souhaitez utiliser un volume prédéfini provenant de l'extérieur de Compose, spécifiez external : true dans la configuration du volume :

volumes : cms-content : external : true

Si vous souhaitez le faire à la place faites simplement un montage lié et ne vous souciez pas des volumes, entrez simplement un nom de chemin à la place du nom de volume et renoncez à définir les noms de volume.

version : ” 3.0″ services : Web : image : nginx:derniers ports : – « 80:80 » volumes : – /docker/nginx-config/:/etc/nginx/Publicité

Vous pouvez lire Docker&# 8217;s documentation complète sur l'utilisation des volumes avec Compose si votre cas d'utilisation nécessite quelque chose de plus spécifique que cela.

Transfert de volumes Docker

Les volumes Docker ne sont que des dossiers créés automatiquement et stockés dans /var/lib/docker/volumes/, chaque volume étant stocké sous ./volumename/_data/. Pour sauvegarder et restaurer, vous pouvez simplement sauvegarder ces volumes directement.

Si vous préférez utiliser la CLI Docker, ils ne fournissent malheureusement pas un moyen simple de le faire. Pour sauvegarder les volumes d'un conteneur, vous aurez besoin du nom du conteneur, ainsi que de l'emplacement de montage dans lequel les données sont stockées.

La façon de le faire est un peu un hack—vous devrez exécuter une commande dans un nouveau conteneur Docker, lier le montage du répertoire shell actuel, monter le volume sur ce conteneur, puis tar le répertoire dans une sauvegarde. Vous obtiendrez un backup.tar du volume :

docker run –rm –volumes-from containername -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar/mountlocation

Ensuite, de la même manière, vous pouvez extraire l'archive dans le répertoire cible :

docker run –rm –volumes-from containername -v $(pwd):/backup ubuntu bash -c “cd /mountlocation && tar xvf /backup/backup.tar –strip 1”

Ceci est quand même mieux que d'avoir à connaître l'emplacement de l'hôte, vous pouvez donc automatiser cela si vous le souhaitez.