Connecter plusieurs conteneurs Docker
Les réseaux dans Docker vous permettront de connecter plusieurs conteneurs entre eux.
Installer les commandes ping et ip
Avant de commencer, il est important d'annoncer les commandes que nous utiliserons. Celles-ci ne sont pas forcément propres à Docker, mais au système du système d'exploitation Linux.
Pour nos conteneurs, nous allons installer et utiliser deux commandes. Pour quel objectif ? Faire des tests et vérifier que nos conteneurs soient bien connectés et réussissent à bien communiquer via le réseau.
-
ping
-
ip
Ping
La commande ping
permet de vérifier s'il est possible d'envoyer et de recevoir des informations à et d'une autre machine (ou d'un autre conteneur).
Pour l'installer, copiez la commande qui suit.
apt-get update && apt-get install -y iputils-ping
IP
La commande ip
affiche, entre autres choses, l'adresse IP de notre machine (ou conteneur).
Avant de l'utiliser, il faut l'installer.
apt-get update && apt-get install -y iproute2
Pour information cette commande remplace ifconfig
.
🔴 Les conteneurs Ubuntu que nous nous servons sont minimalistes. Cela signifie qu'ils ne contiennent que les programmes nécessaires à leur bon fonctionnement. Pour bien comprendre les réseaux, il nous faudra lancer plusieurs conteneurs. Pour chacun d'entre eux, il faut absolument installer ping
et ip
.
Les conteneurs sont-ils déjà connectés ?
La réponse à la question du sous-titre est oui !
Et pour le prouver nous allons commencer à faire des tests.
Tester la communication entre deux conteneurs
⓵ Lancer deux conteneurs
Commençons par créer deux conteneurs à l'aide de la commande suivante.
docker run --rm -it ubuntu:18.04
🔥 Pour lancer deux conteneurs en même temps, il faut ouvrir un terminal (que l'on appelle aussi une console) et ensuite utiliser la commande ci-dessus. Puis ouvrez une autre fenêtre ou un autre onglet du terminal et refaites la même chose. Ne fermez pas les deux fenêtres (ou onglets) avant d'avoir terminé les tests.
⓶ Récupérer les deux adresses IP
Nous allons maintenant utiliser la commande qui suit dans chacun des conteneurs.
ip -c a
Nous avons à notre disposition énormément d'informations 😵💫. Nous avons juste besoin des deux adresses IP du réseau qui relie nos deux conteneurs.
Nous pouvons noter quelque part les deux adresses 172.17.0.2
et 172.17.0.3
.
Si vous avez des notions en réseau, vous avez certainement compris en observant les données délivrées par ip
, que les conteneurs sont bien connectés et peuvent théoriquement communiquer. Mais nous allons nous en assurer grâce à des tests.
⓷ Faire communiquer les deux conteneurs
À présent, grâce à la commande ping
, nous allons faire communiquer les conteneurs.
Commençons avec le conteneur dont l'adresse IP est le 172.17.0.2
et faisons le communiquer avec celui dont l'IP est 172.17.0.3
.
ping 172.17.0.3
Ça fonctionne 😏 !
Faites la même chose pour le deuxième conteneur.
ping 172.17.0.2
Ça marche aussi 😁 !
⓷ Conclusion
Nous avons prouvé que les conteneurs sont reliés entre eux via un réseau. Et qu'il est possible de communiquer entre eux grâce à leur adresse IP respective.
Fait intéressant, la liaison réseau se fait automatiquement lors de la création des conteneurs.
Particularité des machines Linux
Si vous utilisez Docker à travers une machine locale qui fonctionne sous Linux, celle-ci sera également reliée au réseau. Il sera donc possible d'accéder aux conteneurs et/ou à la machine locale via ce moyen.
Cependant, ceci n'est pas vrai dans le cas où Docker est utilisé par l'intermédiaire d'un ordinateur qui tourne sous Windows ou macOS.
Testons avec une machine sous Linux
On peut voir que les trois machines (deux conteneurs et la machine locale Linux) sont connectés. Ils ont respectivement les adresses ip 172.17.0.2
, 172.17.0.3
et pour la machine locale 172.17.0.1
.
Comment personnaliser les réseaux ?
On voudra peut-être personnaliser les choses. Par exemple faire en sorte qu'un conteneur ne soit accessible par l'intermédiaire d'aucun réseau 😳. Ou alors connecter deux réseaux entre eux et trois autres entre eux 😰.
La prochaine leçon vous donnera les bases pour atteindre ce but 😃.