164 lines
5.2 KiB
Markdown
164 lines
5.2 KiB
Markdown
![]() |
# TP2 - Volumes et Bind-mounts
|
||
|
|
||
|
## Sommaire
|
||
|
- [Introduction](#introduction)
|
||
|
- [Exercice n°1 : Docker volumes](#exercice-n1--docker-volumes)
|
||
|
- [Récupération de l'image Alpine](#récupération-de-limage-alpine)
|
||
|
- [Création d'un volume](#création-dun-volume)
|
||
|
- [Ajout d'un fichier HTML dans le volume](#ajout-dun-fichier-html-dans-le-volume)
|
||
|
- [Vérification du contenu](#vérification-du-contenu)
|
||
|
- [Utilisation du volume avec un serveur web](#utilisation-du-volume-avec-un-serveur-web)
|
||
|
|
||
|
## 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 :
|
||
|
|
||
|
```bash
|
||
|
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` :
|
||
|
|
||
|
```bash
|
||
|
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 :
|
||
|
|
||
|
```bash
|
||
|
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 :
|
||
|
|
||
|
```bash
|
||
|
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 :
|
||
|
|
||
|
```bash
|
||
|
docker run --rm -v volume_serveur_web:/data alpine cat /data/index.html
|
||
|
```
|
||
|
|
||
|
Résultat :
|
||
|
```html
|
||
|
<html><body><h1>Moncef STITI</h1></body></html>
|
||
|
```
|
||
|
### Démarrer un conteneur
|
||
|
|
||
|
- Démarrer un conteneur en mode détaché nommé tp21
|
||
|
```bash
|
||
|
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
|
||
|
```bash
|
||
|
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
|
||
|
```bash
|
||
|
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
|
||
|
```bash
|
||
|
docker volume create backup_web
|
||
|
```
|
||
|
|
||
|
2. 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 :
|
||
|
```bash
|
||
|
docker run --rm -v volume_serveur_web:/source -v backup_web:/destination alpine sh -c "cp -r /source/* /destination/"
|
||
|
```
|
||
|
|
||
|
3. Vérification que la copie a bien fonctionné
|
||
|
```bash
|
||
|
docker run --rm -v backup_web:/data alpine cat /data/index.html
|
||
|
```
|
||
|
|
||
|
Ce qui devrait renvoyer :
|
||
|
```html
|
||
|
<html><body><h1>Votre Prénom Votre Nom</h1></body></html>
|
||
|
```
|
||
|
|
||
|
4. Démarrage d'un conteneur tp24 qui monte les deux volumes simultanément
|
||
|
```bash
|
||
|
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 :
|
||
|
```bash
|
||
|
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
|
||
|
```bash
|
||
|
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
|
||
|
```bash
|
||
|
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)
|
||
|
```bash
|
||
|
docker run -d --name tp27 -v $(pwd)/web/index.html:/usr/local/apache2/htdocs/index.html httpd:alpine3.17
|
||
|
```
|
||
|
|
||
|
## Exercice complémentaire
|
||
|
2. Oui les changements se font directement
|
||
|
|
||
|
4. Vérifiez que le nouveau fichier est visible dans le conteneur :
|
||
|
```bash
|
||
|
docker exec tp25 cat /usr/local/apache2/htdocs/about.html
|
||
|
```
|