From bec9809ec34b5c5f5d1f05247730907db0aa13bd Mon Sep 17 00:00:00 2001 From: lxquaver Date: Thu, 12 Mar 2026 15:53:11 +0100 Subject: [PATCH] Commit completed exercices --- exercice-1-port-web/COMMANDS.md | 32 +++++++++++++++++-- exercice-2-dns-bridge/COMMANDS.md | 45 ++++++++++++++++++++++++++- exercice-3-web-db-network/COMMANDS.md | 40 +++++++++++++++++++++++- 3 files changed, 113 insertions(+), 4 deletions(-) diff --git a/exercice-1-port-web/COMMANDS.md b/exercice-1-port-web/COMMANDS.md index 3d1111c..51ed8b5 100644 --- a/exercice-1-port-web/COMMANDS.md +++ b/exercice-1-port-web/COMMANDS.md @@ -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 + + diff --git a/exercice-2-dns-bridge/COMMANDS.md b/exercice-2-dns-bridge/COMMANDS.md index 8a05490..f3381f4 100644 --- a/exercice-2-dns-bridge/COMMANDS.md +++ b/exercice-2-dns-bridge/COMMANDS.md @@ -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. diff --git a/exercice-3-web-db-network/COMMANDS.md b/exercice-3-web-db-network/COMMANDS.md index 9314a5f..f747fc5 100644 --- a/exercice-3-web-db-network/COMMANDS.md +++ b/exercice-3-web-db-network/COMMANDS.md @@ -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.