Docker: Networking - работа с сетью
Общие сведения
Сетевая 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