📚 Docker pour les débutants : Le Chantier Naval

3.1 : Comprendre le mapping de ports

📄 Article ⏱ 5 ✅ Gratuit

La différence entre Port Externe et Port Interne

Dans la section précédente, nous avons appris à récupérer des images Docker. Maintenant, nous allons voir comment accéder aux applications qui tournent dans nos conteneurs.

Car oui, lancer un conteneur est une chose… mais y accéder depuis son navigateur en est une autre.

Pour comprendre cela, il faut parler d’un concept essentiel : le mapping de ports.

Le problème : un conteneur est isolé

Par défaut, un conteneur Docker fonctionne dans son propre environnement réseau isolé.

Cela signifie que même si un service fonctionne parfaitement à l’intérieur du conteneur, il n’est pas accessible depuis votre machine ou depuis Internet.

Prenons un exemple simple.

Vous lancez un conteneur avec un serveur web qui écoute sur le port 80.

Dans le conteneur :

http://localhost:80

fonctionne parfaitement.

Mais depuis votre ordinateur :

http://localhost

… rien ne répond.

Pourquoi ?
Parce que le port 80 du conteneur n’est pas exposé vers l’extérieur.

C’est exactement là qu’intervient le mapping de ports.

Le principe : relier deux ports

Le mapping de ports consiste à relier un port de votre machine (l’hôte) à un port du conteneur.

On parle alors de :

  • Port externe (Host Port) → le port de votre machine
  • Port interne (Container Port) → le port utilisé par l’application dans le conteneur

Visuellement, cela donne :

Votre ordinateur        Conteneur Docker
--------------- -----------------
localhost:8080 ---> nginx:80
(port externe) (port interne)

Dans cet exemple :

  • votre navigateur accède à localhost:8080
  • Docker redirige vers le port 80 du conteneur

La syntaxe avec docker run

Le mapping de ports se fait avec l’option -p :

docker run -p PORT_EXTERNE:PORT_INTERNE image

Exemple concret avec un serveur web Nginx :

docker run -p 8080:80 nginx

Cela signifie :

  • le port 8080 de votre machine
  • est redirigé vers le port 80 du conteneur

Vous pouvez alors ouvrir votre navigateur sur :

http://localhost:8080

Et voir la page web de Nginx.

Pourquoi ne pas utiliser directement le port 80 ?

On pourrait se dire :
« Pourquoi ne pas faire simplement 80:80 ? »

C’est possible :

docker run -p 80:80 nginx

Mais utiliser des ports différents présente plusieurs avantages.

Cela permet notamment de :

  • éviter les conflits si un service utilise déjà le port 80
  • lancer plusieurs applications web en parallèle
  • tester des environnements de développement

Par exemple :

8080 → site de test
8081 → API
8082 → outil interne

Tous ces services peuvent tourner en même temps sur la même machine.

Une analogie simple : l’immeuble

Imaginez un immeuble.

  • L’adresse de l’immeuble = votre machine
  • Les appartements = les conteneurs
  • Les numéros de porte = les ports

Quand quelqu’un arrive à l’immeuble, il doit savoir quelle porte appeler.

Docker agit comme un standardiste :

« Si quelqu’un appelle au port 8080, je le redirige vers l’appartement qui écoute sur le port 80. »

Vérifier les ports exposés

Pour voir quels ports sont utilisés par vos conteneurs :

docker ps

Vous verrez une colonne PORTS ressemblant à ceci :

0.0.0.0:8080->80/tcp

Cela signifie :

  • 8080 sur votre machine
  • redirigé vers 80 dans le conteneur

À retenir

Le mapping de ports est l’un des mécanismes les plus importants de Docker.

Sans lui :

  • vos conteneurs fonctionnent
  • mais personne ne peut y accéder

Retenez simplement cette règle : PORT_EXTERNE → PORT_INTERNE

Astuce pour la suite : Nous le verrons plus tard dans cette formation, il sera possible d’exposer nos applications web sans transfert de port direct, grâce à un service supplémentaire : le reverse proxy Traefik, qui se chargera de router les requêtes vers le bon conteneur automatiquement.

Dans la prochaine leçon, nous allons voir un point qui crée beaucoup de confusion chez les débutants : la différence entre EXPOSE et PORTS.

Spoiler : EXPOSE n’ouvre pas réellement le port. 😈