Docker: настройка сети

Сетевые драйверы

Сетевая подсистема 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