En essayant de comprendre les réseaux de docker, Docker crée automatiquement les réseaux suivants:
# docker network ls
NETWORK ID NAME DRIVER SCOPE
67b4afa88032 bridge bridge local
c88f997a2fa7 Host Host local
1df2947aad7b none null local
J'ai compris que le pont network représente le réseau docker0 présent dans toutes les installations de Docker, en référence depuis le lien .
Quelqu'un peut-il m'aider à comprendre d'autres réseaux, Host et none , avec des exemples si possible.
Docker by default prend en charge 3 réseaux :
1) Aucun :
Ce mode ne configure aucune adresse IP pour le conteneur et n’a aucun accès au réseau externe ni aux autres conteneurs . Il possède l'adresse de bouclage et peut être utilisé pour l'exécution de travaux par lots.
# docker run -it --network=none ubuntu:14.04 /bin/bash
root@66308c6686be:/# ifconfig
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
#
# docker inspect 66308c6686be | grep -i ipaddr
"SecondaryIPAddresses": null,
"IPAddress": "",
"IPAddress": "",
2) hôte
Dans ce mode container partagera la pile réseau de l’hôte et toutes les interfaces de l’hôte seront disponibles pour le conteneur . Le nom d'hôte du conteneur correspondra au nom d'hôte sur le système hôte.
# docker run -it --net=Host ubuntu:14.04 /bin/bash
root@labadmin-VirtualBox:/# hostname
labadmin-VirtualBox
Même la configuration IP est identique à la configuration IP du système hôte
root@labadmin-VirtualBox:/# ip addr | grep -A 2 eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:b5:82:2f brd ff:ff:ff:ff:ff:ff
inet 10.0.2.15/24 brd 10.0.2.255 scope global eth0
valid_lft forever preferred_lft forever
3: lxcbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default
root@labadmin-VirtualBox:/# exit
exit
Host SYSTEM IP CONFIGURATION
# ip addr | grep -A 2 eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:b5:82:2f brd ff:ff:ff:ff:ff:ff
inet 10.0.2.15/24 brd 10.0.2.255 scope global eth0
valid_lft forever preferred_lft forever
3: lxcbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default
En mode hôte et aucun mode n'est pas configuré directement, mais le réseau de pont par défaut peut être configuré ainsi que créer vos propres réseaux de pont définis par l'utilisateur.
3) Mode pont
C’est le mode réseau par défaut Docker qui permettra la connectivité aux autres interfaces de la machine hôte ainsi qu’aux conteneurs .
# docker run -it --network=bridge ubuntu:14.04 /bin/bash
root@58b0b1f18b2e:/# ifconfig
eth0 Link encap:Ethernet HWaddr 02:42:ac:11:00:0c
inet addr:172.17.0.12 Bcast:0.0.0.0 Mask:255.255.0.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:16 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:2668 (2.6 KB) TX bytes:0 (0.0 B)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
L'accessibilité à d'autres conteneurs est possible en mode pont.
root@58b0b1f18b2e:/# ping 172.17.0.11
PING 172.17.0.11 (172.17.0.11) 56(84) bytes of data.
64 bytes from 172.17.0.11: icmp_seq=1 ttl=64 time=0.143 ms
64 bytes from 172.17.0.11: icmp_seq=2 ttl=64 time=0.050 ms
Connectivité au réseau externe.
root@58b0b1f18b2e:/# ping google.com
PING google.com (216.58.197.46) 56(84) bytes of data.
64 bytes from maa03s20-in-f46.1e100.net (216.58.197.46): icmp_seq=1 ttl=51 time=16.9 ms
Connectivité à la machine hôte
root@labadmin-VirtualBox:~# ip a | grep eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
inet 10.0.2.15/24 brd 10.0.2.255 scope global eth0
root@58b0b1f18b2e:/# ping 10.0.2.15
PING 10.0.2.15 (10.0.2.15) 56(84) bytes of data.
64 bytes from 10.0.2.15: icmp_seq=1 ttl=64 time=0.113 ms
Parallèlement, docker fournit MACVLAN network qui permet de configurer plusieurs adresses de couche 2(MAC) sur une seule interface physique.
Réseau de ponts: Pont est le réseau par défaut dans le menu fixe qui est également appelé docker0. C'est le réseau par défaut qui relie le pare-feu NAT au physique auquel votre hôte est connecté. Mais on s'en fiche, tous les conteneurs s'attacheront à ce réseau et fonctionneront.
Si vous avez des conteneurs en cours d'exécution, vous pouvez inspecter le réseau de passerelle comme suit:
$ docker network inspect bridge
....
"Containers": {
"145a2716d018c6fe8e9f93a81d88afd5a7437f0084ddb170c40761818e6d2f67": {
"Name": "nginx",
"EndpointID": "ea6cfa433f41e21e572f17473c8e5f5e5d82e9f19646e66fe23abda20a3836b8",
"MacAddress": "02:42:ac:11:00:02",
"IPv4Address": "172.17.0.2/16",
"IPv6Address": ""
}
},
...
Remarque: vous pouvez voir cette adresse IP automatique attribuée au conteneur provenant du sous-réseau de configuration IPAM.
Réseau hôte: est un réseau spécial qui ignore la mise en réseau virtuelle du menu fixe et attache le conteneur directement à l'interface hôte. Ce n'est vraiment pas recommandé mais, dans certaines situations, peut améliorer les performances d'un réseau à haut débit et, dans d'autres, vous perdrez peu d'avantages de la conteneurisation.
$ docker container run -it --net=Host nginx:Alpine /bin/bash
Aucun Réseau: est en quelque sorte l'équivalent d'avoir une interface sur votre machine qui ne ressemble à rien, mais nous pouvons créer la nôtre. Le réseau none
ajoute un conteneur à une pile réseau spécifique à un conteneur. Ce conteneur manque d'une interface réseau.
$ docker container run -it --network=none nginx:Alpine /bin/bash
root@8cb783cd4509:/# ip -4 addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1
inet 127.0.0.1/8 scope Host lo
valid_lft forever preferred_lft forever
Supposons que votre image de docker prenne en charge ifconfig, le nom de l'image est "ubuntu/net"
Ensuite, exécutez docker pour Host & none :
Sudo docker run -it --network=Host ubuntu/net
root@localhost:/# ifconfig
docker0 Link encap:Ethernet HWaddr xxxxxxxxxxxxx
inet addr:x.x.x.x Bcast:0.0.0.0 Mask:255.255.0.0
eth0 Link encap:Ethernet HWaddr xxxxxxxxxxxx
inet addr:y.y.y.y Bcast: Mask:255.255.254.0
Sudo docker run -it --network=none ubuntu/net
root@localhost:/# ifconfig
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0