Gestion des volumes Docker

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

Cette section abordera l'utilisation de magasins de données persistants dans un environnement Docker appelé volumes. Vous allez découvrir les caractéristiques des magasins de données persistants, telles que la différence entre les volumes internes et externes et la manière et le moment où les utiliser.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/VolumeOperationsGroup(["Volume Operations"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/ls("List Containers") docker/ContainerOperationsGroup -.-> docker/exec("Execute Command in Container") docker/ContainerOperationsGroup -.-> docker/inspect("Inspect Container") docker/ContainerOperationsGroup -.-> docker/create("Create Container") docker/VolumeOperationsGroup -.-> docker/cp("Copy Data Between Host and Container") docker/VolumeOperationsGroup -.-> docker/volume("Manage Volumes") subgraph Lab Skills docker/run -.-> lab-7769{{"Gestion des volumes Docker"}} docker/ls -.-> lab-7769{{"Gestion des volumes Docker"}} docker/exec -.-> lab-7769{{"Gestion des volumes Docker"}} docker/inspect -.-> lab-7769{{"Gestion des volumes Docker"}} docker/create -.-> lab-7769{{"Gestion des volumes Docker"}} docker/cp -.-> lab-7769{{"Gestion des volumes Docker"}} docker/volume -.-> lab-7769{{"Gestion des volumes Docker"}} end

Gestion des volumes de données

Les volumes de données sont une opération standard pour la persistance des données dans Docker, et dans cette section, je vais vous guider au travers des opérations standard sur les volumes de données en pratique.

Objectif

Votre objectif est de créer un volume de données appelé my-vol à l'aide de la commande docker, et d'ajouter un fichier appelé test.txt à son volume.

Exemple de résultat

Voici un exemple de ce que vous devriez être capable d'accomplir à la fin de ce défi :

  1. Créer un volume de données nommé my-vol.
labex:~/ $ docker volume ls
DRIVER    VOLUME NAME
local     jenkins-data
local     minikube
local     my-vol
  1. Obtenir le Point de montage à partir des détails du volume de données.
[
  {
    "CreatedAt": "2024-01-20T17:37:33+08:00",
    "Driver": "local",
    "Labels": {},
    "Mountpoint": "/var/lib/docker/volumes/my-vol/_data",
    "Name": "my-vol",
    "Options": {},
    "Scope": "local"
  }
]
  1. Accéder au Point de montage et créer le fichier test.txt.
root@iZj6cj604ytlr2cacq6vi2Z:/var/lib/docker/volumes/my-vol/_data## pwd
/var/lib/docker/volumes/my-vol/_data
root@iZj6cj604ytlr2cacq6vi2Z:/var/lib/docker/volumes/my-vol/_data## ls
test.txt

Exigences

Pour terminer ce défi, vous devrez :

  • Savoir créer un volume de données à l'aide de la commande docker.
  • Créer un fichier en utilisant l'utilisateur root.
  • Passer à l'utilisateur root en utilisant sudo su, définir le mot de passe de l'utilisateur root en utilisant sudo passwd root.
✨ Vérifier la solution et pratiquer

Création de conteneurs avec des volumes de données

Dans cette section, nous allons créer des conteneurs à l'aide de volumes de données Docker, puis effectuer des copies de fichiers.

Objectif

Votre objectif est de créer un volume Docker nommé nginx-vol, puis de démarrer un conteneur nommé nginx et de le monter, et enfin de créer un fichier index.html localement et de le copier dans le conteneur nginx.

Exemple de résultat

Voici un exemple de ce que vous devriez être capable d'accomplir à la fin de ce défi :

  1. Créer un volume de données appelé nginx-vol.
labex:~/ $ docker volume ls
DRIVER    VOLUME NAME
local     jenkins-data
local     minikube
local     my-vol
local     nginx-vol
  1. Créer un conteneur nommé nginx basé sur l'image nginx qui montra son répertoire /usr/share/nginx/html sur le volume de données nginx-vol.
labex:~/ $ docker ps | grep nginx
c39296aaf39e   nginx     "/docker-entrypoint.…"   35 seconds ago   Up 31 seconds   80/tcp    nginx
  1. Créer un fichier index.html local avec le contenu hello world dans le répertoire /tmp.
labex:/tmp/ $ pwd
/tmp
labex:/tmp/ $ cat index.html
hello world
  1. Copier le fichier index.html local dans le conteneur nginx.
labex:/tmp/ $ docker exec nginx cat /usr/share/nginx/html/index.html
hello world

Exigences

Pour terminer ce défi, vous devrez :

  • Savoir créer un volume de données à l'aide de la commande docker.
  • Savoir démarrer un conteneur.
  • Savoir copier des fichiers locaux dans des conteneurs.
✨ Vérifier la solution et pratiquer

Création de conteneurs avec un chemin d'hôte

Dans de nombreux cas, nous ne sommes pas habitués à utiliser des volumes de données, mais plutôt à utiliser directement le répertoire natif pour la persistance des données. Dans cette section, nous allons utiliser le répertoire natif pour créer des conteneurs.

Objectif

Votre objectif est de créer un conteneur qui utilise un chemin d'hôte, puis de copier les fichiers locaux dans le conteneur et de vérifier que les fichiers dans ce conteneur sont les mêmes que ceux dans le chemin d'hôte.

Exemple de résultat

Voici un exemple de ce que vous devriez être capable d'accomplir à la fin de ce défi :

  1. Créer un répertoire nginx dans le répertoire /tmp.
labex:/tmp/ $ ls | grep nginx
nginx
  1. Démarrer le conteneur nginx-host basé sur l'image nginx qui monte le répertoire /tmp/nginx sur le répertoire /usr/share/nginx/html dans le conteneur.
labex:/tmp/ $ docker ps | grep nginx-host
6fc2d40e12df   nginx     "/docker-entrypoint.…"   44 seconds ago   Up 43 seconds   80/tcp    nginx-host
  1. Vérifier les détails de montage spécifiques avec la commande docker inspect.
"Mounts": [
   {
         "Type": "bind",
         "Source": "/tmp/nginx",
         "Destination": "/usr/share/nginx/html",
         "Mode": "",
         "RW": true,
         "Propagation": "rprivate"
   }
],
  1. Créer un fichier local appelé nginx.txt avec le contenu hello nginx.
labex:/tmp/ $ pwd
/tmp
labex:/tmp/ $ cat nginx.txt
hello nginx
  1. Copier le fichier nginx.txt dans le répertoire /usr/share/nginx/html du conteneur nginx-host.
labex:nginx/ $ docker exec nginx-host cat /usr/share/nginx/html/nginx.txt
hello nginx
  1. Vérifier le répertoire /tmp/nginx sur la machine locale pour voir s'il y a un fichier nginx.txt.
labex:nginx/ $ pwd
/tmp/nginx
labex:nginx/ $ cat nginx.txt
hello nginx

Exigences

Pour terminer ce défi, vous devrez :

  • Connaître le chemin chemin d'hôte que vous voulez utiliser.
  • Savoir utiliser certaines commandes pertinentes à l'intérieur du conteneur pour vérifier si le répertoire ou le fichier d'hôte peut être consulté.
  • Savoir démarrer le conteneur en utilisant le chemin d'hôte.
  • Être familier avec les commandes Linux de base, telles que cd, mkdir, touch, etc.
✨ Vérifier la solution et pratiquer

Partage de données entre conteneurs

Dans un environnement conteneurisé, il est parfois nécessaire de partager des données d'un conteneur à l'autre. Dans ce cas, diverses techniques peuvent être utilisées pour réaliser le partage de données, et ce défi explorerait la manière de partager des données entre des conteneurs.

Objectif

Votre objectif est de mettre en œuvre le partage de données entre deux conteneurs. Plus précisément, vous utiliserez un chemin d'hôte pour démarrer le conteneur A, puis démarrerez un autre conteneur B et monterez le volume de stockage de A, permettant finalement le partage de données entre les deux conteneurs.

Exemple de résultat

Voici un exemple de ce que vous devriez être capable d'accomplir à la fin de ce défi :

  1. Créer un répertoire /tmp/share sur l'hôte local.
labex:/tmp/ $ ls -ld /tmp/share
drwxr-xr-x 2 labex labex 4096 Jan 20 18:20 /tmp/share
  1. Créer un conteneur nommé nginx-share basé sur l'image nginx et monter le répertoire local /tmp/share sur le répertoire /usr/share/nginx/html dans le conteneur.
labex:/tmp/ $ docker ps | grep nginx-share
216d02d94f39   nginx     "/docker-entrypoint.…"   55 seconds ago   Up 55 seconds   80/tcp    nginx-share
  1. Créer un conteneur nommé busybox-share basé sur l'image busybox et le monter à partir du conteneur nginx-share.
labex:/tmp/ $ docker ps | grep busy
30bf04aee681   busybox   "sh"                     43 seconds ago   Up 42 seconds             busybox-share
  1. Créer un fichier local nommé share.txt avec le contenu hello share.
labex:/tmp/ $ pwd
/tmp
labex:/tmp/ $ cat share.txt
hello share
  1. Copier le fichier share.txt dans le conteneur nginx-share.
labex:/tmp/ $ docker exec nginx-share cat /usr/share/nginx/html/share.txt
hello share
  1. Accéder au conteneur busybox-share pour voir si le fichier share.txt existe.
labex:/tmp/ $ docker exec busybox-share cat /usr/share/nginx/html/share.txt
hello share

Exigences

Pour terminer ce défi, vous devrez :

  • Être familier avec les opérations et les concepts de base des conteneurs Docker.
  • Utiliser les outils de ligne de commande Docker pour créer, exécuter et arrêter des conteneurs.
  • Comprendre le concept et l'utilisation des volumes de données.
  • Comprendre comment monter un volume de données dans un conteneur.
  • Être familier avec les commandes Linux de base, telles que cd, mkdir, touch, etc.
✨ Vérifier la solution et pratiquer

Sommaire

Félicitations pour avoir terminé ce défi. Si vous maîtrisez maintenant l'utilisation des volumes de stockage dans les conteneurs, allez-y.