Visitors have accessed this post 50869 times.

Работа с сетью в Docker

14
0
50869
6 ноября 2020 11:06
Автор: Rebrain Me
Docker

Visitors have accessed this post 50869 times.

В Docker, как правило, работа с сетью не представляет из себя больших сложностей — она неплохо работает и по умолчанию. Но, как и в подавляющем большинстве случаев, полезно понимать, как все устроено «под капотом».

Разбираемся с сетью в Docker

Для начала давайте посмотрим, как настроена сетевая модель Docker по умолчанию. То есть, когда вы просто создаете контейнер, ему присваивается адрес и есть возможность для доступа в интернет без всяких дополнительных усилий с вашей стороны.

Для этого в Docker используется сетевой мост (bridge), обычно его имя в системе —  docker0. Для каждого контейнера создается свой виртуальный сетевой интерфейс, он и подключается к сети при помощи bridge.

На схеме подключение выглядит следующим образом:

| Приложение -> ethernet -> | -> virtual ethernet -> bridge -> ethernet/wifi interface |

| Контейнер                 | Хост                                                     |

Метод сетевого моста достаточно универсален для виртуальных машин, так как он простой и удобный.

Но в некоторых случаях вам могут понадобиться и другие методы для сетевого подключения или, иначе говоря, networking в docker.

В Docker по умолчанию представлены сетевые драйвера:

  • bridge — о нем мы говорили чуть ранее.
  • macvlan — контейнер подключается при помощи виртуального интерфейса, подключенного к физическому. При этом у каждого из них есть свой MAC-адрес.
  • host — как видно из названия, в этом случае подключение происходит к сети хоста. Это значит, что контейнер может общаться с сервисами, которые запущены на локальном интерфейсе так, как если бы он был запущен прямо на хосте.
  • none — означает, что сети нет.

Еще стоит отметить, что у Docker существуют дополнительные плагины, с которыми можно расширить этот список и его возможности.

Команды для работы с сетью в Docker

Для работы с сетью Docker используется команда network.

Чтобы просмотреть network в docker введите docker network ls. И вы сможете увидеть в форме списка все существующие сети  Docker.

Для получения расширенной информации о сети используется команда docker network inspect (инспектор network в Docker).

Если вам нужно создать сеть для нескольких приложений, чтобы они могли общаться с хостом и между собой, вам пригодится команда docker network create — чтобы создать network в Docker с нужным драйвером и параметрами.

Посмотрим на создание сети на примере:

docker network create -d bridge rbm

Здесь мы создаем сеть типа bridge и указываем драйвер при помощи параметра -d. Но в этом примере есть небольшой подвох. Как вы помните, драйвер bridge и так используется по умолчанию, поэтому указывать его дополнительно вовсе не обязательно. А вот если вы применяете другой драйвер — без -d вам не обойтись.

Чтобы подключить/Отключить контейнер(ы) к/от сети в Docker, вам будут нужны команды docker network connect (для подключения) и docker network disconnect (для отключения, соответственно). Также обязательно указать сеть и контейнер, с которыми будете взаимодействовать.

Ну и вы уже, конечно, догадались, как происходит удаление Network в Docker — docker network rm. А команда docker network prune удалит сети без подключенных контейнеров.

Взаимодействие контейнеров в сети

Давайте посмотрим, как происходит общение контейнеров по сети.

Для этого стоит

  • создать 2 контейнера (один из них — допустим, container1 — нужно запустить в интерактивном режиме);
  • узнать при помощи команды docker inspect IP-адрес контейнера, запущенного не в интерактивном режиме (container2);
  • проверить доступность container2 из оболочки container1 при помощи ping;
  • вы увидите, что между контейнерами происходит общение по IP-адресу.

Чтобы общение происходило через DNS, вам нужно создать новую сеть, имя которой будет отличаться от bridge, так как у сети по умолчанию bridge такой возможности не предусмотрено.

Чтобы обратиться к хосту из bridge, вам понадобится default gateway — его вы можете найти в inspect — это адрес, по которому происходит обращение к хосту.

Для обратного обращения — от хоста к контейнеру — можно пробросить порты, а можно воспользоваться тем же адресом, о котором мы говорили выше. Он доступен с хоста.

Заключение

Работа с сетью в Docker — это не самый сложный кейс. Но как и в большинстве случаев тут многое решает практика. Так что пробуйте и задавайте вопросы, если таковые будут.

От редакции

Если вам интересно посещать бесплатные онлайн-мероприятия по DevOps, Kubernetes, Docker, GitlabCI и др. и задавать вопросы в режиме реального времени, подключайтесь к каналу DevOps by REBRAIN

*Анонсы мероприятий каждую неделю

Практикумы для специалистов по инфраструктуре и разработчиков — https://rebrainme.com.

Наш Youtube-канал — https://www.youtube.com/channel/UC6uIx64IFKMVmj12gKtSgBQ.

Агентство Fevlake, проектируем и поддерживаем IT-инфраструктуры с 2012 года — https://fevlake.com.

Комментарии (3)
Введено символов из возможных
Не отвечать

Вам также может понравится

Программный RAID в Linux. Часть 1
array(1) { [0]=> object(WP_Term)#11543 (16) { ["term_id"]=> int(6) ["name"]=> string(5) "Linux" ["slug"]=> string(5) "linux" ["term_group"]=> int(0) ["term_taxonomy_id"]=> int(6) ["taxonomy"]=> string(8) "category" ["description"]=> string(0) "" ["parent"]=> int(0) ["count"]=> int(28) ["filter"]=> string(3) "raw" ["cat_ID"]=> int(6) ["category_count"]=> int(28) ["category_description"]=> string(0) "" ["cat_name"]=> string(5) "Linux" ["category_nicename"]=> string(5) "linux" ["category_parent"]=> int(0) } } Linux

Автор — Максим Рязанов

Смотрите также — Wikipedia:RAID.

Избыточный массив независимых дисков (RAID) — это технология хранения, которая объединяет несколько компонентов дисков (как правило, дисководы или их разделы) в логическое устройство. В зависимости от реализации RAID эта логическая единица может быть файловой системой или дополнительным...

9
0
11 декабря 2020
Терминология в Docker
array(1) { [0]=> object(WP_Term)#10973 (16) { ["term_id"]=> int(8) ["name"]=> string(6) "Docker" ["slug"]=> string(6) "docker" ["term_group"]=> int(0) ["term_taxonomy_id"]=> int(8) ["taxonomy"]=> string(8) "category" ["description"]=> string(0) "" ["parent"]=> int(0) ["count"]=> int(8) ["filter"]=> string(3) "raw" ["cat_ID"]=> int(8) ["category_count"]=> int(8) ["category_description"]=> string(0) "" ["cat_name"]=> string(6) "Docker" ["category_nicename"]=> string(6) "docker" ["category_parent"]=> int(0) } } Docker

Инструмент контейнеризации Docker входит в число наиболее востребованных технологий, без которых не обойтись в работе Devops-инженера. Предлагаем начать знакомство с Docker с основных терминов, которые могут вам встретиться при работе с ним.

Docker - это инструмент, упрощающий разработку, тестирование и выкладку приложений за счет использования...

0
0
8 июля 2020
Книги и руководства для администратора Linux
array(1) { [0]=> object(WP_Term)#976 (16) { ["term_id"]=> int(6) ["name"]=> string(5) "Linux" ["slug"]=> string(5) "linux" ["term_group"]=> int(0) ["term_taxonomy_id"]=> int(6) ["taxonomy"]=> string(8) "category" ["description"]=> string(0) "" ["parent"]=> int(0) ["count"]=> int(28) ["filter"]=> string(3) "raw" ["cat_ID"]=> int(6) ["category_count"]=> int(28) ["category_description"]=> string(0) "" ["cat_name"]=> string(5) "Linux" ["category_nicename"]=> string(5) "linux" ["category_parent"]=> int(0) } } Linux

Не спешите разочарованно пролистывать. Да, интернет полон подобных подборок. Но наш вариант – 100% рабочий, потому что мы собрали в нем только те книги, которые рекомендуют опытные специалисты, не первый год работающие с операционными системами на базе Linux.

Наши эксперты:

Дмитрий Дунаев – ведущий DevOps-инженер международной компании...

6
0
26 мая 2020