14/03/2024

5. Réseaux

Lu 852 fois Licence Creative Commons

« Tout ça est super mais peut-on connecter des conteneurs entre eux ? »

Oui, avec les réseaux Docker !

Pilotes réseaux

Il existe plusieurs pilotes de réseau Docker dont le plus utilisé et sélectionné par défaut est bridge. De la même manière, plusieurs réseaux sont créés par défaut avec des pilotes différents, dont un réseau nommé bridge. Mais il est déconseillé de l'utiliser, il est préférable de créer ses propres réseaux.


Les réseaux bridge permettent de connecter plusieurs conteneurs en exposant leurs ports entre eux, mais pas nécessairement vers l'extérieur.

Documentation: Networking overview - Network drivers


Créer un réseau

Les réseaux se manipulent avec les commandes network. La commande create crée un réseau dont on indique un nom, et le pilote avec l'option --driver:

docker network create mon-bridge

Sans l'option du pilote, un réseau bridge sera créé.


Connecter un conteneur à un réseau

Il est possible de connecter un conteneur à un réseau dès son démarrage avec l'option --network:

docker run -it --name ubuntu-a --network mon-bridge ubuntu

Ou qu'un conteneur actif se connecte à un réseau avec la commande connect:

docker run -it --name ubuntu-b ubuntu
docker network connect mon-bridge ubuntu-b

Note: Pour déconnecter un conteneur d'un réseau, utiliser docker network disconnect CONTAINER.


Communiquer dans un réseau

A chaque conteneur est assigné une addresse IP dans le réseau mais celle-ci peut être variable. Lorsqu'un conteneur a besoin de communiquer avec un autre, il peut utiliser le nom de celui-ci.
Docker implémente un serveur DNS permettant la découverte de services dans un réseau.


Installez des outils DNS depuis un conteneur:

apt-get update
apt-get install dnsutils

Recherchez les enregistrements DNS à partir du nom d'un conteneur depuis l'autre avec dig:

dig ubuntu-b
[output]...
[output];; ANSWER SECTION:
[output]ubuntu-b.		600	IN	A	172.19.0.3
[output]...

Le conteneur ubuntu-b possède donc l'adresse IP 172.19.0.3.
Installez le paquet iputils-ping et envoyez des paquets avec ping:

apt-get install iputils-ping
ping -c 5 ubuntu-b


Le serveur DNS intégré à Docker permet la résolution de noms de conteneurs.