Files
TP_Docker/TP2/COMMANDS.md
2025-04-02 11:57:28 +02:00

5.2 KiB
Executable File

TP2 - Volumes et Bind-mounts

Sommaire

Introduction

Ce TP explore les concepts de volumes et de bind-mounts dans Docker. Les volumes permettent de persister les données entre les conteneurs, tandis que les bind-mounts permettent de partager des fichiers entre l'hôte et les conteneurs.

Exercice n°1 : Docker volumes

Récupération de l'image Alpine

Pour commencer, nous récupérons l'image Alpine 3.17 :

sudo docker pull alpine:3.17

Résultat (déjà présent) :

3.17: Pulling from library/alpine
Digest: sha256:8fc3dacfb6d69da8d44e42390de777e48577085db99aa4e4af35f483eb08b989
Status: Image is up to date for alpine:3.17
docker.io/library/alpine:3.17

Création d'un volume

Pour créer un volume Docker nommé volume_serveur_web :

docker volume create volume_serveur_web

Résultat :

volume_serveur_web

Ajout d'un fichier HTML dans le volume

Pour déposer un fichier dans ce volume, nous devons d'abord créer un conteneur temporaire qui monte ce volume :

docker run --rm -v volume_serveur_web:/data alpine sh -c "echo '<html><body><h1>Moncef STITI</h1></body></html>' > /data/index.html"

Cette commande effectue les actions suivantes :

  • Lance un conteneur Alpine temporaire
  • Monte le volume "volume_serveur_web" à l'emplacement /data dans le conteneur
  • Crée un fichier index.html avec mon nom et prénom au format HTML
  • Supprime automatiquement le conteneur après exécution (grâce à l'option --rm)

Vérification du contenu

Pour vérifier que tout a fonctionné correctement, on peut inspecter le volume :

docker volume inspect volume_serveur_web

Résultat : La commande renvoie des informations détaillées sur le volume au format JSON.

Pour afficher le contenu du fichier index.html créé dans le volume :

docker run --rm -v volume_serveur_web:/data alpine cat /data/index.html

Résultat :

<html><body><h1>Moncef STITI</h1></body></html>

Démarrer un conteneur

  • Démarrer un conteneur en mode détaché nommé tp21
docker run -d --name tp21 httpd:alpine3.17

Résultat : 05b6e9bb200d33ef4ca42349ba161eb594b1e569c87b36544206986a5f9843c9

  • Démarrer un conteneur en mode détaché en montant le volume précédemment créé nommé tp22
docker run -d --name tp22 -v volume_serveur_web:/usr/local/apache2/htdocs httpd:alpine3.17

Résultat : 2de4800ec7b48c5b5d5b564368c5db6ec021c9c65840deb08727c6bef51b6684

  • Démarrer un conteneur en mode détaché en montant le volume précédemment créé et en exposant le port 80 nommé tp23
docker run -d --name tp23 -v volume_serveur_web:/usr/local/apache2/htdocs -p 80:80 httpd:alpine3.17

Résultat : 0bc2aa9103867c34c92596767c11f8993b6627b8ce019987ab4c63a6f29c7c16

Pour accéder au localhost : (localhost:80)[localhost:80]

Exercice complémentaire

  1. Création d'un deuxième volume backup_web
docker volume create backup_web
  1. Copie du contenu du premier volume vers le nouveau volume Pour copier le contenu du premier volume vers le deuxième, nous devons utiliser un conteneur temporaire qui monte les deux volumes simultanément :
docker run --rm -v volume_serveur_web:/source -v backup_web:/destination alpine sh -c "cp -r /source/* /destination/"
  1. Vérification que la copie a bien fonctionné
docker run --rm -v backup_web:/data alpine cat /data/index.html

Ce qui devrait renvoyer :

<html><body><h1>Votre Prénom Votre Nom</h1></body></html>
  1. Démarrage d'un conteneur tp24 qui monte les deux volumes simultanément
docker run -d --name tp24 \
  -v volume_serveur_web:/usr/local/apache2/htdocs \
  -v backup_web:/backup \
  -p 8080:80 \
  httpd:alpine3.17

Pour vérifier que les deux volumes sont bien montés dans le conteneur :

docker exec tp24 ls -la /usr/local/apache2/htdocs
docker exec tp24 ls -la /backup

Exercice 2 - Docker bind mounts

  • Démarrer un conteneur en mode détaché nommé tp25 qui monte le dossier web local dans /usr/local/apache2/htdocs
docker run -d --name tp25 -v $(pwd)/web:/usr/local/apache2/htdocs httpd:alpine3.17
  • Démarrer un conteneur en mode détaché nommé tp26 qui monte le dossier web et expose le port 8080
docker run -d --name tp26 -p 8080:80 -v $(pwd)/web:/usr/local/apache2/htdocs httpd:alpine3.17
  • Démarrer un conteneur en mode détaché nommé tp27 qui monte uniquement le fichier index.html (et non tout le dossier)
docker run -d --name tp27 -v $(pwd)/web/index.html:/usr/local/apache2/htdocs/index.html httpd:alpine3.17

Exercice complémentaire

  1. Oui les changements se font directement

  2. Vérifiez que le nouveau fichier est visible dans le conteneur :

docker exec tp25 cat /usr/local/apache2/htdocs/about.html