Docker Networking - узнайте, как контейнеры взаимодействуют друг с другом



Узнайте все о сетевых возможностях Docker с пониманием модели контейнерной сети и ее практической реализации.

В современном мире предприятия увлеклись контейнеризацией, которая требует сильных сетевых навыков для правильной настройки архитектуры контейнера, и, таким образом, это вводит концепцию Docker Networking.

В этом блоге о сети Docker вы ознакомитесь со следующими темами:





Что такое докер?

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

Развертывание приложений старым и новым способом - Docker Networking - Edureka



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

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

Итак, как эти контейнеры взаимодействуют друг с другом в различных ситуациях?



Что ж, это происходит через Docker Networking.

Докер сети

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

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

Теперь контейнеры Docker - это не что иное, как экземпляр среды выполнения Docker Image. Эти образы загружаются в Docker Hub (репозиторий Git для образов Docker), который содержит общедоступные / частные репозитории.

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

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

Как вы думаете, каковы цели Docker Networking?

Цели Docker Networking

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

Кроссплатформенность - Docker можно легко использовать в кросс-платформенном режиме, который работает на различных серверах с помощью Docker Swarm Clusters.

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

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

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

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

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

Хотите изучить различные этапы DevOps?

Модель контейнерной сети (CNM)

Прежде чем я расскажу вам, что именно представляет собой модель контейнерной сети, позвольте мне рассказать вам о Libnetwork, которая необходима, прежде чем вы поймете CNM.

Libnetwork - это библиотека Docker с открытым исходным кодом, которая реализует все ключевые концепции, составляющие CNM.

Так, Модель контейнерной сети (CNM) стандартизирует шаги, необходимые для обеспечения сети для контейнеров с использованием нескольких сетевых драйверов. CNM требует распределенного хранилища ключей и значений, например консоли, для хранения конфигурации сети.

CNM имеет интерфейсы для подключаемых модулей IPAM и сетевых модулей.

API-интерфейсы плагинов IPAM используются для создания / удаления пулов адресов и выделения / освобождения IP-адресов контейнеров, тогда как API-интерфейсы сетевых плагинов используются для создания / удаления сетей и добавления / удаления контейнеров из сетей.

CNM в основном построен на 5 объектах: сетевой контроллер, драйвер, сеть, конечная точка и песочница.

Объекты сетевой модели контейнера

Сетевой контроллер: Предоставляет точку входа в Libnetwork, которая предоставляет простые API-интерфейсы для Docker Engine для распределения и управления сетями. Поскольку Libnetwork поддерживает несколько встроенных и удаленных драйверов, сетевой контроллер позволяет пользователям подключать определенный драйвер к данной сети.

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

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

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

Песочница: Создается, когда пользователи запрашивают создание конечной точки в сети. Песочница может иметь несколько конечных точек, подключенных к разным сетям, представляющих конфигурацию сети контейнера, такую ​​как IP-адрес, MAC-адрес, маршруты, DNS.

Итак, это были 5 основных целей CNM.

Теперь позвольте мне рассказать вам о различных сетевых драйверах, задействованных в сети Docker.

Хотите вывести обучение DevOps на новый уровень?

Сетевые драйверы

В основном есть 5 сетевых драйверов: Bridge, Host, None, Overlay, Macvlan.

мост: Сеть моста - это частная внутренняя сеть по умолчанию, созданная докером на хосте. Итак, все контейнеры получают внутренний IP-адрес, и эти контейнеры могут получать доступ друг к другу, используя этот внутренний IP-адрес. Сети Bridge обычно используются, когда ваши приложения работают в автономных контейнерах, которым необходимо обмениваться данными.

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

Никто : В такой сети контейнеры не привязаны к какой-либо сети и не имеют доступа к внешней сети или другим контейнерам. Итак, эта сеть используется, когдавы хотите полностью отключить сетевой стек в контейнере и,только создать устройство обратной петли.

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

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

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

Руки вверх

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

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

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

Включенные шаги:

  • Инициализируйте Docker Swarm, чтобы сформировать кластер Swarm.
  • Создать наложенную сеть
  • Создавайте сервисы как для веб-приложения, так и для MySQL
  • Подключите приложения по сети

Давайте начнем!

Шаг 1: Инициализируйте Docker Swarm на машине.

docker swarm init --advertise-addr 192.168.56.101

Флаг –advertise-addr настраивает узел менеджера для публикации своего адреса как 192.168.56.101. Остальные узлы роя должны иметь доступ к менеджеру по IP-адресу.

Шаг 2: Теперь, если вы хотите присоединить этот управляющий узел к рабочему узлу, скопируйте ссылку, которую вы получите при инициализации роя на рабочем узле.
Шаг 3: Создайте оверлейную сеть.

docker network создать -d overlay myoverlaynetwork

Где myoverlay - имя сети, а -d позволяет Docker Daemon работать в фоновом режиме.

Шаг 4.1: Создайте службу webapp1 и используйте созданную вами сеть для развертывания этой службы в кластере Swarm.

docker service create --name webapp1 -d --network myoverlaynetwork -p 8001: 80 hshar / webapp

Где -pпредназначен для переадресации портов,хшар- это имя учетной записи в Docker Hub, а webapp - это имя веб-приложения, уже присутствующего в Docker Hub.

Шаг 4.2: Теперь проверьте, создана ли служба.

докер сервис ls

Шаг 5.1: Теперь создайте службу MySQL и используйте созданную вами сеть для развертывания службы в кластере роя.

docker service create --name mysql -d --network myoverlaynetwork -p 3306: 3306 hshar / mysql: 5.5


Шаг 5.2: Теперь проверьте, создана ли служба.

докер сервис ls

Шаг 6.1: После этого проверьте, какой контейнер запущен на вашем главном узле, и перейдите в контейнер hshar / webapp.

докер ps

Шаг 6.2: Итак, вы можете видеть, что на узле менеджера находится только служба webapp. Итак, попадаем в контейнер webapp.

docker exec -it идентификатор_контейнера bash nano var / www / html / index.php

Команда docker ps отобразит оба ваших контейнера с их соответствующим идентификатором контейнера. Вторая команда включит этот контейнер в интерактивном режиме.

Шаг 7: Теперь измените $ servername с localhost на mysql и $ password с «» »на« edureka », а также измените все необходимые данные для заполнения базы данных и сохраните файл index.php с помощью сочетания клавиш Ctrl + x, а затем y, чтобы сохранить, и нажмите ввод.

Шаг 8: Теперь перейдите в контейнер mysql, который работает на другом узле.

docker exec -it container_id bash

Шаг 9: Как только вы войдете в контейнер mysql, введите следующие команды, чтобы использовать базу данных в MySQL.

Шаг 9.1: Получите доступ к использованию контейнера mysql.

mysql -u корень -pedureka

Где -u представляет пользователя, а -p - пароль вашей машины.

Шаг 9.2: Создайте базу данных в mysql, которая будет использоваться для получения данных из webapp1.

СОЗДАТЬ БАЗУ ДАННЫХ HandsOn

факториал числа java

Шаг 9.3: Воспользуйтесь созданной базой данных.

ИСПОЛЬЗУЙТЕ HandsOn

Шаг 9.4: Создайте в этой базе данных таблицу, которая будет использоваться для получения данных из webapp1.

СОЗДАТЬ ТАБЛИЦУ course_details (имя_курса VARCHAR (10), course_id VARCHAR (11))

Шаг 9.5: Теперь выйдите из MySQL и контейнера, используя команду выход .

Шаг 10: Зайдите в свой браузер и введите адрес как локальный: 8001 / index.php . Это откроет ваше веб-приложение. Теперь введите сведения о курсах и нажмите Отправить запрос .

Шаг 11: После того, как вы нажмете «Отправить запрос», перейдите к узлу, на котором работает ваша служба MySQL, а затем войдите в контейнер.

docker exec -it container_id bash mysql -u root -pedureka ИСПОЛЬЗОВАТЬ таблицы HandsOn SHOW выберите * из course_details

Это покажет вам результаты всех курсов, о которых вы заполнили детали.

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

Если вы нашли этот блог Docker Container актуальным, ознакомьтесь с Edureka, надежная компания онлайн-обучения с сетью из более чем 450 000 довольных учеников по всему миру. Курс Edureka DevOps Certification Training помогает учащимся получить опыт в различных процессах и инструментах DevOps, таких как Puppet, Jenkins, Docker, Nagios, Ansible и GIT для автоматизации нескольких этапов в SDLC.

Ищете сертификацию в DevOps?

Есть ко мне вопрос? Пожалуйста, укажите это в комментариях, и я вернусь к вам.