Docker : le réseau
Les conteneurs communiquent entre eux et avec l’extérieur grâce aux réseaux Docker. Les exemples utilisent des noms génériques (monreseau, web).
Pilotes de réseau
Section intitulée « Pilotes de réseau »| Pilote | Comportement |
|---|---|
bridge |
Réseau privé interne à la machine (défaut) |
host |
Le conteneur partage le réseau de l’hôte, sans isolation (Linux) |
none |
Aucun réseau |
overlay |
Réseau multi-machines (Docker Swarm) |
Sur le réseau bridge par défaut, les conteneurs se joignent seulement par adresse IP. Sur un réseau défini par l’utilisateur, ils se joignent aussi par leur nom.
Gérer les réseaux
Section intitulée « Gérer les réseaux »docker network ls # liste les réseauxdocker network create monreseau # crée un réseau bridgedocker network create --subnet 172.28.0.0/16 monreseau # plage d'adresses imposéedocker network inspect monreseau # détail (conteneurs connectés, adresses)docker network rm monreseau # supprimedocker network prune # supprime les réseaux inutilisésRattacher des conteneurs
Section intitulée « Rattacher des conteneurs »docker run -d --name api --network monreseau monapp:1.0docker run -d --name web --network monreseau nginx:alpinedocker exec web wget -qO- http://api:3000 # le nom « api » est résolu
docker network connect monreseau db # ajoute un conteneur existantdocker network connect --alias base monreseau db # avec un alias DNSdocker network disconnect monreseau dbPublier des ports
Section intitulée « Publier des ports »Un port n’est accessible depuis l’extérieur que s’il est publié.
docker run -d -p 8080:80 nginx:alpine # port 8080 de l'hôte vers 80 du conteneurdocker run -d -p 127.0.0.1:8080:80 nginx:alpine # accessible uniquement depuis la machine localedocker run -d -p 8080:80/udp monapp:1.0 # protocole UDPdocker run -d -P nginx:alpine # publie les ports exposés sur des ports aléatoiresdocker port web # affiche les ports publiésDNS et noms d’hôtes
Section intitulée « DNS et noms d’hôtes »docker run --dns 1.1.1.1 monapp:1.0 # serveur DNS précisdocker run --add-host base.local:192.168.1.50 monapp:1.0 # entrée dans /etc/hostsdocker run --hostname monapp monapp:1.0Dépannage
Section intitulée « Dépannage »docker network inspect monreseau # le conteneur est-il bien connecté ?docker exec web ping -c 3 api # joindre un autre conteneur (si ping est présent)docker exec web nslookup api # tester la résolution de nomsdocker port web # le port est-il publié ?docker logs web # l'application écoute-t-elle sur 0.0.0.0 ?Une application qui n’écoute que sur 127.0.0.1 dans le conteneur n’est pas joignable de l’extérieur : elle doit écouter sur 0.0.0.0.
Pour aller plus loin
Section intitulée « Pour aller plus loin »- Documentation officielle : docs.docker.com/engine/network
- Pare-feu et UFW : voir Installer Docker sur Ubuntu