Skip to main content

Le réseau

Le réseau avec docker network

Docker permet une gestion avancée du réseau, entre un conteneur et la machine hôte, mais aussi entre les conteneurs.

Les réseaux docker peuvent être gérés avec la commande docker network.

docker network ls # lister les réseaux
docker network create mon_reseau # créer un réseau
docker network rm mon_reseau # supprimer un réseau

Il existe plusieurs types de réseaux docker, identifiés avec l'argument --driver.

  • Bridge (pont)
    Utilisé par défaut, c'est un réseau interne à docker.
    Les conteneurs peuvent communiquer entre eux sur ce réseau.
  • Host
    Le conteneur partage directement le réseau de l'hôte. Il n'est pas isolé et utilise l'adresse IP de l'hôte. Dans ce cas, la redirection de port n'est pas nécessaire.
  • None
    Aucun réseau, isolation totale.

Docker propose par défaut un réseau pour chacun de ses 3 types. 

image.png

Le réseau par défaut est bridge.

Driver Bridge

Ci-dessous un exemple avec l'image busybox qui embarque quelques utilitaires réseau, dont la commande ping

image.png

  • Un réseau testnetwork est créé avec le driver bridge.
  • Un conteneur c1 est lancé en arrière-plan, il est attaché au réseau testnetwork avec --network=testnetwork.
  • Un deuxième conteneur c2 est lancé. Les deux conteneurs peuvent se pinguer.

Chaque conteneur est visible dans le réseau à partir de son nom défini avec --name.

Le réseau bridge par défaut de Docker isole les conteneurs entre-eux. Il est nécessaire de créer un autre réseau avec le driver bridge pour répéter l'expérience ci-dessus.

Un conteneur situé en dehors du réseau testnetwork ne peut pas pinguer c1 et c2 :

image.png

Driver Host

Un conteneur lancé avec le driver host n'est pas isolé du réseau de l'hôte. Les ports ouverts sur le conteneur sont ouverts sur l'hôte.

Par exemple, un conteneur lancé à partir de l'image  🔗 strm/helloworld-http écoutera à partir du port 80 de l'hôte, même sans redirection avec  --port.

image.png

image.png

Le nom d'hôte du conteneur est affiché. Il est hérité depuis la machine hôte.

Gestion des réseaux

Il est possible de connecter un conteneur à un réseau existant avec docker network connect.

image.png

Le détail d'un réseau peut être affiché avec la commande docker network inspect.

image.png

Un réseau bridge embarque une configuration IP, de la même manière qu'un réseau local.
Le réseau est défini par un subnet et il possède une IP gateway attribuée à la machine hôte.

Dans l'exemple ci-dessus, le réseau reseau2 possède le subnet 172.19.0.0 avec un masque de sous-réseau 255.255.0.0 (ou /16).
L'adresse IP de la machine hôte est 172.19.0.1 et celle du conteneur c5 est 172.19.0.2.