web-dev-qa-db-fra.com

quelle est l'utilisation des réseaux Host et NONE dans docker?

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.

9
Here_2_learn

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.

16
Here_2_learn

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
1
mohan08p

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
1
AB.Huang