« 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.