что такое использование сети HOST и NONE в docker?

пытаясь понять сети docker, Docker автоматически создает следующие сети:

# docker network ls 
NETWORK ID          NAME                DRIVER              SCOPE
67b4afa88032        bridge              bridge              local               
c88f997a2fa7        host                host                local               
1df2947aad7b        none                null                local               

понял, что сетевой мост представляет сеть docker0, присутствующую во всех установках Docker, ссылаясь на ссылка.

может кто-нибудь помочь мне в понимании других сетей,хоста и нет, если возможно, с примерами.

3 ответов


Docker by по умолчанию поддерживает 3 Сети:

1) Нет:

режим не будет настраивать IP-адрес для контейнера и не имеет доступа к внешней сети, а также для других контейнеров. Он имеет адрес замыкания на себя и может использоваться для выполнения пакетных заданий.

# 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) хост

в этом режиме контейнер поделится хостом сетевой стек и все интерфейсы с хоста будут доступны контейнеру. Имя хоста контейнера будет соответствовать имени хоста в хост-системе

# docker run -it --net=host ubuntu:14.04 /bin/bash
root@labadmin-VirtualBox:/# hostname
labadmin-VirtualBox

даже конфигурация IP такая же, как IP хост-системы конфигурация

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 

в режиме host и none не настроены напрямую, но по умолчанию Мостовая сеть может быть настроена, а также создать свои собственные пользовательские мостовые сети.

3) Режим Моста

это настройки по умолчанию сетевой режим, который позволит подключиться к другим интерфейсам хост-машины, а также среди контейнеров.

# 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)

доступность к другим контейнерам возможна в режиме моста.

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

подключение к внешней сети.

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

подключение к хост машина!--10-->

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

вместе с этими докер обеспечивает MACVLAN сеть, которая позволяет настроить несколько адресов уровня 2 (MAC) на одном физическом интерфейсе.


предположим, что ваш образ docker поддерживает ifconfig, имя изображения "ubuntu / net"

затем запустите docker для хоста & нет:

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

сетевой мост: Bridge-это сеть по умолчанию в docker, которая также называется docker0. Это сеть по умолчанию, которая соединяется через брандмауэр NAT с физическим, к которому подключен ваш хост. Но, нас это не волнует, так как все контейнеры будут подключаться к этой сети и работать.

если у вас есть какие-либо контейнеры, вы можете проверить сетевой мост как,

$ docker network inspect bridge

....
"Containers": {
        "145a2716d018c6fe8e9f93a81d88afd5a7437f0084ddb170c40761818e6d2f67": {
            "Name": "nginx",
            "EndpointID": "ea6cfa433f41e21e572f17473c8e5f5e5d82e9f19646e66fe23abda20a3836b8",
            "MacAddress": "02:42:ac:11:00:02",
            "IPv4Address": "172.17.0.2/16",
            "IPv6Address": ""
        }
    },

...

Примечание: Вы можете увидеть, что автоматический IP-адрес, назначенный контейнеру из подсети конфигурации IPAM.

Локальная Сеть: - это специальная сеть, которая пропускает виртуальную сеть docker и прикрепляет контейнер непосредственно к интерфейсу хоста. Это действительно не рекомендуется, но в некоторых ситуациях может улучшить производительность сети с высокой пропускной способностью, а в других вы потеряете несколько преимуществ контейнеризации.

$ docker container run -it --net=host nginx:alpine /bin/bash

нет Сеть: это своего рода эквивалент наличия интерфейса на вашей машине, который ни к чему не привязан, но мы можем создать свой собственный. The none сеть добавляет контейнер в сетевой стек, специфичный для контейнера. Этому контейнеру не хватает сетевого интерфейса.

$ 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