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 :
- 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
- 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"
}
]
- Accès au
Mountpointet création du fichiertest.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
rootviasudo suet configurer son mot de passe avecsudo 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 :
- 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
- Créer un conteneur nommé
nginxbasé sur l'image nginx, en montant son répertoire/usr/share/nginx/htmlsur le volumenginx-vol.
labex:~/ $ docker ps | grep nginx
c39296aaf39e nginx "/docker-entrypoint.…" 35 seconds ago Up 31 seconds 80/tcp nginx
- Préparer le fichier
/home/labex/project/index.html.
labex:/tmp/ $ pwd
/tmp
labex:/tmp/ $ cat index.html
hello world
- Copier le fichier
/home/labex/project/index.htmldans le conteneurnginxet 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 :
- Créer un répertoire
nginxdans le dossier/tmp.
labex:/tmp/ $ ls | grep nginx
nginx
- Démarrer le conteneur
nginx-host(image nginx) en montant le répertoire/tmp/nginxde l'hôte sur le répertoire/usr/share/nginx/htmldu conteneur.
labex:/tmp/ $ docker ps | grep nginx-host
6fc2d40e12df nginx "/docker-entrypoint.…" 44 seconds ago Up 43 seconds 80/tcp nginx-host
- 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"
}
],
- Préparer le fichier
/home/labex/project/nginx.txt.
labex:/tmp/ $ pwd
/tmp
labex:/tmp/ $ cat nginx.txt
hello nginx
- Copier le fichier vers le répertoire
/usr/share/nginx/htmldu conteneurnginx-host.
labex:nginx/ $ docker exec nginx-host cat /usr/share/nginx/html/nginx.txt
hello nginx
- Vérifier sur la machine locale que le fichier
nginx.txtest 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 :
- Créer un répertoire
/tmp/sharesur l'hôte local.
labex:/tmp/ $ ls -ld /tmp/share
drwxr-xr-x 2 labex labex 4096 Jan 20 18:20 /tmp/share
- Créer un conteneur nommé
nginx-share(image nginx) et monter le répertoire local/tmp/sharesur/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
- Créer un conteneur nommé
busybox-share(image busybox) en utilisant les volumes du conteneurnginx-share.
labex:/tmp/ $ docker ps | grep busy
30bf04aee681 busybox "sh" 43 seconds ago Up 42 seconds busybox-share
- Préparer le fichier
/home/labex/project/share.txt.
labex:/tmp/ $ pwd
/tmp
labex:/tmp/ $ cat share.txt
hello share
- Copier le fichier
share.txtdans le conteneurnginx-share.
labex:/tmp/ $ docker exec nginx-share cat /usr/share/nginx/html/share.txt
hello share
- Vérifier dans le conteneur
busybox-shareque le fichiershare.txtest 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 !



