🐳 Docker сетевое взаимодействие 101

by itisgood

Давайте изучим Docker сети…

В докере в основном пять сетей – bridge, host, overlay, none и macvlan.

Bridge  является сетью по умолчанию в Docker.

Введение в эти сети было дано в моей предыдущей статье об архитектуре Docker.

Мы раньше это разобрали тут:

🐳 Архитектура Docker и ее компоненты для начинающих

В этой статье я покажу вам практическую часть Docker сетей.

Вы узнаете, как вы можете проверить информацию о своей Docker сети, как подключиться к сети, как создать свою сеть и многое другое.

Итак, начнем.

Всякий раз, когда вы запускаете контейнер Docker, сетевой контейнер по умолчанию для моста docker0 связывается с контейнером, если не указана какая-либо другая сеть.

Например, когда я запускаю команду ifconfig, вы получите подробную информацию о сети типа моста docker0 вместе с другими сетевыми данными.

$ ifconfig

docker0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500

inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255

ether 02:42:f6:59:4a:5f  txqueuelen 0  (Ethernet)

RX packets 0  bytes 0 (0.0 B)

RX errors 0  dropped 0  overruns 0  frame 0

TX packets 0  bytes 0 (0.0 B)

TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0


enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

inet 10.0.2.15  netmask 255.255.255.0  broadcast 10.0.2.255

inet6 fe80::763e:c0b4:14df:b273  prefixlen 64  scopeid 0x20<link>

ether 08:00:27:68:64:9a  txqueuelen 1000  (Ethernet)

RX packets 2157  bytes 2132896 (2.1 MB)

RX errors 0  dropped 0  overruns 0  frame 0

TX packets 952  bytes 151610 (151.6 KB)

TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0


enp0s8: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

inet 192.168.56.102  netmask 255.255.255.0  broadcast 192.168.56.255

inet6 fe80::20a:6c57:839d:2652  prefixlen 64  scopeid 0x20<link>

ether 08:00:27:53:45:82  txqueuelen 1000  (Ethernet)

RX packets 10597  bytes 1497146 (1.4 MB)

RX errors 0  dropped 0  overruns 0  frame 0

TX packets 12058  bytes 1730219 (1.7 MB)

TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0


lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536

inet 127.0.0.1  netmask 255.0.0.0

inet6 ::1  prefixlen 128  scopeid 0x10<host>

loop  txqueuelen 1000  (Local Loopback)

RX packets 1196  bytes 105396 (105.3 KB)

RX errors 0  dropped 0  overruns 0  frame 0

TX packets 1196  bytes 105396 (105.3 KB)

TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Листинг сетей

Запустите команду ls, чтобы проверить все сети, работающие на текущем хосте.

Как видите, в настоящее время существует семь сетей, включая bridge, host и none , которые создаются автоматически при установке Docker.

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

$ docker network ls

NETWORK ID          NAME                DRIVER              SCOPE

fec751a6ae21        bridge              bridge              local

21943b20735d        docker_gwbridge     bridge              local

f51d1f3379e0        host                host                local

ppp8i7tvrxa0        ingress             overlay             swarm

ba68f73abeed        mean-app_default    bridge              local

d466e75d86fa        mean_default        bridge              local

5e5d9a192c00        none                null                local

Проверка сети

Вы можете запустить команду inspect, чтобы получить все подробности о типе сети.

Команда предоставляет информацию о сети, которая включает в себя имя, идентификатор, время создания, область действия, драйвер, сведения о конфигурации, такие как адрес подсети и шлюза.

Я также сообщу детали контейнера, если какой-либо контейнер запущен и работает.

В противном случае команда вернет пустую строку.

$ docker network inspect bridge

[

{

"Name": "bridge",

"Id": "fec751a6ae21f20a06cdc6eb823e773caec063b6bf9a388016594e59fd1db475",

"Created": "2019-08-01T10:30:27.595054009-04:00",

"Scope": "local",

"Driver": "bridge",

"EnableIPv6": false,

"IPAM": {

"Driver": "default",

"Options": null,

"Config": [

{

"Subnet": "172.17.0.0/16",

"Gateway": "172.17.0.1"

}

]

},

"Internal": false,

"Attachable": false,

"Ingress": false,

"ConfigFrom": {

"Network": ""

},

"ConfigOnly": false,

"Containers": {},

"Options": {

"com.docker.network.bridge.default_bridge": "true",

"com.docker.network.bridge.enable_icc": "true",

"com.docker.network.bridge.enable_ip_masquerade": "true",

"com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",

"com.docker.network.bridge.name": "docker0",

"com.docker.network.driver.mtu": "1500"

},

"Labels": {}

}

]

Создать сеть

Используя команду create, вы можете создать свою собственную сеть.

Вы должны упомянуть тип драйвера с флагом –driver, в приведенном ниже примере я использую тип моста.

$ docker network create --driver bridge itisgood_network

08e0da91f6de6c640b1b6f8a8602973f310b8ee9b04961389b7dfda842ccc409
Запустите команду ls, чтобы проверить, создана ли сеть.
$ docker network ls

NETWORK ID          NAME                DRIVER              SCOPE

fec751a6ae21        bridge              bridge              local

21943b20735d        docker_gwbridge     bridge              local

08e0da91f6de         itisgood_network   bridge              local

f51d1f3379e0        host                host                local

ppp8i7tvrxa0        ingress             overlay             swarm

ba68f73abeed        mean-app_default    bridge              local

d466e75d86fa        mean_default        bridge              local

5e5d9a192c00        none                null                local
Теперь я буду запускать Docker-контейнер в сети, которую я создал.
Я запускаю простой серверный Apache в приведенной ниже команде.
$ docker run -it -d --network=itisgood_network httpd

38a0b0646da1a0045afcf7aa0cd6228b851f74107a6718bb19d599e896df1002
Запустите команду inspect для проверки всей информации о сети itisgood_network .
На этот раз вы можете найти детали контейнера в этой проверке вывода; название контейнера determined_dubinsky
$ docker network inspect itisgood_network

[

{

"Name": "itisgood_network",

"Id": "08e0da91f6de6c640b1b6f8a8602973f310b8ee9b04961389b7dfda842ccc409",

"Created": "2019-09-03T13:56:36.244295204-04:00",

"Scope": "local",

"Driver": "bridge",

"EnableIPv6": false,

"IPAM": {

"Driver": "default",

"Options": {},

"Config": [

{

"Subnet": "172.21.0.0/16",

"Gateway": "172.21.0.1"

}

]

},

"Internal": false,

"Attachable": false,

"Ingress": false,

"ConfigFrom": {

"Network": ""

},

"ConfigOnly": false,

"Containers": {

"38a0b0646da1a0045afcf7aa0cd6228b851f74107a6718bb19d599e896df1002": {

"Name": "determined_dubinsky",

"EndpointID": "30d252720e0f381ba01d6f5414525dff8587abcf3c4920100f112898a52c8a23",

"MacAddress": "02:42:ac:15:00:02",

"IPv4Address": "172.21.0.2/16",

"IPv6Address": ""

}

},

"Options": {},

"Labels": {}

}

]

Отключить сеть

Чтобы отключить сеть от контейнера, выполните команду, приведенную ниже.

Вам необходимо указать имя сети и имя контейнера в команде disconnect.

$ docker network disconnect itisgood_network determined_dubinsky
Эта сеть больше не будет работать с контейнером determined_dubinsky; поле контейнера будет пустым.
$ docker network inspect itisgood_network

[

{

"Name": "itisgood_network",

"Id": "08e0da91f6de6c640b1b6f8a8602973f310b8ee9b04961389b7dfda842ccc409",

"Created": "2019-09-03T13:56:36.244295204-04:00",

"Scope": "local",

"Driver": "bridge",

"EnableIPv6": false,

"IPAM": {

"Driver": "default",

"Options": {},

"Config": [

{

"Subnet": "172.21.0.0/16",

"Gateway": "172.21.0.1"

}

]

},

"Internal": false,

"Attachable": false,

"Ingress": false,

"ConfigFrom": {

"Network": ""

},

"ConfigOnly": false,

"Containers": {},

"Options": {},

"Labels": {}

}

]
Чтобы создать сеть, отличную от моста (bridge), необходимо указать имя драйвера, отличное от bridge.
Чтобы создать сеть overlayзапустите команду указанную ниже:
$ docker network create --driver overlay  itisgood_network_2

ynd2858eu1cngwhpc40m3h1nx

geekflare@manager1:~$ docker network ls

NETWORK ID          NAME                DRIVER              SCOPE

fec751a6ae21        bridge              bridge              local

21943b20735d        docker_gwbridge     bridge              local

08e0da91f6de        itisgood_network   bridge              local

f51d1f3379e0        host                host                local

ppp8i7tvrxa0        ingress             overlay             swarm

ba68f73abeed        mean-app_default    bridge              local

d466e75d86fa        mean_default        bridge              local

5e5d9a192c00        none                null                local

ynd2858eu1cn        itisgood__network_2   overlay             swarm
Чтобы создать сеть host упомяните хост с флагом -driver.
В приведенном ниже примере возвращается ошибка, поскольку разрешен только один экземпляр сети host, который уже работал ранее.
Таким образом, эта команда не будет создавать другую сеть хоста.
$ docker network create --driver host  itisgood_network_3

Error response from daemon: only one instance of "host" network is allowed

Заключение

Это все о Docker сетях и о том, как вы можете подключаться, отключаться, создавать, проверять эти сети.

Попробуйте эти команды, чтобы ознакомиться с сетью Docket.

 

 

You may also like

Leave a Comment