Gestion des volumes Docker

DockerBeginner
Pratiquer maintenant

Introduction

Cette section est consacrée à l'utilisation des volumes, qui constituent la solution de stockage de données persistantes au sein de l'écosystème Docker. Vous apprendrez à identifier les spécificités de ces espaces de stockage, à distinguer les volumes internes des volumes externes, et à maîtriser leurs cas d'usage pratiques.

Gestion des volumes de données

L'utilisation des volumes de données est l'opération standard pour assurer la persistance des données dans Docker. Dans cette section, nous allons mettre en pratique les manipulations fondamentales sur ces volumes.

Objectif

Votre mission consiste à créer un volume de données nommé my-vol à l'aide de la commande docker, puis à y ajouter un fichier intitulé test.txt.

Exemple de résultat

Voici un aperçu de ce que vous devriez obtenir à l'issue de ce challenge :

  1. Création d'un volume de données nommé my-vol.
labex:~/ $ docker volume ls
DRIVER    VOLUME NAME
local     jenkins-data
local     minikube
local     my-vol
  1. Identification du point de montage (Mountpoint) via les détails du volume.
[
  {
    "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ès au Mountpoint et création du 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

Prérequis

Pour réussir ce challenge, vous devrez :

  • Savoir créer un volume de données avec la commande docker.
  • Être capable de créer un fichier en tant qu'utilisateur root.
  • Savoir basculer vers l'utilisateur root via sudo su et configurer son mot de passe avec sudo passwd root.

Création de conteneurs avec volume de données

Dans cette section, nous allons instancier des conteneurs utilisant des volumes Docker, puis procéder à la copie de fichiers.

Objectif

Vous devez créer un volume Docker nommé nginx-vol, puis démarrer un conteneur nommé nginx en y montant ce volume. Enfin, vous devrez copier le fichier /home/labex/project/index.html vers ce conteneur nginx.

Exemple de résultat

Voici ce que vous devez accomplir pour valider cette étape :

  1. Créer un volume de données nommé 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, en montant son répertoire /usr/share/nginx/html sur le volume nginx-vol.
labex:~/ $ docker ps | grep nginx
c39296aaf39e   nginx     "/docker-entrypoint.…"   35 seconds ago   Up 31 seconds   80/tcp    nginx
  1. Préparer le fichier /home/labex/project/index.html.
labex:/tmp/ $ pwd
/tmp
labex:/tmp/ $ cat index.html
hello world
  1. Copier le fichier /home/labex/project/index.html dans le conteneur nginx et vérifier sa présence.
labex:/tmp/ $ docker exec nginx cat /usr/share/nginx/html/index.html
hello world

Prérequis

Pour réussir ce challenge, vous devrez :

  • Maîtriser la création de volumes via la ligne de commande docker.
  • Savoir démarrer un conteneur avec des options de montage.
  • Connaître la procédure pour copier des fichiers locaux vers un conteneur.

Création de conteneurs avec montage de type Host Path

Dans de nombreux scénarios, on préfère utiliser directement un répertoire du système hôte plutôt qu'un volume géré par Docker pour la persistance des données. Cette section traite de l'utilisation des répertoires natifs lors de la création de conteneurs.

Objectif

Votre but est de créer un conteneur utilisant un montage de type Host Path (chemin hôte), d'y copier le fichier /home/labex/project/nginx.txt et de vérifier que les fichiers à l'intérieur du conteneur correspondent exactement à ceux présents sur l'hôte.

Exemple de résultat

Voici les étapes attendues pour ce challenge :

  1. Créer un répertoire nginx dans le dossier /tmp.
labex:/tmp/ $ ls | grep nginx
nginx
  1. Démarrer le conteneur nginx-host (image nginx) en montant le répertoire /tmp/nginx de l'hôte sur le répertoire /usr/share/nginx/html du 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 du montage avec la commande docker inspect.
"Mounts": [
   {
         "Type": "bind",
         "Source": "/tmp/nginx",
         "Destination": "/usr/share/nginx/html",
         "Mode": "",
         "RW": true,
         "Propagation": "rprivate"
   }
],
  1. Préparer le fichier /home/labex/project/nginx.txt.
labex:/tmp/ $ pwd
/tmp
labex:/tmp/ $ cat nginx.txt
hello nginx
  1. Copier le fichier vers 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 sur la machine locale que le fichier nginx.txt est bien présent dans /tmp/nginx.
labex:nginx/ $ pwd
/tmp/nginx
labex:nginx/ $ cat nginx.txt
hello nginx

Prérequis

Pour réussir ce challenge, vous devrez :

  • Identifier le chemin hôte (Host Path) que vous souhaitez utiliser.
  • Savoir utiliser les commandes internes au conteneur pour vérifier l'accès aux fichiers.
  • Maîtriser le démarrage d'un conteneur avec un montage de type "bind mount".
  • Être familier avec les commandes Linux de base (cd, mkdir, touch, etc.).

Partage de données entre conteneurs

Dans un environnement conteneurisé, il est parfois indispensable de partager des données entre plusieurs conteneurs. Diverses techniques permettent d'y parvenir ; ce challenge explore l'une des méthodes pour synchroniser des données entre deux conteneurs.

Objectif

Votre mission est de mettre en œuvre le partage de données entre deux conteneurs. Plus précisément, vous utiliserez un Host Path pour démarrer un conteneur A, puis vous démarrerez un conteneur B qui montera les volumes du conteneur A, permettant ainsi un accès partagé aux données.

Exemple de résultat

Voici ce que vous devriez obtenir :

  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 (image nginx) et monter le répertoire local /tmp/share sur /usr/share/nginx/html.
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 (image busybox) en utilisant les volumes du conteneur nginx-share.
labex:/tmp/ $ docker ps | grep busy
30bf04aee681   busybox   "sh"                     43 seconds ago   Up 42 seconds             busybox-share
  1. Préparer le fichier /home/labex/project/share.txt.
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. Vérifier dans le conteneur busybox-share que le fichier share.txt est bien accessible.
labex:/tmp/ $ docker exec busybox-share cat /usr/share/nginx/html/share.txt
hello share

Prérequis

Pour réussir ce challenge, vous devrez :

  • Être familier avec les opérations de base et les concepts des conteneurs Docker.
  • Utiliser les outils en ligne de commande Docker pour créer, exécuter et arrêter des conteneurs.
  • Comprendre le concept et l'usage des volumes de données.
  • Savoir comment monter le volume d'un autre conteneur.
  • Maîtriser les commandes Linux élémentaires (cd, mkdir, touch, etc.).

Résumé

Félicitations pour avoir terminé ce challenge ! Si vous maîtrisez désormais l'utilisation des volumes de stockage dans les conteneurs, vous avez franchi une étape cruciale dans la gestion d'environnements Docker. Continuez sur cette lancée !

✨ Vérifier la solution et pratiquer✨ Vérifier la solution et pratiquer✨ Vérifier la solution et pratiquer✨ Vérifier la solution et pratiquer