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.
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
.
- Un réseau
testnetwork
est créé avec le driverbridge
. - Un conteneur
c1
est lancé en arrière-plan, il est attaché au réseautestnetwork
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
:
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
.
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
.
Le détail d'un réseau peut être affiché avec la commande docker network inspect
.
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
.