Какая польза от сети HOST и NONE в докере?
Пытаясь понять сети 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 по умолчанию поддерживает 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 по умолчанию, который позволяет подключаться к другим интерфейсам хост-машины, а также к контейнерам.
# 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
Подключение к хост-машине
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) на одном физическом интерфейсе.
Мостовая сеть: Мост является сетью по умолчанию в докере, которая также называется 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 container run -it --net=host nginx:alpine /bin/bash
Нет Сеть: это своего рода эквивалент наличия интерфейса на вашей машине, который ни к чему не привязан, но мы можем создать свой собственный. 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
Предположим, ваш образ докера поддерживает ifconfig, имя изображения - "ubuntu/net"
Затем запустите docker для 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