meta données pour cette page
  •  

Ceci est une ancienne révision du document !


Dans le réseau docker, les conteneurs peuvent communiquer entre eux et aussi avec le monde extérieur par la machine hôte. Cette mise en réseau nécessite une couche supplémentaire d'isolation de conteneur. Il permet de créer des applications docker qui fonctionne ensemble de manière sécurisée.
A l'installation de docker, l'interface réseau docker0 est crée. Chaque nouveau conteneur Docker est automatiquement connecté à ce réseau, sauf si un réseau personnalisé est spécifié.
Cinq modes de fonctionnement réseau sous formes de pilotes sont principalement présents. L'interface réseau est consultable :

# ip addr show docker0

Par defaut docker0 correspond à 172.17.0.1 et est configurable

Bridge

Le réseau bridge est le type de réseau par défaut et le plus couramment utilisé. Il est limité aux conteneurs d'un hôte unique exécutant le même moteur hôte Docker. Les conteneurs qui utilisent ce driver, ne peuvent communiquer qu'entre eux, cependant ils ne sont pas accessibles depuis l'extérieur.
Ce réseau bridge permet de fournir un réseau, 172.17.0.0/16 par défaut, sur lequel seront connectés les conteneurs, ainsi qu’une passerelle par défaut, 172.17.0.1, gérée par l’ordinateur sur lequel est installé Docker pour accéder au reste du réseau et éventuellement à Internet.
Si on démarre un premier conteneur C1, on peut voir l’adresse IP de ce deuxième conteneur sera attribué dynamiquement et automatiquement à l'adresse suivant la gateway 172.17.0.2
Si nous démarrons un deuxième conteneur C2, l'adresse IP sera 12.17.0.3

{{:docker:docker_reseau_1.png?nolink&400|

Pour que les conteneurs sur le réseau bridge puissent communiquer ou être accessibles du monde extérieur, un mappage de port doit être effectué (PAT).

Host

Ce type de réseau permet aux conteneurs d'utiliser la même interface réseau que l'hôte. Il supprime donc l'isolation réseau entre les conteneurs et seront par défaut accessibles de l'extérieur. De ce fait, il prendra la même IP que la machine hôte.

Sa simplicité de configuration permet d'obtenir un accès rapide aux réseaux locaux par les outils d'inspection réseau et les applications qui doivent scanner les réseaux locaux.

Ce mode ne fonctionne nativement que sur linux. Sur macOS et Windows, Docker fonctionne à travers une machine virtuelle légère. Le mode Host liera donc le conteneur à la VM Docker, et non aux appareils MacOS ET Windows directement. docker:hyt.png

Overlay

Ce réseau de superposition permet aux services swarm de communiquer entre eux. Il est utilisé lorsque les conteneurs s'exécutent sur différents hôtes Docker ou lorsque les services Swarm sont formés par plusieurs applications.
. Le réseau en superposition utilise VXLAN sur un réseau sous-jacent. Les conteneurs faisant partie de Overlay Network peuvent communiquer avec des conteneurs, quel que soit l’hôte. Les conteneurs faisant partie du réseau de superposition se voient s’ils se trouvent sur le même réseau L2.
Chaque conteneur du réseau de superposition reçoit deux adresses IP. First IP permet la communication entre les conteneurs d’un hôte à l’autre. La seconde adresse IP est mappée sur le point de terminaison VXLAN-VTEP et contient toutes les données réelles entre les hôtes.

None

Ce pilote désactive tout le réseau.

Macvlan

L'utilisation du driver macvlan est parfois le meilleur choix lorsque l'utilisation d'applications doivent être directement connectées au réseau physique. Le driver Macvlan nous permet d'attribuer une adresse MAC à un conteneur, le faisant apparaître comme un périphérique physique sur un réseau. Le moteur Docker route le trafic vers les conteneurs en fonction de leurs adresses MAC.

Commande

L'interface réseau :

# ip addr show docker0

Lister les interfaces réseaux :

docker network ls

Caractéristique d'une interface :

docker inspect [NETWORK ID]

Sources :
https://devopssec.fr/article/fonctionnement-manipulation-reseau-docker
https://roygeagea.github.io/docker-tutorials/Networking/
https://connect.ed-diamond.com/linux-pratique/lphs-052/le-reseau-dans-docker