Виды сетей у докера(Docker Network Types)
Closed Network/ None Network - контейнеры находясь в такой сети закрыты от и для внешнего мираBridge Network - вид по-умолчанию, где создается мост, через который контейнеры могут общаться с внешним миром и между собой на поточном хосте. В каждом контейнере созадется свой личный сетевой интерфейс, который соединяется с мостом для общений.
Host Network - прямой доступ на сетевой интерфейс хозяйской машины, как на родной
Overlay Network - тип сети, который позволяет находиться контейнерам в одной сети, не смотря на то, что они между собой запущены на разных хостах.
Посмотреть доступные сети докера на хосте. По умолчанию будут следующие:
$ docker network ls NETWORK ID NAME DRIVER SCOPE 77bf6b8ff5cf bridge bridge local 9aac4cefdaf1 host host local b8aa8b4a699f none null local
Closed Network/ None Network
Пример как запустить изолированный конртейнер:
$ docker run -d --net none busybox sleep 1000Внутри у такого контейнера только один сетевой интерфейс lo, который лупбек - тоесть это только локалхост.
Bridge Network
Внутри у контейнера, который по умолчанию подключен к bridge сети, уже два сетевых интерфейса lo и eth0, которая уже локальная сеть типа Mask: 255.255.0.0Но контейнеры с разных сетей типа мост не могут уже иметь доступа к друг другу. Можем создать еще одну сеть типа мост:
$ docker network create --driver bridge my_bridge_network
$ docker network inspect my_bridge_network
[
{
"Name": "my_bridge_network",
...
"IPAM": {
"Driver": "default",
"Config": [
{
"Subnet": "172.18.0.0/16",
"Gateway": "172.18.0.1"
}
]
},
...
}
]
$ docker run -d --name container_3 --net my_bridge_network busybox sleep 1000
Но мы можем подключать контейнеры к нескольким сетям, так контейнер который запущен был в другой сети сможет общаться с контейнера с сети по умолчанию
$ docker network connect bridge container_3Вот так контейнер получил, доступ к контейнерам с другой сети. Так он получил еще +один сетевой интерфейс eth1.
Ну и когда доступ больше предоставлять не стоит, то
$ docker network disconnect bridge container_3Так сетевой интерфейс eth1 удаляется у контейнера.
Следующя информация может быть уже устаревшей, но принцип остается следующим.
Docker всегда создает дополнительный сетевой интерфейс в системе с именем bridge0(скорее всего на момент 11.02.2017 он уже с именем docker0).
Этот интерфейс является ничем иным как мостом(bridge) или виртуальным свитчером - устройство которое перебрасывает пакеты между двумя устройствами для коммуникации между ними.
Чтобы исследовать любой сетевой мост в системе нужна следующая утилита:
# apt-get install bridge-utils # yum install bridge-utils
Посмотрим что он нам раскажет о нашем мосте:
# brctl show docker0 bridge name bridge id STP enabled interfaces docker0 8000.56847afe9799 noСейчас мы не видим ни одного интерфейса подключенного к мосту - это означает, что у нас нет запущенных образов:)
Наваляем побыстрому образок:
echo "\ #Test for networking module \ FROM ubuntu:15.04 \ RUN apt-get update && apt-get install -y iputils-ping traceroute \ ENTRYPOINT /bin/bash " > Dockerfile # # docker build -t="net-img" .И запустим с него два контейнера
# docker run -it --name=net1 net-img #Ctrl+P+Q # docker run -it --name=net2 net-img #Ctrl+P+Q # # docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d37d347f84d8 net-img:latest "/bin/bash" 0 minutes ago Up 0 minutes c0e85b69ecce net-img:latest "/bin/bahs" 1 minutes ago Up 1 minutesВураля и у нас появились два дополнительных сетевых интерфейса, которые завязаны на наш докеровский мост:
# brctl show docker0
bridge name bridge id STP enabled interfaces
docker0 8000.56847afe9799 no veth095066e
vethe7516ef
# ifconfig
...
veth095066e Link encap:Ethernet HWaddr ...
...
vethe7516ef Link encap:Ethernet HWaddr ...
Virtual Ethernet - имя интерфейсов.
Host Network
Наименее защищенная сеть, такие контейнеры называются\ открытыми. Они получают доступ на пряму к сетевым интерфесам хостовой машины.
Комментариев нет:
Отправить комментарий