164 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Markdown
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			164 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Markdown
		
	
	
		
			Executable File
		
	
	
	
	
# 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
 | 
						|
``` |