Les volumes Docker sont le moyen privilégié de gérer les données persistantes créées et utilisées par les conteneurs Docker. Voyons comment cela fonctionne en couvrant la création de volumes Docker sur Windows. Vous apprendrez également comment les gérer !
Cet article de blog est accompagné d’une vidéo réalisée par Matt McElreath, contributeur de TechSnips. N’hésitez pas à regarder ou, si vous préférez du texte, continuez à lire !
Stockage de données persistantes
Si vous souhaitez stocker des données persistantes pour les conteneurs, vous avez quelques options. Tout d’abord, je vais vous montrer comment utiliser un montage de liaison. Je suis actuellement dans un dossier appelé data sur mon C:\. Si je liste le contenu de ce dossier, vous pouvez voir que j’ai cinq fichiers texte.

Si je veux rendre ce dossier disponible à un conteneur, je peux le monter au démarrage du conteneur.
Allons-y et exécutons un conteneur en utilisant docker run
. Je vais exécuter ce conteneur en mode interactif, puis spécifier -V
. Ici, je vais mettre le chemin vers mon dossier de données, suivi de deux points, puis je spécifierai le chemin à l’intérieur du conteneur où je souhaite que ce dossier soit monté.
Pour cela, je vais spécifier le dossier C:\shareddata. Ensuite, je vais spécifier l’image du serveur Windows core image, et enfin, je vais préciser que je veux exécuter PowerShell une fois à l’intérieur du conteneur.
Maintenant que je suis à l’intérieur du nouveau conteneur, si je liste le contenu de C:\, vous pouvez voir que j’ai un dossier shareddata.

Allons dans ce dossier et listons le contenu. Voici mes cinq fichiers de test situés sur mon hôte de conteneur.

I can also create files in this folder, which will be available to other containers or my container host. Let’s go ahead and run a new item to create a file called containertest.

On peut voir ci-dessus que le nouveau fichier a été créé depuis l’intérieur du conteneur. Maintenant, je vais quitter ce conteneur, ce qui l’arrêtera en exécutant exit
.
Si je lance docker ps
, vous pouvez voir qu’il n’y a actuellement aucun conteneur en cours d’exécution.

Énumération des données dans les volumes Docker
Maintenant, listons à nouveau le contenu du dossier de données depuis mon hôte de conteneur.

On peut voir le nouveau fichier qui a été créé depuis l’intérieur du conteneur appelé containertest. Les montages par liaison ont quelques fonctionnalités limitées, cependant, les volumes sont la manière préférée d’accomplir ce que nous essayons de faire. Pour commencer avec les volumes, nous pouvons exécuter la même commande pour démarrer un conteneur, mais cette fois avec quelques petites différences. Là où nous avons spécifié le volume, au lieu d’utiliser le chemin sur le système de fichiers de l’hôte du conteneur, je vais utiliser le mot hostdata comme nom d’un volume que je veux créer et utiliser.
Depuis l’intérieur du nouveau conteneur, si je liste le contenu de C:\, vous pouvez voir à nouveau que j’ai un dossier appelé shareddata.

Si je liste le contenu de ce dossier, il est actuellement vide car nous avons créé un volume vide. Maintenant, exécutons Ctrl-P-Q, ce qui nous permettra de sortir du conteneur en cours d’exécution, mais de le laisser fonctionner en arrière-plan.
À partir de l’hôte du conteneur, exécutez docker volume ls
. Cela affichera les volumes actuels sur cet hôte de conteneur. J’ai un volume appelé hostdata, qui a été créé lorsque je l’ai spécifié dans la commande docker run
.

Si j’exécute docker ps
, nous pouvons voir notre conteneur en cours d’exécution.

Arrêtez ce conteneur en utilisant docker stop
. Maintenant, nous n’avons plus de conteneurs en cours d’exécution.

Supprimez les conteneurs arrêtés en exécutant docker rm
. Si je liste à nouveau les volumes, vous pouvez voir que le volume hostdata est toujours disponible et peut être monté sur de nouveaux conteneurs.

Création de volumes Docker
Une autre façon de créer un volume est d’utiliser la commande docker volume create
. Si vous ne spécifiez pas de nom, Docker lui donnera un nom qui est une longue liste de caractères aléatoires. Sinon, vous pouvez spécifier un nom ici. Je vais appeler ce volume logdata. Maintenant, nous pouvons le voir dans la liste lorsque nous listons à nouveau les volumes.

Vous allez maintenant le monter sur un nouveau conteneur. Utilisez à nouveau docker run
et pour le volume, spécifiez le volume que vous venez de créer et montez-le sur c:\logdata.
Depuis l’intérieur du conteneur, allez dans le dossier logdata et créez quelques fichiers. Pour l’instant, il n’y a aucun fichier dans ce répertoire, alors allez-y et en créez quelques-uns.
Maintenant, j’ai deux fichiers journaux dans ce répertoire.

Exécutez à nouveau Ctrl-P-Q pour quitter ce conteneur tout en le laissant en cours d’exécution. Pendant que ce conteneur est en cours d’exécution, démarrez un nouveau conteneur avec le même volume monté.
Si nous exécutons une liste sur le dossier logdata dans le nouveau conteneur, nous pouvons voir les deux fichiers journaux partagés.

Maintenant, quittez ce conteneur. Vous devriez toujours avoir un conteneur en cours d’exécution et deux conteneurs arrêtés.

Maintenant, arrêtez tous les conteneurs en cours d’exécution, puis exécutez docker rm
pour supprimer tous les conteneurs arrêtés.

Listez à nouveau les volumes. Le volume logdata est toujours disponible pour être monté dans les futurs conteneurs.

Si vous exécutez docker volume
, vous obtiendrez une aide d’utilisation pour la commande.

Inspection des volumes Docker
Nous avons déjà examiné create
, passons donc à inspect
. Si j’exécute docker volume inspect
contre le volume logdata, il retournera les propriétés de ce volume, y compris le point de montage qui est le chemin physique du volume sur l’hôte du conteneur.

Ouvrons ce dossier à l’aide de Invoke-Item
et jetons un coup d’œil. Sous le dossier logdata, il y a un dossier appelé data. Si nous l’ouvrons, nous pouvons voir les fichiers qui ont été créés à partir du conteneur précédent.

Suppression des volumes Docker
Pour supprimer un volume, vous pouvez exécuter docker volume rm
, suivi du nom du volume que vous souhaitez supprimer.
Maintenant, si je liste les volumes, logdata n’est plus là.

Enfin, nous pouvons utiliser prune
pour supprimer tous les volumes locaux inutilisés. Cela supprimera tous les volumes qui ne sont pas montés sur un conteneur en cours d’exécution ou arrêté.

Vous devez faire attention avec cette commande, car il y a un avertissement et une invite pour vous assurer que vous êtes sûr de vouloir le faire. Si je saisis Y
et appuie sur Entrée, il me montrera quels volumes ont été supprimés.
Et si je liste à nouveau mes volumes, vous pouvez voir qu’ils ont tous été supprimés.

Résumé
Dans cet article de blog, vous devriez avoir une bonne vue d’ensemble de la gestion des volumes Docker sous Windows. Docker est une excellente plateforme de conteneur. Avec son support pour Windows et vos nouvelles compétences en gestion des volumes Docker, vous serez imbattable !