Volumes de docker

Volumes de docker
Lorsque vous exécutez un conteneur Docker, aucune des données dans ce conteneur n'est enregistrée. Ce que je veux dire, c'est, disons que vous avez commencé un conteneur docker. Ensuite, vous avez créé des fichiers et des dossiers dans un répertoire (disons /données) là. Lorsque vous arrêtez le conteneur, tous les fichiers et dossiers du /données Le répertoire sera supprimé. Lorsque vous recommencez le conteneur, vous devrez recréer tous les fichiers et dossiers si vous en avez à nouveau besoin. Aucune des données ne persistera.

Vous pouvez utiliser des volumes Docker pour enregistrer les modifications d'un certain répertoire de vos conteneurs Docker. En mots simples, vous pouvez persister des données de vos conteneurs Docker à l'aide de volumes Docker.

Vous pouvez dire à Docker quel répertoire de votre conteneur Docker pour persister les changements dans votre Dockerfile Lorsque vous créez des images Docker personnalisées en utilisant Dockerfile.

Dans cet article, je vais vous montrer comment utiliser les volumes Docker dans Dockerfile Et comment gérer ces volumes. Commençons.

Utilisation de volumes dans Dockerfile:

Dans cette section, je vais créer une image Docker personnalisée du serveur Apache 2 à partir de l'image Docker httpd: 2.4 et utiliser des volumes Docker pour persister les données d'Apache Webroot.

Tout d'abord, créez un nouveau répertoire (disons www3) pour votre image Docker personnalisée (disons www: v1) et y accéder:

$ mkdir www3 && cd www3

Créez maintenant un Dockerfile avec la commande suivante:

$ touch dockerfile

Maintenant, modifiez le Dockerfile déposer avec nano ou vigueur éditeur de texte.

Nano:

$ nano dockerfile

Vigueur:

$ vim dockerfile

Ajoutez maintenant les lignes suivantes et enregistrez le fichier:

Ici, De httpd: 2.4 signifie, l'image de base de cette image Docker personnalisée est httpd: 2.4

Workdir / usr / local / apache2 / htdocs signifie que lorsque vous iogrant dans le shell (interface de ligne de commande) de conteneurs fabriqués à partir de cette image personnalisée, vous serez dans le / usr / local / apache2 / htdocs Répertoire du conteneur par défaut.

VOLUME / usr / local / apache2 / htdocs signifie, créer un nouveau volume pour chacun des conteneurs créés à partir de cette image personnalisée et persister tous les fichiers du / usr / local / apache2 / htdocs Répertoire de ce conteneur à ce nouveau volume.

Maintenant que vous avez votre Dockerfile Prêt, il est temps de construire notre image Docker personnalisée (je l'appellerai www: v1).

Pour construire votre image Docker personnalisée www: v1 en utilisant le Dockerfile, Exécutez la commande suivante:

$ docker build -t www: v1

L'image Docker personnalisée www: v1 est créé avec succès.

Listing des images Docker disponibles localement:

Vous pouvez répertorier toutes les images Docker disponibles localement avec la commande suivante:

$ Liste d'images Docker

Comme vous pouvez le voir, le www: v1 L'image a une taille d'environ 178 Mo et elle a été créée il y a environ une minute.

Travailler avec les volumes et les conteneurs Docker:

Nous avons créé une image docker compatible de volume www: v1 Dans la section précédente de cet article ci-dessus.

Pour créer un conteneur Docker (disons app1) à partir de l'image Docker personnalisée www: v1, Exécutez la commande suivante:

$ docker run -d -it --name = app1 www: v1

Le conteneur Docker app1 devrait être créé.

Maintenant, exécutez la commande suivante pour afficher la coquille du app1 récipient:

$ docker exec -it app1 / bin / bash

Comme vous pouvez le voir, je suis dans le / usr / local / apache2 / htdocs répertoire par défaut.

Créons un indice.html Fichier ici avec la commande suivante:

$ echo "

Hello World (app1)

"> Index.html

Maintenant sortir du app1 récipient.

$ exit

Maintenant, exécutez la commande suivante pour trouver l'adresse IP du app1 récipient:

$ docker inspecter app1 | adresse grep

Comme vous pouvez le voir, l'adresse IP est 172.17.0.2

Maintenant à partir de n'importe quel navigateur Web, si vous visitez la page à 172.17.0.2, vous devriez voir le indice.html page que vous venez de créer.

Maintenant, testons si la persistance fonctionne ou non.

Arrêtez d'abord le app1 conteneur avec la commande suivante:

$ docker conteneur stop app1

Puis recommencez le conteneur avec la commande suivante:

$ docker conteneur start app1

Recherchez maintenant l'adresse IP du conteneur:

$ docker inspectApp1 | adresse grep

Comme vous pouvez le voir, le indice.html La page est inchangée lorsque j'y accédez à partir de mon navigateur Web. Cela signifie que le volume de Docker est persistant les données du app1 récipient.

Gérer les volumes de Docker:

Vous pouvez répertorier tous les volumes Docker sur l'ordinateur avec la commande suivante:

$ Docker Volume List

Comme vous pouvez le voir, j'ai 2 volumes Docker sur mon ordinateur. La longue chaîne hexadécimale telle que marquée dans la capture d'écran ci-dessous, est le volume généré automatique pour le app1 récipient.

Lorsque vous créez un conteneur à partir d'une image Docker qui utilise des volumes, un nouveau volume comme celui-ci sera généré pour chaque conteneur que vous créez.

Par exemple, j'ai créé un autre conteneur app2 du www: v1 image que j'ai construite à partir du Dockerfile qui utilise le volume.

Comme vous pouvez le voir, un nouveau volume est généré.

Ces deux volumes contiennent des données différentes. Les données persistent pour un seul conteneur pour lequel il a été généré. Par exemple, le volume généré pour le app1 Le conteneur persiste les données uniquement pour le app1 récipient. Il en va de même pour le app2 récipient. Le volume généré pour le app1 Le conteneur ne stockera pas les données de la app2 récipient.

Vous pouvez supprimer les volumes si vous n'en avez plus besoin. Pour que cela fonctionne, vous devez arrêter et supprimer le conteneur auquel le volume est attaché. Si vous essayez de supprimer un volume attaché à un conteneur, vous obtiendrez le message d'erreur suivant.

Disons que vous souhaitez supprimer le volume pour app2 conteneur, exécutez d'abord les commandes suivantes pour arrêter et supprimer le conteneur:

$ docker conteneur stop app2
$ docker conteneur rm app2<

Maintenant, supprimez le volume qui a été attaché à app2 conteneur avec la commande suivante:

$ Docker Volume RM 962B2D970BCD96DE860B348130A84AA86C0AAA55378B3DCE35225659679FF808

Le volume doit être supprimé.

Ajout de fichiers aux volumes à l'aide de DockerFile:

Vous pouvez utiliser le COPIE commande dans votre Dockerfile Pour copier des fichiers de votre ordinateur hôte à vos volumes Docker. De cette façon, tout conteneur que vous créez à partir de votre image Docker sur personnalité aura ces fichiers par défaut. Vous pouvez en vérifier plus sur COPIE dans le Dockerfile Documentation.

C'est donc essentiellement ainsi que vous travaillez avec les volumes Docker en utilisant Dockerfile. Merci d'avoir lu cet article.