Réseau¶
La théorie¶
Ce qui vous a été présenté :
Un container =
une paire de « veth » : deux interfaces virtuelles, connectées entre elle (tout ce qui rentre dans l’une ressort dans l’autre et inversement)
une des veth est dans le namespace réseau standard de l’hôte
l’autre est dans un namespace isolé
La veth du namespace standard est connectée au « bridge » docker0
Le bridge docker0 fait du DNAT : il permet l’accès à l’extérieur
(Un bon article pour aller plus loin : https://iximiuz.com/en/posts/container-networking-is-simple/ )
Observer le réseau des conteneurs¶
Regardez les interfaces réseau et le routage d’un conteneur :
docker run --rm -it alpine sh
ip link
ip route
De la même manière, regardez ce qu’il se passe en choisissant de ne pas faire de namespace séparé pour le conteneur :
docker run --network host --rm -it alpine sh
ip link
ip route
SNAT¶
A la création d’un conteneur, on crée une redirection de port en ajoutant l’option -p PORTHOTE:PORTCONTENEUR à docker run.
Cela ouvre le port PORTHOTE sur votre machine et redirige tout ce qui y arrive sur le port PORTCONTENEUR du conteneur.
Par exemple, en partant de l’image nginx qui lance un serveur web qui écoute sur le port 80 du conteneur, nous allons pouvoir exposer le port 8000 de notre machine :
docker run -p 8000:80 nginx.
C’est aussi simple que ça !