Docker: Networking - работа с сетью

Материал основан на следующей статье:

https://linux-notes.org/rabota-s-setju-networking-v-docker/

Сетевая Docker подсистема подключается, используя драйверы. По умолчанию существует несколько драйверов которые обеспечивают основные сетевые функции:

  • bridge: Мост, — это сетевой драйвер по умолчанию. Бридж сеть используется, когда ваши приложения запускаются в автономных контейнерах, которые должны взаимодействовать между собой (Наглядный пример Nginx + MySQL).
  • host: Хост, — это сетевой драйвер для автономных контейнеров (удаленная сетевая изоляция между контейнером и Docker хостом). Данный драйвер доступен только для docker-swarm с поддержкой Docker 17.06 и выше.
  • overlay/overlay2: Оверлей (Наложенная сеть), — это сетевой драйвер для соединения несколько демонов Docker между собой и которые позволяют docker-swarm службам взаимодействовать друг с другом. Вы также можете использовать оверлейные сети для облегчения связи между docker-swarm и автономным контейнером или между двумя отдельными контейнерами на разных Docker демонах. Эта стратегия устраняет необходимость выполнения маршрутизации на уровне ОС между этими контейнерами.
  • macvlan: Маквлан,- это сетевой драйвер, который позволяют назначать MAC-адрес контейнеру, делая его отображаемым как физическое устройство в вашей сети. Docker демон направляет трафик на контейнеры по их MAC-адресам. Использование macvlan драйвера иногда является лучшим выбором при работе с устаревшими приложениями, которые ожидают, что они будут напрямую подключены к физической сети.
  • none: Нон,- это сетевой драйвер, который умеет отключать всю сеть для контейнеров. Обычно используется в сочетании с пользовательским сетевым драйвером.
  • Network plugins: Вы можете установить и использовать сторонние сетевые плагины с Docker контейнерами. Эти плагины доступны в Docker Store или у сторонних поставщиков услуг.
  • Мост (bridge) лучше всего использовать для связи нескольких контейнеров на одном и том же Docker хосте. Можно юзать docker-compose и выбирать данную сеть для такой связки.
  • Хост (host) сети лучше всего юзать, когда сетевой стек не должен быть изолирован от хоста Docker, но вы хотите, чтобы другие аспекты контейнера были изолированы.
  • Овердейная сеть (overlay/overlay2) или наложение сетей лучше всего заюзать, когда вам нужны контейнеры, работающие на разных Docker хостах для связи, или, когда несколько приложений работают вместе, используя docker-swarm.
  • Маквлан (macvlan) сети лучше всего использовать, когда вы переходите с VM/дедикейта на контейнеры или хотите, чтобы ваши контейнеры выглядели как физические хосты в вашей сети, каждый с уникальным MAC-адресом.
  • Сторонние сетевые плагины позволяют интегрировать Docker со специализированными сетевыми стеками.

Просмотреть Network в Docker

Чтобы проверить какие сети имеются, выполните следующую команду:

$ docker network ls

Где:

  • NETWORK ID — при создании сети, ей присваивается ID. Так это, собственно, идентификатор сети.
  • NAME — имя сети. Можно задать произвольное имя.
  • DRIVER — используемый драйвер для созданной сети.
  • SCOPE — где используется.

Создать Network в Docker

Давайте создания сети выполните следующую команду:

$ docker network create --driver=bridge NAME_NETWORK

Где:

  • NAME_NETWORK — имя сети.

Можно создавать bridge, overlay, host, none или кастомный network-инг. По дефолту, — создается мост.

При создании сети можно задавать дополнительные параметры, с ними можно ознакомиться:

$ docker network create --help

Подключить/Отключить контейнер(ы) к/от сети в Docker

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

$ docker network connect YOUR_NETWORK YOUR_CONTAINER

Где:

  • YOUR_NETWORK — сеть.
  • YOUR_CONTAINER — контейнер.

Для отключения служит обратная команда:

$ docker network disconnect YOUR_NETWORK YOUR_CONTAINER

Инспектор Network в Docker

Можно получить подробную информацию о той или иной сети, например:

$ docker network inspect NAME_NETWORK

Где:

  • NAME_NETWORK — имя сети.

Так же, можно получить инфу со следующей команды:

$ docker info

Удаление Network в Docker

Для удаления сети служит следующая команда:

$ docker network rm YOUR_NETWORK

Или если нужно удалить все созданные сети, которые не используются:

$ docker network prune