Visitors have accessed this post 38100 times.

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

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

Visitors have accessed this post 38100 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)
Введено символов из возможных
Не отвечать

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

Лучшие книги по DevOps
array(1) { [0]=> object(WP_Term)#11535 (16) { ["term_id"]=> int(7) ["name"]=> string(6) "DevOps" ["slug"]=> string(6) "devops" ["term_group"]=> int(0) ["term_taxonomy_id"]=> int(7) ["taxonomy"]=> string(8) "category" ["description"]=> string(0) "" ["parent"]=> int(0) ["count"]=> int(19) ["filter"]=> string(3) "raw" ["cat_ID"]=> int(7) ["category_count"]=> int(19) ["category_description"]=> string(0) "" ["cat_name"]=> string(6) "DevOps" ["category_nicename"]=> string(6) "devops" ["category_parent"]=> int(0) } } DevOps

Погружение в тему DevOps – это тот путь, который потребует от вас постоянного самосовершенствования и изучения новых технологий. К сожалению, вы не станете специалистом без практики, даже если прочитаете тысячу самых лучших книг. Но тем не менее, книги по DevOps могут помочь систематизировать знания и подсказать некоторые приемы и навыки,...

4
0
25 мая 2020
Docker Swarm: практическое использование
array(1) { [0]=> object(WP_Term)#976 (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

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

Всех приветствую! В этой статье мы познакомимся с преимуществами overlay-сети, а также попрактикуемся с деплоем сервисов и приложений. Будет интересно!

Замечание к статье: для примера будут использоваться три виртуальные машины под управлением Debian 10, развернутые на моем компьютере. Все команды, перечисленные в...

4
2
20 ноября 2020
Использование OpenSSL: хеши, цифровые подписи и многое другое
array(1) { [0]=> object(WP_Term)#988 (16) { ["term_id"]=> int(7) ["name"]=> string(6) "DevOps" ["slug"]=> string(6) "devops" ["term_group"]=> int(0) ["term_taxonomy_id"]=> int(7) ["taxonomy"]=> string(8) "category" ["description"]=> string(0) "" ["parent"]=> int(0) ["count"]=> int(19) ["filter"]=> string(3) "raw" ["cat_ID"]=> int(7) ["category_count"]=> int(19) ["category_description"]=> string(0) "" ["cat_name"]=> string(6) "DevOps" ["category_nicename"]=> string(6) "devops" ["category_parent"]=> int(0) } } DevOps

Перевод статьи - https://opensource.com/article/19/6/cryptography-basics-openssl-part-2

Детальный обзор шифрования в OpenSSL: хеши, цифровые подписи, цифровые сертификаты и многое другое

В первой статье из этой серии мы познакомились с хешами, шифрованием/дешифрованием, цифровыми подписями и сертификатами в библиотеках OpenSSL, утилитами...

4
0
18 сентября 2020