Leçon 15 : Exposition de Ports et Communication Inter-Conteneurs
Nous devons distinguer deux concepts de ports : le port interne du conteneur et le port exposé de l'hôte.
1. EXPOSE (Instruction du Dockerfile)
L'instruction EXPOSE documente le port sur lequel l'application à l'intérieur du conteneur écoute. Elle est purement informative et ne publie pas réellement le port.
dockerfile
L'application écoute sur le port 80
EXPOSE 80
2. Publication de Ports (Drapeau -p)
Pour rendre le port d'un conteneur accessible depuis la machine hôte (et le monde extérieur), vous devez utiliser le drapeau -p (publier) lors de docker run.
Syntaxe : -p <Port Hôte>:<Port Conteneur>
bash
Mappe le port 80 du conteneur au port 8000 sur l'hôte
docker run -d -p 8000:80 --name web_app nginx
Conseil : Si vous utilisez uniquement un seul -P (P majuscule), Docker publiera tous les ports exposés vers des ports aléatoires, de haut niveau, sur l'hôte. Ceci est souvent utile pour les tests temporaires.
3. Communication Inter-Conteneurs (Mise en Réseau Interne)
Lorsque les conteneurs se trouvent sur le même réseau bridge personnalisé (Leçon 14), ils peuvent communiquer sans publier de ports vers l'hôte.
Exemple :
- Une application Frontend (écoutant sur 3000 à l'intérieur de son conteneur).
- Une API Backend (écoutant sur 5000 à l'intérieur de son conteneur).
Si les deux sont sur my_custom_network :
- Le Frontend doit accéder à l'API Backend.
- Le Frontend utilise l'URL :
http://backend_container_name:5000/api. - Le Frontend n'a pas besoin du mappage de port hôte (par exemple,
-p 5000:5000) sauf si vous devez également déboguer l'API directement depuis votre machine hôte.
Règle Clé : N'exposez les ports (en utilisant -p) que pour les services qui doivent être accédés directement par les utilisateurs ou les systèmes externes (comme un serveur web ou un équilibreur de charge). Les services internes comme les bases de données doivent rester non exposés.