diff --git a/TP3/exo1-networks/COMMANDS.md b/TP3/exo1-networks/COMMANDS.md new file mode 100644 index 0000000..08041b7 --- /dev/null +++ b/TP3/exo1-networks/COMMANDS.md @@ -0,0 +1,124 @@ +# TP3 Docker Networks - Commandes + +## 1. Création des réseaux + +### Création d'un réseau bridge personnalisé +```bash +docker network create bridge-tp3 +``` + +### Visualisation des réseaux disponibles +```bash +docker network ls +``` + +## 2. Création des conteneurs + +### Création des conteneurs sur le réseau bridge-tp3 +```bash +docker run -d --name web1 --network bridge-tp3 nginx +docker run -d --name web2 --network bridge-tp3 nginx +``` + +### Création d'un conteneur sur le réseau host +```bash +docker run -d --name web3 --network host nginx +``` + +### Création d'un conteneur sur le réseau none +```bash +docker run -d --name web4 --network none nginx +``` + +### Vérification des conteneurs créés +```bash +docker ps +``` + +## 3. Tests de communication + +### Installation de ping dans les conteneurs +```bash +docker exec web1 apt-get update +docker exec web1 apt-get install -y iputils-ping +docker exec web2 apt-get update +docker exec web2 apt-get install -y iputils-ping +docker exec web3 apt-get update +docker exec web3 apt-get install -y iputils-ping +``` +Note: L'installation de ping sur web4 (réseau none) ne fonctionnera pas car il n'a pas d'accès réseau. + +### Récupération des adresses IP des conteneurs +```bash +docker inspect -f '{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' web1 +docker inspect -f '{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' web2 +docker inspect -f '{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' web3 +docker inspect -f '{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' web4 +``` + +### Test de ping entre web1 et web2 +```bash +docker exec web1 ping -c 4 web2 +``` + +### Test de ping entre web1 et web3 (par IP hôte) +```bash +# Remplacer HOST_IP par l'adresse IP de votre machine hôte +docker exec web1 ping -c 4 HOST_IP + +# Dans mon cas : +docker exec web1 ping -c 4 172.16.3.195 +``` + +### Test de ping entre web1 et web4 +```bash +# Ce test échouera car web4 n'a pas de réseau +# Nous aurons besoin de l'adresse IP de web4, mais comme il est sur le réseau none, il n'en a pas +``` + +### Test d'accès HTTP + +#### Accès à web1 +```bash +# Exposer le port de web1 si ce n'est pas déjà fait +docker stop web1 +docker run -d --name web1 -p 8081:80 --network bridge-tp3 nginx +# Tester l'accès +curl http://localhost:8081 +``` + +#### Accès à web2 +```bash +# Exposer le port de web2 +docker stop web2 +docker run -d --name web2 -p 8082:80 --network bridge-tp3 nginx +# Tester l'accès +curl http://localhost:8082 +``` + +#### Accès à web3 (réseau host) +```bash +# web3 utilise directement le port 80 de l'hôte, donc il faut s'assurer qu'il n'est pas déjà utilisé +curl http://localhost:80 +# ou simplement +curl http://localhost +``` + +#### Accès à web4 (réseau none) +```bash +# Ce test échouera car web4 n'a pas de connectivité réseau +# Il n'est pas possible d'accéder à un conteneur sur le réseau none depuis l'extérieur +``` + +## 4. Nettoyage + +### Arrêt et suppression des conteneurs +```bash +docker stop web1 web2 web3 web4 +docker rm web1 web2 web3 web4 +``` + +### Suppression du réseau personnalisé +```bash +docker network rm bridge-tp3 +``` \ No newline at end of file diff --git a/TP3/exo1-networks/QUESTIONS.md b/TP3/exo1-networks/QUESTIONS.md new file mode 100644 index 0000000..d880a97 --- /dev/null +++ b/TP3/exo1-networks/QUESTIONS.md @@ -0,0 +1,73 @@ +# TP3 Docker Networks - Réponses aux questions + +## 1. Différences entre les types de réseaux Docker + +J'ai découvert qu'il existe plusieurs types de réseaux dans Docker qui fonctionnent différemment : + +**Réseau Bridge** : +- C'est le réseau par défaut de Docker +- Il crée un réseau privé interne où les conteneurs peuvent communiquer entre eux +- Chaque conteneur a sa propre adresse IP +- Pour accéder à un conteneur depuis ma machine, je dois utiliser l'option -p pour exposer les ports + +**Réseau Host** : +- Dans ce mode, le conteneur utilise directement le réseau de la machine hôte +- Pas d'isolation réseau +- Les ports sont directement accessibles sans mappage +- C'est plus rapide mais moins sécurisé + +**Réseau None** : +- Ce réseau désactive complètement toute connexion +- Le conteneur n'a pas d'interface réseau +- Il est totalement isolé +- Utile pour des traitements où la sécurité est critique + +## 2. Pourquoi web4 est-il isolé et inaccessible ? + +Le conteneur web4 est complètement isolé parce que je l'ai créé avec l'option `--network none`. Cela signifie que : + +- Il n'a aucune interface réseau configurée +- Il n'a pas d'adresse IP +- Il ne peut ni recevoir ni envoyer de données sur le réseau +- Je ne peux pas installer ping dessus car il ne peut pas télécharger de packages +- Je ne peux pas accéder au serveur nginx qu'il contient + +C'est comme si j'avais mis le conteneur dans une pièce sans portes ni fenêtres. Le serveur nginx tourne bien à l'intérieur, mais personne ne peut y accéder. + +## 3. Analyse des résultats des tests de communication + +**Test entre web1 et web2** : +Ces deux conteneurs peuvent communiquer facilement car ils sont sur le même réseau bridge-tp3. J'ai pu faire un ping de l'un à l'autre en utilisant simplement leur nom. C'est pratique car Docker gère la résolution de noms automatiquement dans un réseau bridge personnalisé. + +**Test entre web1 et web3** : +Le ping ne fonctionne pas directement avec le nom "web3" car web3 est sur le réseau host et n'a pas de nom DNS dans le réseau bridge. J'ai dû utiliser l'adresse IP de ma machine hôte pour atteindre web3. C'est comme s'ils étaient sur deux réseaux différents sans passerelle directe. + +**Test entre web1 et web4** : +Impossible de communiquer avec web4 depuis web1. Le conteneur web4 (réseau none) n'a pas d'adresse IP et est complètement isolé. C'est comme essayer d'appeler quelqu'un qui n'a pas de téléphone. + +**Accès HTTP depuis ma machine** : +- J'ai pu accéder à web1 et web2 via les ports que j'ai exposés (8081 et 8082) +- J'ai pu accéder à web3 directement sur localhost:80 (car il utilise le réseau host) +- Impossible d'accéder à web4 (car il n'a aucune connectivité réseau) + +## 4. Recommandations pour chaque cas d'usage + +**Pour un serveur web public** : +Je recommanderais un réseau **bridge** avec exposition de ports. C'est le plus adapté car : +- Je peux exposer uniquement les ports nécessaires (80/443) +- Les autres services du conteneur restent protégés +- Je peux avoir plusieurs serveurs web sur différents ports + +**Pour une base de données** : +Je choisirais un réseau **bridge personnalisé** sans exposition de ports. Pourquoi ? +- La base de données doit être accessible seulement par l'application +- Je ne veux pas que quelqu'un puisse y accéder depuis Internet +- Les conteneurs de mon application peuvent y accéder par nom + +**Pour un service de cache Redis** : +Je mettrais ça aussi sur un réseau **bridge personnalisé**, sur le même réseau que mon application. Parce que : +- Seule mon application a besoin d'accéder au cache +- C'est plus rapide si les conteneurs sont sur le même réseau +- C'est plus sécurisé de ne pas exposer Redis à l'extérieur + +En conclusion, j'ai compris que le choix du réseau dépend vraiment de ce qu'on veut faire avec le conteneur et de qui doit y accéder. C'est un compromis entre accessibilité, sécurité et performance. \ No newline at end of file diff --git a/TP3/exo2-dockerfile/COMMANDS.md b/TP3/exo2-dockerfile/COMMANDS.md new file mode 100644 index 0000000..22fcb9b --- /dev/null +++ b/TP3/exo2-dockerfile/COMMANDS.md @@ -0,0 +1,65 @@ +# Commandes Docker pour l'exercice 2 + +## Construction de l'image +```bash +docker build -t apache-static:1.8 . +``` + +## Lancement d'un conteneur +```bash +docker run -d -p 8080:80 --name apache-static-container apache-static:1.8 +# 98f3ffa33561f25e0320a4eeac67e83fe5629e8caf4883f7a35c83b9295e4a5a +``` + +## Vérification du site web +```bash +curl http://localhost:8080 +``` +Résultat : +```html + + +
+ +