Сетевые драйверы
Сетевая подсистема Docker является подключаемой с использованием драйверов.
Несколько драйверов существуют по умолчанию и предоставляют основные сетевые функции:
bridge: сетевой драйвер по умолчанию.
Если вы не указываете драйвер, это тип сети, которую вы создаете.
Мостовые сети обычно используются, когда ваши приложения работают в автономных контейнерах, которые должны взаимодействовать.
host: для автономных контейнеров, удаляет сетевую изоляцию между контейнером и Docker-хостом.
Хост доступен только для служб swarm в Docker версии 17.06 и выше.
overlay: overlay сети соединяют несколько демонов Docker вместе и позволяют сервисам Swarm связываться друг с другом.
Вы также можете использовать overlay сети для облегчения связи между сервисом Swarm и автономным контейнером.
Или между двумя автономными контейнерами на разных демонах Docker.
Эта стратегия устраняет необходимость выполнять маршрутизацию на уровне ОС между этими контейнерами.
macvlan: сети Macvlan позволяют назначать MAC-адрес контейнеру, делая его физическим устройством в вашей сети.
Демон Docker направляет трафик в контейнеры по их MAC-адресам.
Использование драйвера macvlan иногда является лучшим выбором при работе с устаревшими приложениями.
Приложениям, которые ожидают прямого подключения к физической сети, а не маршрутизации через сетевой стек хоста Docker.
none: для этого контейнера отключит все сети.
Обычно используется в сочетании с пользовательским сетевым драйвером. Ни один не доступен для swarm услуг.
Сетевые плагины: вы можете устанавливать и использовать сторонние сетевые плагины с Docker.
Эти плагины доступны в Docker Hub или у сторонних поставщиков.
Обзор сетевого драйвера
bridge подходят, когда вам нужно несколько контейнеров для связи на одном хосте Docker.
host подходят, когда сетевой стек не должен быть изолирован от хоста Docker, но вы хотите, чтобы другие аспекты контейнера были изолированы.
overlay подходят, когда вам нужны контейнеры, работающие на разных хостах Docker, или нескольких приложений, работающих вместе с сервисами Swarm.
macvlan подходят, когда вам нужны контейнеры, чтобы они выглядели как физические хосты в вашей сети, каждый из которых имеет уникальный mac адрес.
Сторонние сетевые плагины позволяют интегрировать Docker со специализированными сетевыми стеками.
Вывести список сетей:
docker network ls
NETWORK ID NAME DRIVER SCOPE
54b6ffe3955d bridge bridge local
bde168a59997 host host local
7154f6acc15b none null local
ee47b212c1eb pd_default bridge local
fff6ee9d1f88 web_default bridge local
Где:
NETWORK ID — Уникальный идентификатор сети.
NAME — Имя сети.
DRIVER — Драйвер сети.
SCOPE — Область использования.
Создание сетей(справка):
docker network create —help
Usage: docker network create [OPTIONS] NETWORK
Create a network
Options:
—attachable Enable manual container attachment
—aux-address map Auxiliary IPv4 or IPv6 addresses used by Network driver (default map[])
—config-from string The network from which copying the configuration
—config-only Create a configuration only network
-d, —driver string Driver to manage the Network (default «bridge»)
—gateway strings IPv4 or IPv6 Gateway for the master subnet
—ingress Create swarm routing-mesh network
—internal Restrict external access to the network
—ip-range strings Allocate container ip from a sub-range
—ipam-driver string IP Address Management Driver (default «default»)
—ipam-opt map Set IPAM driver specific options (default map[])
—ipv6 Enable IPv6 networking
—label list Set metadata on a network
-o, —opt map Set driver specific options (default map[])
—scope string Control the network’s scope
—subnet strings Subnet in CIDR format that represents a network segment
Создание сети (типа сетевой мост):
docker network create network_name1
docker network create —driver=bridge network_name2
docker network create —subnet 10.0.3.0/24 —gateway=10.0.3.1 —ip-range 10.0.3.0/24 —driver=bridge —label=my_network network_name3
Создание сети (типа macvlan):
docker network create -d macvlan —subnet=10.0.2.0/24 —gateway=10.0.2.1 -o parent=enp0s3 network_name4
docker network ls | grep network_name
cac21f9f673d network_name1 bridge local
4c884b175844 network_name2 bridge local
93c8fc1c3c01 network_name3 bridge local
640a12029ce8 network_name4 macvlan local
Запуск контейнера с привязкой к сети:
docker run -it —name=debian_network_name2 —net network_name2 debian /bin/bash
docker run -it —name=debian_network_name3 —net network_name3 —ip=10.0.3.12 debian /bin/bash
Отключение\подключение сети к контейнеру:
docker network disconnect NETWORK_ID CONTAINER_ID
docker network connect NETWORK_ID CONTAINER_ID
Получим информацию о сети (network_name3):
docker network inspect network_name3
Удаление сети:
docker network rm NETWORK_ID