Docker Network - uniqcle/DevOps GitHub Wiki
ip a # посмотреть сетевые интерфейсы и IP адреса им присвоенные
docker network ls # типы сетей в docker
тип сети по умолч. 172.17.0.1/16
Контейнеры имеют доступ наружу. Возможно сетевое взаимодействие между контейнерами по ip-адресам (только если сеть по-умолч.), если своя сеть создана то по DNS именам (--name -NAME
)
docker network create --driver bridge MyName # создали сеть
docker run --net MyName nginx # запустили контейнер в сети
когда контейнеры создаются, они получают ip адрес хоста. Соответственно, чтобы подключиться, нужно просто указать ip адрес хоста и порт. Сетевое устройство хоста переносится в контейнер. Не может быть больше одной сети с типом host.
docker run nginx --network=host # запуск образа с типом сети host
Никак не подключается к контейнеру извне. Нет IP. Не сможет подключиться и локально. Но можем зайти на него и запустить к-л программы. Не может быть больше одной сети с типом null.
docker network create --driver null TestHost # Error response from daemon: only one instance of "null" network
docker run nginx --network=none # запуск образа с типом сети none
Тип сети macvlan и ipvlan
macvlan
Сервер eth0: 172.16.10.2
Докер контейнер 1 eth0: 172.16.10.21
Докер контейнер 2 eth0: 172.16.10.22
mac адреса разные
ipvlan
Сервер eth0: 172.16.10.3
Докер контейнер 1 eth0: 172.16.10.31
Докер контейнер 2 eth0: 172.16.10.32
mac адреса у всех одинаковые
docker network create myNet # по умолч. создает с драйвером bridge
docker network create --driver host myNetHost # должен быть только 1 host
docker network create --driver null myNetNull # должен быть только 1 null
docker network inspect myNet # узнать что-то о сети
# создаем свою сеть со своим ip
docker network create -d bridge --subnet 192.168.10.0/24 --gateway 192.168.10.1 myNet192
# удаление
docker network rm myNet myNet192
Создали сеть
docker network create --driver bridge Test3
Просмотр инфо о сети
docker network ls
docker network inspect <Имя сети или ID>
ip адрес сети
"Config": [
{
"Subnet": "172.20.0.0/16",
"Gateway": "172.20.0.1"
}
]
Создаем свою сеть, со своими ip адресами, где
Current
имя сети
docker network create -d bridge --subnet 192.168.10.0/24 --gateway 192.168.10.1 Current
Создаем контейнеры в сети по дефолту
# ставим утилиту для анализа сетей в сети по дефолту.
docker run --rm -it --name container1 nicolaka/netshoot /bin/bash
docker run --rm -it --name container2 nicolaka/netshoot /bin/bash
# узнаем ip контейнеров
ip a
# ping по ip друг друга
172.17.0.4
Создаем сеть и контейнеры в этой же сети
docker network create Test
docker run --rm -it --name container1 --net Test nicolaka/netshoot /bin/bash #172.22.0.2
docker run --rm -it --name container2 --net Test nicolaka/netshoot /bin/bash #172.22.0.3
ping container1
ping container2
Создаем 3й контейнер в другой сети и переносим его в сеть Test
docker run --rm -it --name container3 nicolaka/netshoot /bin/bash # 172.17.0.2
docker network connect Test container3 # теперь в container3 172.22.0.4
Отключаемся от старой сети container3
docker inspect container3 # Используем "NetworkID": "9fce37...
docker network disconnect 9fce37... container3