Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 30 additions & 2 deletions exercice-1-port-web/COMMANDS.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,34 @@
# Commandes

```bash
``` bash
# Exemple de structure attendue
docker run -d --name web-port -p 8080:80 nginx
```

# Vérification accessibilité
curl.exe -I http://localhost:8080

#Vérifier les ports
docker port web-port

#Suppression du conteneur
docker rm -f web-port

#Nouveau conteneur avec publication restreinte
docker run -d --name web-port -p 127.0.0.1:8080:80 nginx

#Nettoyage final
docker rm -f web-port

```

Une simple commande EXPOSE ne publie pas vers la machine hôte

# Réponse aux questions

1) Le port hote est le point d'entrée sur la machine physique tandis que le port conteneur est le point d'écoute interne défini par l'app au sein du network namespace

2) L'instruction EXPOSE n'ouvre aucun port, elle ne sert qu'à documenter

3) Limiter au port 127.0.0.1 permet d'empêcher l'accès au service depuis toute machine n'étant pas la machine hôte


45 changes: 44 additions & 1 deletion exercice-2-dns-bridge/COMMANDS.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,49 @@
# Commandes

```bash
# Exemple de structure attendue
# Création du réseau personnalisé
docker network create test_net

# Lancement du serveur Nginx sur le nouveau réseau
docker run -d --name serveur --network test_net nginx

# Vérification par ping depuis un conteneur éphémère
docker run --rm --network test_net alpine ping -c 2 serveur
# Le ping fonctionne

# Vérification par requête HTTP
docker run --rm --network test_net alpine wget -qO- serveur
# La requete fonctionne

#Inspection du réseau pour identifier les conteneurs connectés
docker network inspect test_net

# Lancement sur le pont par défaut
docker run -d --name serveur-bridge nginx

# Tentative de ping
docker run --rm alpine ping -c 2 serveur-bridge
#Pas de réponse

# Lancement d'un conteneur isolé
docker run -d --name passager alpine sleep 1000

# Connexion au réseau test_net en cours d'exécution
docker network connect test_net passager

# Vérification de la connectivité vers 'serveur'
docker exec passager ping -c 2 serveur
# Le ping fonctionne

# Déconnexion et nettoyage
docker network disconnect test_net passager

docker rm -f serveur serveur-bridge passager
docker network rm test_net
```

1) Les réseaux personnalisés assurent l'isolation des flux applicatifs et activent la découverte automatique des services par noms d'hôtes, contrairement au pont par défaut.

2) Le DNS interne permet une communication résiliente via des noms logiques immuables, supprimant la dépendance aux adresses IP éphémères des conteneurs.

3) L'inspection réseau permet de valider la configuration des sous-réseaux, d'identifier les conflits d'adresses IP et de confirmer l'adhésion des conteneurs aux segments réseau.
40 changes: 39 additions & 1 deletion exercice-3-web-db-network/COMMANDS.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,45 @@
# Commandes

```bash
# Exemple de structure attendue
# Création du réseau et du volume
docker network create app_network
docker volume create db_volume

# lancement du conteneur mysql
docker run -d --name mysql_db --network app_network -v db_volume:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=secret -e MYSQL_DATABASE=app_db mysql:8.0

# lancement du conteneur webapp
docker run -d --name webapp --network app_network -p 8080:80 nginx

#inspection du réseau
docker network inspect app_network
#Les containers apparaissent bien dans le réseau

# Insertion d'une donnée
docker exec -i mysql_db mysql -u root -psecret app_db -e "CREATE TABLE IF NOT EXISTS inventory (id INT AUTO_INCREMENT PRIMARY KEY, item VARCHAR(50)); INSERT INTO inventory (item) VALUES ('Docker Volume Test');"

# Vérification de la présence de cette donnée
docker exec -i mysql_db mysql -u root -psecret app_db -e "SELECT * FROM inventory;"

# Supression du conteneur
docker rm -f mysql_db

docker run -d --name mysql_db --network app_network -v db_volume:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=secret -e MYSQL_DATABASE=app_db mysql:8.0

# Vérification de la présence de la donnée
docker exec -i mysql_db mysql -u root -psecret app_db -e "SELECT * FROM inventory;"
#La donnée est toujours présente

#Nettoyage
docker rm -f webapp mysql_db
docker network rm app_network
docker volume rm db_volume
```

# Réponse aux questions

1) L'exposition est superflue car seul le conteneur webapp nécessite un accès via le segment réseau interne, limitant la surface de vulnérabilité externe.

2) Le réseau personnalisé fournit une résolution DNS automatique permettant aux services de s'identifier par nom logique sans dépendre d'adresses IP variables.

3) La non-réutilisation du volume entraînerait la perte irréversible des enregistrements, le nouveau conteneur initialisant un système de fichiers vierge.