В современном мире предприятия увлеклись контейнеризацией, которая требует сильных сетевых навыков для правильной настройки архитектуры контейнера, и, таким образом, это вводит концепцию Docker Networking.
В этом блоге о сети Docker вы ознакомитесь со следующими темами:
- Что такое докер?
- Сеть в Docker
- Цели Docker Networking
- Модель контейнерной сети
- Сетевые драйверы
- Руки вверх
Что такое докер?
Чтобы понять Docker, вам нужно знать историю того, как приложения были развернуты раньше, а затем, как приложения развертываются с использованием контейнеров сейчас.
Как вы можете видеть на диаграмме выше, при старом способе приложения на хосте были.Таким образом, 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?Есть ко мне вопрос? Пожалуйста, укажите это в комментариях, и я вернусь к вам.