Давайте изучим 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
$ 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 run -it -d --network=itisgood_network httpd
38a0b0646da1a0045afcf7aa0cd6228b851f74107a6718bb19d599e896df1002
itisgood_network
.$ 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": {}
}
]
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. $ docker network create --driver host itisgood_network_3
Error response from daemon: only one instance of "host" network is allowed
Заключение
Это все о Docker сетях и о том, как вы можете подключаться, отключаться, создавать, проверять эти сети.
Попробуйте эти команды, чтобы ознакомиться с сетью Docket.