Objectifs
- Identifier les modes bridge, host et none.
- Créer et inspecter un réseau utilisateur.
- Comprendre la résolution DNS par nom de container.
- Distinguer un port accessible entre containers d’un port publié vers l’hôte.
Comprendre les réseaux Docker
Docker fournit plusieurs drivers réseau. bridge crée un réseau isolé sur l’hôte, host retire une grande partie de l’isolation réseau sous Linux et none ne configure pas de connectivité externe normale.
Un réseau bridge utilisateur regroupe les containers d’une même application et offre une résolution DNS automatique par nom ou alias entre ses membres.
Bridge, host, none et réseaux utilisateur
Sans option, un container rejoint généralement le bridge par défaut. Un bridge utilisateur apporte une meilleure isolation entre projets et une résolution de noms plus pratique.
- bridge : réseau privé sur l’hôte Docker, adapté à la plupart des applications locales.
- host : partage la pile réseau de l’hôte sur les plateformes qui le prennent en charge.
- none : isole le container des réseaux Docker usuels.
- réseau utilisateur : réseau nommé créé pour un périmètre applicatif.
docker network ls
docker network create app-network
docker network inspect app-networkCommunication par nom de container
Deux containers reliés au même réseau utilisateur peuvent généralement utiliser leurs noms comme noms DNS. Il est donc inutile de figer une adresse IP susceptible de changer lors d’une recréation.
docker run -d \
--name backend \
--network app-network \
nginx:alpine
docker run -d \
--name frontend \
--network app-network \
nginx:alpineDepuis frontend, le nom backend peut être résolu sur app-network. Le service doit toutefois écouter sur la bonne adresse et le bon port pour accepter la connexion.
Connecter un container existant
Un container peut appartenir à plusieurs réseaux utilisateur. connect ajoute une connexion et disconnect la retire sans recréer l’objet container.
docker network connect app-network existing-container
docker network disconnect app-network existing-containerPort interne et port publié
Les containers d’un même réseau utilisateur communiquent directement sur leurs ports applicatifs. Publier un port crée en plus un accès depuis l’hôte, et éventuellement depuis l’extérieur selon l’adresse d’écoute et le pare-feu.
docker run -d --name public-web --network app-network -p 8080:80 nginx:alpineEXPOSE dans une image documente le port prévu. Seule une publication comme -p 8080:80 crée le mapping vers l’hôte.
Bonnes pratiques
Créez un réseau par périmètre applicatif, connectez uniquement les services qui doivent communiquer et publiez le moins de ports possible.
- Utiliser les noms de services ou containers plutôt que des IP fixes.
- Séparer frontend, backend et données lorsque le modèle de sécurité le justifie.
- Inspecter le réseau avant de modifier ses connexions.
Erreur fréquente : utiliser localhost pour joindre un autre container
Mini résumé
- Bridge est le driver courant ; host et none changent fortement l’isolation.
- Un réseau utilisateur fournit une résolution DNS entre ses containers.
- network connect et disconnect modifient les appartenances réseau.
- -p 8080:80 publie un service du container vers l’hôte.
Mini quiz
Trois questions pour vérifier les notions essentielles de la leçon.