# TP3 : Docker Networks & Dockerfile

## Organisation
- Créer un dossier `TP3/`
- Pour chaque exercice, créer un sous-dossier avec les fichiers requis
- Documenter toutes les commandes dans `COMMANDS.md`
- Répondre aux questions dans `QUESTIONS.md`

## Livrables attendus
- Structure du projet :
```
TP3/
├── exo1-networks/
│   ├── COMMANDS.md
│   └── QUESTIONS.md
└── exo2-dockerfile/
    ├── Dockerfile
    ├── COMMANDS.md
    └── QUESTIONS.md
```

## Exercice 1 : Docker Networks

### Objectif
Comprendre et manipuler les différents types de réseaux Docker et la communication entre conteneurs.

### Actions à réaliser

1. **Création des réseaux**
   - Créer un réseau de type bridge nommé "bridge-tp3"
   - Utiliser le réseau prédéfini de type host nommé "host"
   - Utiliser le réseau prédéfini de type none nommé "none"

2. **Création des conteneurs**
   - Créer 2 conteneurs nginx (web1, web2) sur bridge-tp3
   - Créer 1 conteneur nginx (web3) sur host
   - Créer 1 conteneur nginx (web4) sur none

3. **Tests de communication**
   - Tester ping entre web1 et web2
   - Tester ping entre web1 et web3
   - Tester ping entre web1 et web4
   - Tester l'accès HTTP depuis votre machine vers chaque conteneur

4. **Documentation**
   - Noter toutes les commandes dans COMMANDS.md
   - Expliquer les résultats dans QUESTIONS.md

### Questions à répondre
1. Expliquer les différences entre les types de réseaux Docker
2. Pourquoi web4 est-il isolé et inaccessible ?
3. Analyser les résultats des tests de communication
4. Pour chaque cas d'usage, quel type de réseau recommanderiez-vous :
   - Serveur web public
   - Base de données
   - Service de cache Redis


## Exercice 2 : Dockerfile

### Objectif
Construire une image Docker optimisée pour Apache httpd servant un site web statique.

### Actions à réaliser

1. **Création du Dockerfile**
   ```dockerfile
   # Choisir l'OS le plus léger possible
   # Installer Apache httpd
   # Définir les labels :
   #   - MAINTAINER: votre_nom
   #   - VERSION: 1.8
   #   - TP: 3
   ```

2. **Ajout des sources**
   - Cloner : https://github.com/MaximePIERRONT/beforeStage.git
   - Personnaliser static-site.html :
      - Remplacer "NOM PRENOM" par votre nom

3. **Configuration**
   - Ajouter les variables d'environnement :
     ```
     SCHOOL: IUT
     LEVEL: 1.8
     ```
   - Implémenter un healthcheck (intervalle: 1min, timeout: 1s)

4. **Tests et validation**
   - Builder l'image
   - Lancer un conteneur
   - Vérifier :
      - Le site web est accessible
      - Les variables d'environnement sont correctes
      - Le healthcheck fonctionne

### Questions à répondre
1. Pourquoi choisir un OS minimal ? Quels sont les avantages ?
2. Quel est l'intérêt d'utiliser des variables d'environnement ?
3. À quoi sert le healthcheck dans un contexte de production ?
4. Comment pourriez-vous optimiser davantage cette image ?

### Publication sur Docker Hub
1. Créer un compte Docker Hub si nécessaire
2. Tagger l'image : `docker tag local-image username/repository:tag`
3. Pousser l'image : `docker push username/repository:tag`
4. Ajouter le lien Docker Hub dans COMMANDS.md

## Critères d'évaluation
- Qualité et clarté des explications dans les fichiers QUESTIONS.md
- Précision et exhaustivité des commandes dans COMMANDS.md
- Optimisation et bonnes pratiques dans le Dockerfile
- Compréhension des concepts de réseaux Docker
- Capacité à tester et valider son travail