Поиск по сайту:

Объяснение концепций сети Docker

Сеть Docker в основном используется для установления связи между контейнерами Docker и внешним миром через хост-компьютер, или вы можете сказать, что это канал связи, через который все изолированные контейнеры взаимодействуют друг с другом в различных ситуациях для выполнения необходимые действия. В этом руководстве мы объясним основные концепции сети Docker на практических примерах в Ubuntu.

Если вы еще не установили Docker, обратитесь к следующему руководству.

  • Как установить Docker на сервер Ubuntu 18.04 LTS

Основы использования Docker:

  • Начало работы с Docker

Объяснение концепций сети Docker

Все команды, перечисленные ниже, проверены с правами root в Ubuntu.

Для управления сетевыми операциями, такими как создание новой сети, подключение контейнера к сети, отключение контейнера от сети, перечисление доступных сетей, удаление сетей и т. д., мы используем следующую команду:

docker network

Типы сетевых драйверов докеров

Чтобы просмотреть все ваши сети, запустите:

docker network ls

Давайте кратко познакомимся со всеми из них.

  1. Сеть-мост: при запуске Docker автоматически создается сеть-мост по умолчанию. Вновь запущенные контейнеры будут автоматически подключаться к нему. Вы также можете создавать пользовательские сети мостов. Мостовые сети, определяемые пользователем, превосходят мостовую сеть по умолчанию.
  2. Сеть хоста: снимает сетевую изоляцию между контейнером и хостом Docker и использует сеть хоста напрямую. Если вы запускаете контейнер, который привязывается к порту 80, и используете сеть хоста, приложение контейнера доступно через порт 80 по IP-адресу хоста. Это означает, что вы не сможете запускать несколько веб-контейнеров на одном хосте и на одном и том же порту, поскольку порт теперь является общим для всех контейнеров в хост-сети.
  3. Нет сети. В сети этого типа контейнеры не подключены ни к какой сети и не имеют доступа к внешней сети или другим контейнерам. Итак, эта сеть используется, когда вы хотите полностью отключить сетевой стек в контейнере.
  4. Оверлейная сеть. Создает внутреннюю частную сеть, охватывающую все узлы, участвующие в роевом кластере. Таким образом, сети Overlay облегчают связь между службой Docker Swarm и автономным контейнером или между двумя автономными контейнерами в разных демонах Docker.
  5. Сеть Macvlan. Некоторые приложения, особенно устаревшие приложения или приложения, отслеживающие сетевой трафик, ожидают прямого подключения к физической сети. В такой ситуации вы можете использовать сетевой драйвер Macvlan, чтобы назначить MAC-адрес виртуальному сетевому интерфейсу каждого контейнера, делая его похожим на физический сетевой интерфейс, напрямую подключенный к физической сети.

Позвольте мне показать вам практические упражнения для сетей Bridge и Host.

1. Мостовая сеть

Для объяснения этого типа сети я буду использовать два контейнера Alpine.

Теперь я собираюсь запустить два контейнера Alpine, а именно C1 и C2, используя команды:

docker run -it -d --name c1 alpine ash
docker run -it -d --name c2 alpine ash

Далее давайте узнаем IP-адреса запущенных контейнеров. Для этого запустите:

docker exec -it c1 sh –c “ip a”
docker exec -it c2 sh –c “ip a”

Как видите, IP-адрес контейнера C1 — 172.17.0.2, а IP-адрес C2 — 172.17.0.3.

Теперь давайте продолжим и попробуем пропинговать друг друга, чтобы убедиться, что они смогут общаться.

Сначала подключитесь к работающему контейнеру C1 и попробуйте выполнить проверку связи с контейнером C2:

docker attach c1
Ping –c 2 172.17.0.3

Аналогично присоединитесь к контейнеру C2 и попробуйте выполнить проверку связи с контейнером C1.

docker attach c2
Ping –c 2 172.17.0.2

Как вы видите на скриншотах выше, связь происходит между контейнерами, находящимися в одной сети.

Мы также можем проверить это, проверив сеть мостов с помощью команды:

docker network inspect bridge

Приведенная выше команда отобразит всю информацию о сети, такую как тип сети, подсеть, шлюз, имя контейнера, адреса iip и т. д.

1.1 Создание пользовательской мостовой сети

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

Чтобы создать новый сетевой драйвер, просто запустите:

docker network create my_net

Или,

docker network create --driver bridge dhruv_net

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

В определяемых пользователем сетях, таких как dhruv_net, контейнеры могут не только обмениваться данными по IP-адресу, но также могут сопоставлять имя контейнера с IP-адресом. Эта возможность называется автоматическое обнаружение служб.

Чтобы убедиться, что контейнеры могут взаимодействовать друг с другом, давайте запустим три альпийских контейнера, а именно A1, A2 и A3 на dhruv_net< сеть, которую мы создали ранее.

docker run -it -d --name A1 --network dhruv_net alpine ash
docker run -it -d --name A2 --network dhruv_net alpine ash
docker run -it -d --name A3 --network dhruv_net alpine ash

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

Из приведенных выше скриншотов доказано, что контейнеры могут взаимодействовать друг с другом.

2. Хост-сеть

Мы запускаем контейнер, который привязывается к порту 80 с помощью сети хоста, приложение контейнера доступно через порт 80 по IP-адресу хоста.

Хост-сеть необходима только тогда, когда вы запускаете программы с очень специфичной сетью. С точки зрения сети приложение, работающее внутри контейнера Docker, выглядит так, как будто оно работает на самом хосте. Это обеспечивает контейнеру больший доступ к сети, чем он обычно может получить.

Здесь мы использовали команду netstat -ntlp для отображения порта прослушивания на сервере. Чтобы узнать, какая служба прослушивает тот или иной порт, воспользуйтесь этим руководством.

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

  • Сеть Docker-контейнеров

Рекомендуем прочитать:

  • Объяснение томов Docker
  • Как автоматически обновлять работающие контейнеры Docker
  • ctop — инструмент мониторинга командной строки для контейнеров Linux
  • Portainer – самый простой способ управления Docker
  • PiCluster — простое веб-приложение для управления Docker
  • Dockly – управление контейнерами Docker из терминала

Об авторе:

Дхрув Тивари — инженер DevOps, который любит автоматизировать процессы, работать с Linux в больших масштабах и мечтает о том дне, когда системы станут достаточно умными, чтобы им никогда не приходилось входить в систему Linux. Путешествие CI/CD от исходного кода до развертывания кода в производство.

Статьи по данной тематике