Exercice 04 : Configurer les ports et variables d'environnement
🎯 Objectifs
À la fin de cet exercice, vous serez capable de :
- ✅ Mapper un port hôte sur un port conteneur avec
-p HOST:CONTAINER - ✅ Passer des variables d'environnement au conteneur avec
-e NOM=valeur - ✅ Exposer plusieurs ports simultanément
- ✅ Vérifier les ports exposés avec
docker inspectetdocker port - ✅ Accéder à une application web déployée dans un conteneur depuis votre navigateur
Durée estimée : 30 minutes
Difficulté : ⭐⭐⭐☆☆ (Débutant+)
Prérequis :
- Exercices 01, 02 et 03 complétés
curldisponible dans le terminal (ou un navigateur)
📖 Contexte
Par défaut, un conteneur Docker est isolé réseau : ses ports ne sont pas accessibles depuis l'extérieur. Pour rendre une application accessible, il faut publier ses ports avec l'option -p. De même, les applications modernes se configurent via des variables d'environnement plutôt que des fichiers de config. Docker permet de les injecter au lancement avec -e.
📋 Énoncé
Déployez un serveur web Nginx et une base de données PostgreSQL avec les bons paramètres réseau et de configuration, puis vérifiez que les applications sont accessibles et correctement configurées.
🧭 Déroulement de l'exercice
Tâche 1 : Exposer un port et accéder à l'application
Lancez un conteneur Nginx nommé web en mode détaché, en mappant le port 8080 de votre machine sur le port 80 du conteneur.
Indice : La syntaxe du port mapping est
-p PORT_HOTE:PORT_CONTENEUR. Nginx écoute sur le port 80 par défaut.
Vérification : curl -s http://localhost:8080 | grep "nginx" doit retourner du HTML contenant le mot "nginx".
Tâche 2 : Passer des variables d'environnement
Lancez un conteneur PostgreSQL nommé db en mode détaché, avec les variables d'environnement suivantes :
POSTGRES_USER=devopsPOSTGRES_PASSWORD=motdepassePOSTGRES_DB=formation
Mappez le port 5432 de l'hôte sur le port 5432 du conteneur.
Indice : Chaque variable d'environnement nécessite sa propre option
-e. L'imagepostgres:16-alpineutilise ces variables pour initialiser la base au premier démarrage.
Vérification : docker ps doit lister les deux conteneurs web et db avec le statut Up.
Tâche 3 : Inspecter les ports d'un conteneur
Affichez les ports publiés du conteneur web en utilisant deux méthodes différentes.
Indice :
docker port <conteneur>liste les mappings de ports.docker inspect <conteneur> --format '{{json .NetworkSettings.Ports}}'retourne le même résultat en JSON.
Vérification : Les deux commandes doivent montrer que le port 80/tcp du conteneur est mappé sur 0.0.0.0:8080.
Tâche 4 : Vérifier les variables d'environnement d'un conteneur
Inspectez le conteneur db et affichez ses variables d'environnement pour confirmer qu'elles ont bien été injectées.
Indice :
docker inspect <conteneur> --format '{{.Config.Env}}'retourne la liste des variables. Vous pouvez aussi utiliserdocker exec db envpour les afficher depuis l'intérieur du conteneur.
Vérification : La liste doit contenir POSTGRES_USER=devops, POSTGRES_DB=formation, et POSTGRES_PASSWORD=motdepasse.
Tâche 5 : Exposer plusieurs ports
Arrêtez et supprimez le conteneur web, puis relancez-le en exposant à la fois le port 8080→80 et un second mapping 8443→443.
Indice : Il est possible d'utiliser plusieurs options
-pdans la même commandedocker run.
Vérification : docker port web doit lister deux mappings de ports.
🗂️ Mini-Projet : Stack web + base de données
# 1. Nginx avec port mapping
docker run -d --name web -p 8080:80 nginx:1.25-alpine
# 2. PostgreSQL avec variables d'environnement
docker run -d --name db \
-p 5432:5432 \
-e POSTGRES_USER=devops \
-e POSTGRES_PASSWORD=motdepasse \
-e POSTGRES_DB=formation \
postgres:16-alpine
# 3. Vérifier les ports
docker port web
docker inspect web --format '{{json .NetworkSettings.Ports}}'
# 4. Vérifier les variables
docker inspect db --format '{{.Config.Env}}'
# 5. Accéder à l'application
curl http://localhost:8080Checkpoints de validation :
curl http://localhost:8080retourne la page par défaut de Nginxdocker pslistewebetdbavec statutUpdocker port webaffiche80/tcp -> 0.0.0.0:8080docker inspect db --format '{{.Config.Env}}'contientPOSTGRES_USER=devopsdocker port webliste 2 mappings après relance avec-p 8080:80 -p 8443:443