Mappage des ports

DockerBeginner
Pratiquer maintenant

Introduction

Dans les conteneurs, l’isolation est une caractéristique essentielle. Par défaut, le réseau d’un conteneur est séparé de celui du système hôte. Ainsi, un serveur web exécuté dans le conteneur peut fonctionner correctement tout en restant inaccessible depuis l’extérieur si vous ne publiez pas explicitement un port.

Le mappage des ports comble cet écart. Il redirige le trafic d’un port choisi sur l’hôte vers un port choisi à l’intérieur du conteneur. Il s’agit d’une notion fondamentale du réseau des conteneurs, car elle explique comment des services isolés deviennent accessibles.

Sans cette étape de publication, un service peut fonctionner parfaitement dans le conteneur tout en restant effectivement privé dans son propre espace de noms réseau.

Dans ce laboratoire, vous allez vous entraîner à :

  • Exécuter un conteneur de serveur web Nginx.
  • Mapper le port 8080 de l’hôte vers le port 80 du conteneur.
  • Vérifier le mappage et accéder au service.
  • Nettoyer les ressources.

Exposer le port du conteneur

Dans cette étape, vous allez démarrer un nouveau conteneur Docker à partir de l’image Nginx.

Nginx est un serveur web qui écoute par défaut sur le port 80 à l’intérieur du conteneur. Cependant, comme le conteneur est isolé, le port 80 n’est pas automatiquement accessible depuis votre environnement LabEx. Pour résoudre ce problème, vous allez mapper le port 8080 de votre machine hôte vers le port 80 situé dans le conteneur.

La syntaxe du mappage de ports est -p <host_port>:<container_port>.

L’ordre est important. Le côté gauche correspond au port de l’hôte auquel les clients se connectent, tandis que le côté droit correspond au port sur lequel l’application écoute réellement dans le conteneur.

Exécutez la commande suivante dans votre terminal :

docker run -d -p 8080:80 --name my-nginx nginx

Décomposition de la commande :

  • docker run : commande qui crée et démarre un conteneur.
  • -d : exécute le conteneur en mode detached (en arrière-plan).
  • -p 8080:80 : option de mappage des ports.
    • 8080 : port de votre machine hôte (l’environnement LabEx).
    • 80 : port situé dans le conteneur, sur lequel Nginx écoute.
  • --name my-nginx : attribue le nom « my-nginx » au conteneur.
  • nginx : image à utiliser.

Si l’opération réussit, Docker affiche le long identifiant du conteneur.

À ce stade, Docker n’a pas modifié Nginx. Il a créé une règle réseau afin que les requêtes arrivant sur le port de l’hôte soient redirigées vers le port du service dans le conteneur.

Vérifier la configuration des ports

Vous devez maintenant vérifier que le conteneur est en cours d’exécution et que le mappage des ports est correctement configuré. La commande docker ps fournit ces informations.

Exécutez la commande suivante :

docker ps

Vous devriez voir un résultat similaire à celui-ci :

CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS                  NAMES
abc123456789   nginx     "/docker-entrypoint.…"   10 seconds ago   Up 10 seconds   0.0.0.0:8080->80/tcp   my-nginx

Comprendre le résultat :

Examinez attentivement la colonne PORTS : 0.0.0.0:8080->80/tcp.

  • 0.0.0.0:8080 : l’hôte écoute sur le port 8080 de toutes ses interfaces réseau.
  • -> : indique le sens de la redirection.
  • 80/tcp : port de destination à l’intérieur du conteneur.

Cela confirme que tout trafic envoyé au port 8080 de votre machine sera redirigé vers le port 80 du conteneur.

C’est pour cette raison que le mappage des ports est souvent appelé « publication » d’un port de conteneur. Vous rendez accessible à l’hôte ou à des clients externes un service qui serait autrement isolé.

Vous pouvez également utiliser une commande spécifique pour afficher uniquement les ports :

docker port my-nginx

Tester le service

Maintenant que le port est mappé, vérifiez que le serveur web est accessible. Comme vous avez mappé le port 8080 de l’hôte, vous pouvez accéder au serveur Nginx en envoyant une requête à localhost:8080.

Vous allez utiliser curl, un outil en ligne de commande permettant d’effectuer des requêtes web.

Exécutez la commande suivante :

curl localhost:8080

Résultat attendu :

Vous devriez voir le code HTML brut de la page d’accueil Nginx par défaut.

<!DOCTYPE html>
<html>
  <head>
    <title>Welcome to nginx!</title>
...
    <h1>Welcome to nginx!</h1>
...
</html>

Si ce résultat HTML s’affiche, félicitations ! Votre requête est partie de l’hôte (port 8080), est entrée dans le conteneur (port 80), a été traitée par Nginx, puis la réponse a été renvoyée.

Cet aller-retour prouve concrètement que le réseau entre l’hôte et le conteneur fonctionne ; il ne montre pas seulement que le processus du conteneur est en cours d’exécution.

Nettoyer les ressources

Dans cette dernière étape, vous allez nettoyer l’environnement. Il est recommandé d’arrêter et de supprimer les conteneurs qui ne sont plus nécessaires afin de libérer les ports et les ressources système.

Commencez par arrêter le conteneur en cours d’exécution :

docker stop my-nginx

Supprimez ensuite le conteneur arrêté :

docker rm my-nginx

Vérifiez que le conteneur a bien disparu :

docker ps -a

Le conteneur my-nginx ne devrait plus apparaître dans la liste.

Résumé

Dans ce laboratoire, vous avez appris avec succès les bases du mappage des ports Docker. Vous avez :

  1. Lancé un conteneur Nginx en mode détaché.
  2. Mappé le port 8080 de l’hôte vers le port 80 du conteneur à l’aide de l’option -p.
  3. Vérifié la configuration des ports avec docker ps.
  4. Accédé au service depuis l’hôte avec curl.
  5. Nettoyé le conteneur.

La compréhension du mappage des ports est essentielle pour déployer des applications web, car elle permet au trafic externe d’atteindre les services exécutés dans vos conteneurs isolés.