Comment utiliser la commande docker volume create pour gérer les données

DockerDockerBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce laboratoire (lab), vous apprendrez à gérer efficacement la persistance des données dans Docker en utilisant la commande docker volume create. Nous explorerons le processus fondamental de création de volumes de base, qui sont la méthode préférée pour stocker les données des conteneurs en raison de leur gestion par Docker et de leur facilité de sauvegarde/migration par rapport aux montages liés (bind mounts).

En nous appuyant sur les bases, vous allez ensuite approfondir la création de volumes avec des pilotes (drivers) et des options spécifiques pour adapter leur comportement. En outre, le laboratoire vous guidera à travers la création de volumes locaux avec des options de montage personnalisées et démontrera comment exploiter NFS pour créer des volumes locaux, offrant ainsi de la flexibilité pour diverses situations de stockage de données.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker(("Docker")) -.-> docker/VolumeOperationsGroup(["Volume Operations"]) docker/ContainerOperationsGroup -.-> docker/exec("Execute Command in Container") docker/ContainerOperationsGroup -.-> docker/inspect("Inspect Container") docker/ContainerOperationsGroup -.-> docker/create("Create Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") docker/VolumeOperationsGroup -.-> docker/volume("Manage Volumes") subgraph Lab Skills docker/exec -.-> lab-555258{{"Comment utiliser la commande docker volume create pour gérer les données"}} docker/inspect -.-> lab-555258{{"Comment utiliser la commande docker volume create pour gérer les données"}} docker/create -.-> lab-555258{{"Comment utiliser la commande docker volume create pour gérer les données"}} docker/pull -.-> lab-555258{{"Comment utiliser la commande docker volume create pour gérer les données"}} docker/volume -.-> lab-555258{{"Comment utiliser la commande docker volume create pour gérer les données"}} end

Créer un volume de base

Dans cette étape, vous apprendrez à créer un volume Docker de base. Les volumes sont la méthode préférée pour conserver les données générées et utilisées par les conteneurs Docker. Bien que les montages liés (bind mounts) soient également une option, les volumes sont gérés par Docker et sont généralement plus faciles à sauvegarder ou à migrer.

Tout d'abord, créons un simple volume en utilisant la commande docker volume create. Nous nommerons ce volume myvolume.

docker volume create myvolume

Vous devriez voir le nom du volume affiché dans la console, confirmant sa création.

Maintenant, examinons le volume pour voir ses détails en utilisant la commande docker volume inspect. Cela nous montrera des informations telles que le pilote (driver) du volume, le point de montage (mountpoint) et la portée (scope).

docker volume inspect myvolume

La sortie fournira des détails sur le volume. Faites attention au champ Mountpoint, qui indique l'emplacement sur la machine hôte où les données du volume sont stockées. Docker gère cet emplacement, et vous devriez généralement éviter de modifier directement les fichiers dans ce répertoire.

Ensuite, nous allons exécuter un conteneur et attacher ce volume à celui-ci. Nous utiliserons l'image ubuntu et monterons myvolume sur le répertoire /app à l'intérieur du conteneur. Nous allons également exécuter une simple commande pour écrire des données dans un fichier au sein du volume monté.

Tout d'abord, téléchargez l'image ubuntu si vous ne l'avez pas localement.

docker pull ubuntu

Maintenant, exécutez le conteneur et écrivez des données dans le volume.

docker run -d --name mycontainer -v myvolume:/app ubuntu bash -c "echo 'Hello from the volume!' > /app/greeting.txt && tail -f /dev/null"

Décortiquons cette commande :

  • docker run -d : Exécute le conteneur en mode détaché (en arrière - plan).
  • --name mycontainer : Assigne le nom mycontainer au conteneur.
  • -v myvolume:/app : Monte le volume nommé myvolume sur le répertoire /app à l'intérieur du conteneur.
  • ubuntu : Spécifie l'image à utiliser.
  • bash -c "echo 'Hello from the volume!' > /app/greeting.txt && tail -f /dev/null" : Exécute une commande bash à l'intérieur du conteneur. Elle écrit la chaîne "Hello from the volume!" dans un fichier nommé greeting.txt dans le répertoire /app (qui est le volume monté), puis exécute tail -f /dev/null pour maintenir le conteneur en cours d'exécution.

Pour vérifier que les données ont été écrites dans le volume, nous pouvons exécuter une commande à l'intérieur du conteneur en cours d'exécution pour lire le fichier.

docker exec mycontainer cat /app/greeting.txt

Vous devriez voir la sortie "Hello from the volume!", confirmant que les données ont été écrites avec succès dans le volume depuis l'intérieur du conteneur.

Enfin, arrêtons et supprimons le conteneur. Le volume persistera même après la suppression du conteneur.

docker stop mycontainer
docker rm mycontainer

Créer un volume avec un pilote (driver) et des options spécifiques

Dans cette étape, vous apprendrez à créer un volume Docker en utilisant un pilote (driver) spécifique et en fournissant des options spécifiques au pilote. Bien que le pilote local par défaut soit suffisant pour de nombreux cas d'utilisation, Docker prend en charge divers pilotes de volumes pour différents systèmes de stockage, tels que le stockage réseau ou le stockage cloud.

Nous continuerons à utiliser le pilote local, mais nous allons montrer comment le spécifier explicitement et passer des options. Le pilote local prend en charge des options telles que type, device et o pour spécifier le type de système de fichiers, le périphérique à monter et les options de montage, respectivement.

Créons un volume nommé myvolume2 en utilisant le pilote local et en spécifiant quelques options. Pour cet exemple, nous utiliserons le type de système de fichiers tmpfs, qui stocke les données en mémoire. Cela est utile pour les données temporaires qui n'ont pas besoin de persister après un redémarrage de l'hôte.

docker volume create --driver local --opt type=tmpfs --opt device=tmpfs --opt o=size=100m myvolume2

Décortiquons cette commande :

  • docker volume create : La commande pour créer un volume.
  • --driver local : Spécifie explicitement le pilote de volume local.
  • --opt type=tmpfs : Passe l'option type=tmpfs au pilote, en spécifiant le type de système de fichiers.
  • --opt device=tmpfs : Passe l'option device=tmpfs au pilote, en spécifiant le périphérique. Pour tmpfs, le périphérique est également tmpfs.
  • --opt o=size=100m : Passe l'option o=size=100m au pilote. L'option o est utilisée pour passer des options de montage. Dans ce cas, nous définissons la taille maximale du volume tmpfs à 100 mégaoctets.
  • myvolume2 : Le nom du volume à créer.

Vous devriez voir le nom du volume affiché dans la console une fois la création réussie.

Maintenant, examinons le volume pour voir le pilote et les options qui ont été appliquées.

docker volume inspect myvolume2

Dans la sortie, vous devriez voir le champ Driver défini sur local et le champ Options listant les options que nous avons fournies (type=tmpfs, device=tmpfs, o=size=100m). Le Mountpoint indiquera où ce volume tmpfs est monté sur l'hôte.

Ensuite, nous allons exécuter un conteneur et attacher ce nouveau volume à celui-ci. Nous utiliserons à nouveau l'image ubuntu et monterons myvolume2 sur le répertoire /data à l'intérieur du conteneur.

Tout d'abord, téléchargez l'image ubuntu si vous ne l'avez pas localement (bien que vous l'ayez probablement téléchargée à l'étape précédente).

docker pull ubuntu

Maintenant, exécutez le conteneur et attachez le volume.

docker run -d --name mycontainer2 -v myvolume2:/data ubuntu tail -f /dev/null

Cette commande exécute un conteneur ubuntu nommé mycontainer2 en mode détaché et monte myvolume2 sur /data. tail -f /dev/null maintient le conteneur en cours d'exécution.

Étant donné que myvolume2 est un volume tmpfs, toutes les données écrites dans /data à l'intérieur du conteneur seront stockées en mémoire et ne persisteront pas après l'arrêt et la suppression du conteneur, ou si l'hôte est redémarré.

Arrêtons et supprimons le conteneur.

docker stop mycontainer2
docker rm mycontainer2

Le volume myvolume2 existe toujours, mais son contenu (si des données ont été écrites) est perdu car c'est un volume tmpfs.

Créer un volume local avec des options de montage

Dans cette étape, vous apprendrez à créer un volume Docker local et à spécifier des options de montage. Les options de montage vous permettent de contrôler la manière dont le système de fichiers est monté, par exemple en définissant les autorisations, en activant des fonctionnalités spécifiques ou en optimisant les performances.

Nous allons créer un volume local nommé myvolume3 et utiliser l'option o pour spécifier les options de montage. Pour cet exemple, nous allons définir les options uid et gid pour garantir que les fichiers créés dans le volume par un conteneur sont détenus par un utilisateur et un groupe spécifiques sur l'hôte. Cela peut être utile pour gérer les autorisations lors du partage de données entre les conteneurs et l'hôte.

Tout d'abord, créons un répertoire sur l'hôte que nous utiliserons comme source pour notre volume. Ce n'est pas strictement nécessaire pour un volume local standard, mais cela permet d'illustrer comment les options de montage peuvent affecter le système de fichiers sous - jacent.

mkdir -p ~/project/myvolumedata

Maintenant, créons le volume myvolume3 en utilisant le pilote local et spécifions l'option o avec uid et gid. Nous utiliserons l'identifiant d'utilisateur et de groupe de l'utilisateur labex actuel. Vous pouvez trouver votre identifiant d'utilisateur et de groupe en utilisant les commandes id -u et id -g.

USER_ID=$(id -u)
GROUP_ID=$(id -g)
docker volume create --driver local --opt type=none --opt device=/home/labex/project/myvolumedata --opt o=bind,uid=$USER_ID,gid=$GROUP_ID myvolume3

Décortiquons cette commande :

  • docker volume create : La commande pour créer un volume.
  • --driver local : Spécifie le pilote de volume local.
  • --opt type=none : Spécifie qu'aucun type de système de fichiers ne devrait être automatiquement créé. Nous effectuons un montage lié (bind mount) sur un répertoire existant.
  • --opt device=/home/labex/project/myvolumedata : Spécifie le périphérique à monter, qui est le répertoire que nous avons créé sur l'hôte. Notez l'utilisation du chemin absolu /home/labex/project/myvolumedata.
  • --opt o=bind,uid=$USER_ID,gid=$GROUP_ID : Passe les options de montage.
    • bind : Spécifie un montage lié (bind mount), reliant le volume au périphérique spécifié (notre répertoire hôte).
    • uid=$USER_ID : Définit l'identifiant d'utilisateur pour les fichiers créés dans le volume sur l'identifiant de l'utilisateur actuel.
    • gid=$GROUP_ID : Définit l'identifiant de groupe pour les fichiers créés dans le volume sur l'identifiant de groupe de l'utilisateur actuel.
  • myvolume3 : Le nom du volume.

Vous devriez voir le nom du volume affiché dans la console.

Maintenant, examinons le volume pour voir les options.

docker volume inspect myvolume3

Dans la sortie, vous devriez voir le Driver indiqué comme local, les Options incluant type=none, device=/home/labex/project/myvolumedata et o=bind,uid=...,gid=... (avec vos identifiants d'utilisateur et de groupe). Le Mountpoint sera le même que le chemin du device.

Ensuite, nous allons exécuter un conteneur et attacher ce volume. Nous utiliserons l'image ubuntu et monterons myvolume3 sur /app à l'intérieur du conteneur. Ensuite, nous créerons un fichier à l'intérieur du répertoire /app du conteneur et vérifierons son appartenance sur l'hôte.

Tout d'abord, téléchargez l'image ubuntu si nécessaire.

docker pull ubuntu

Maintenant, exécutez le conteneur et créez un fichier dans le volume monté.

docker run --rm -v myvolume3:/app ubuntu bash -c "echo 'Testing ownership' > /app/testfile.txt && ls -l /app/testfile.txt"

Cette commande exécute un conteneur ubuntu, monte myvolume3 sur /app, écrit "Testing ownership" dans /app/testfile.txt, puis liste les détails du fichier à l'intérieur du conteneur. Vous devriez voir le fichier listé avec une appartenance root à l'intérieur du conteneur, car les conteneurs s'exécutent généralement en tant que root par défaut.

Maintenant, vérifions l'appartenance du fichier sur la machine hôte dans le répertoire ~/project/myvolumedata.

ls -l ~/project/myvolumedata/testfile.txt

Vous devriez voir que le fichier testfile.txt est détenu par l'utilisateur et le groupe labex sur l'hôte, grâce aux options de montage uid et gid que nous avons spécifiées lors de la création du volume.

Enfin, nettoyons le répertoire créé.

rm -rf ~/project/myvolumedata

Créer un volume local en utilisant NFS

Dans cette étape, vous apprendrez à créer un volume Docker local qui utilise un partage NFS comme stockage backend. Cela permet aux conteneurs de stocker des données sur un dispositif de stockage connecté au réseau, rendant les données accessibles depuis plusieurs hôtes et offrant une solution de stockage centralisée.

Pour utiliser NFS avec le pilote de volume local, vous devez spécifier l'adresse du serveur NFS et le chemin du répertoire partagé à l'aide de l'option device, et le type de système de fichiers comme nfs à l'aide de l'option type. Vous devez également fournir les options de montage appropriées à l'aide de l'option o.

Pour cet environnement de laboratoire, nous allons simuler un partage NFS en utilisant l'adresse de bouclage 127.0.0.1 et un répertoire sur l'hôte. Remarque : Dans un scénario réel, vous remplaceriez 127.0.0.1 par l'adresse IP réelle ou le nom d'hôte de votre serveur NFS et /path/to/nfs/share par le chemin exporté sur le serveur NFS.

Tout d'abord, créons un répertoire sur l'hôte qui servira de partage NFS simulé.

mkdir -p ~/project/nfs_share

Maintenant, créons le volume myvolume4 en utilisant le pilote local avec les options NFS.

sudo docker volume create --driver local --opt type=nfs --opt device=127.0.0.1:/home/labex/project/nfs_share --opt o=addr=127.0.0.1,rw myvolume4

Décortiquons cette commande :

  • sudo docker volume create : Nous utilisons sudo car la création de volumes NFS nécessite souvent des privilèges root pour effectuer l'opération de montage sur l'hôte.
  • --driver local : Spécifie le pilote de volume local.
  • --opt type=nfs : Spécifie le type de système de fichiers comme NFS.
  • --opt device=127.0.0.1:/home/labex/project/nfs_share : Spécifie le périphérique NFS. Il s'agit du format nfs_server_address:/exported_path. Nous utilisons l'adresse de bouclage et le répertoire que nous venons de créer. Notez l'utilisation du chemin absolu /home/labex/project/nfs_share.
  • --opt o=addr=127.0.0.1,rw : Passe les options de montage au client NFS.
    • addr=127.0.0.1 : Spécifie l'adresse du serveur NFS.
    • rw : Monte le partage avec des autorisations de lecture-écriture.
  • myvolume4 : Le nom du volume.

Vous devriez voir le nom du volume affiché dans la console une fois la création réussie.

Maintenant, examinons le volume pour voir les détails spécifiques à NFS.

docker volume inspect myvolume4

Dans la sortie, vous devriez voir le Driver indiqué comme local, et les Options devraient inclure type=nfs, device=127.0.0.1:/home/labex/project/nfs_share et o=addr=127.0.0.1,rw. Le Mountpoint indiquera où ce volume NFS est monté sur l'hôte par Docker.

Ensuite, nous allons exécuter un conteneur et attacher ce volume NFS. Nous utiliserons l'image ubuntu et monterons myvolume4 sur /data à l'intérieur du conteneur. Ensuite, nous créerons un fichier à l'intérieur du répertoire /data du conteneur et vérifierons son existence sur le partage NFS simulé de l'hôte.

Tout d'abord, téléchargez l'image ubuntu si nécessaire.

docker pull ubuntu

Maintenant, exécutez le conteneur et créez un fichier dans le volume monté.

docker run --rm -v myvolume4:/data ubuntu bash -c "echo 'Data on NFS' > /data/nfs_test.txt && ls -l /data/nfs_test.txt"

Cette commande exécute un conteneur ubuntu, monte myvolume4 sur /data, écrit "Data on NFS" dans /data/nfs_test.txt et liste les détails du fichier à l'intérieur du conteneur.

Maintenant, vérifions la présence du fichier sur la machine hôte dans le répertoire ~/project/nfs_share.

ls -l ~/project/nfs_share/nfs_test.txt

Vous devriez voir le fichier nfs_test.txt listé, confirmant que les données écrites à l'intérieur du conteneur à l'aide du volume NFS sont présentes sur le partage NFS simulé de l'hôte.

Enfin, nettoyons le répertoire créé.

rm -rf ~/project/nfs_share

Résumé

Dans ce laboratoire, vous avez appris à créer et à gérer des volumes Docker en utilisant la commande docker volume create. Vous avez commencé par créer un volume de base et à examiner ses détails, en comprenant comment Docker gère l'emplacement de stockage des données. Vous avez ensuite pratiqué l'attachement de ce volume à un conteneur et l'écriture de données dans celui - ci, démontrant ainsi comment les volumes offrent un stockage persistant pour les données des conteneurs. Le laboratoire a également abordé la création de volumes avec des pilotes et des options spécifiques, y compris des volumes locaux avec des options de montage et des volumes locaux utilisant NFS, mettant en évidence la flexibilité et les différents cas d'utilisation des volumes Docker pour diverses besoins de stockage.