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.

Lancer deux conteneurs

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

Trouver l'IP des 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

Utiliser la commande ping pour communiquer avec le premier conteneur

Ç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

Utiliser la commande ping pour communiquer avec le premier conteneur

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