Site icon 8HOST.COM

Экосистема Docker: базовые компоненты

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

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

Контейнеризация Docker

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

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

Главные преимущества системы Docker:

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

Примечание: Более подробную информацию о работе с контейнерами можно получить здесь.

Обнаружение сервисов и глобальные хранилища конфигураций

Обнаружение сервисов (service discovery) – один из компонентов общей стратегии, предназначенный для повышения масштабируемости и гибкости развёртывания контейнеров. Благодаря этому контейнеры могут оценить состояние текущей среды без помощи администратора. Они могут найти информацию о подключениях компонентов, с которыми они должны взаимодействовать, а также сообщить о себе другим инструментам. Такие инструменты обычно выступают в качестве распределенных хранилищ конфигураций, которые позволяют устанавливать произвольные параметры конфигураций для сервисов вашей инфраструктуры.

После регистрации контейнера приложения могут установить соединение при помощи системы обнаружения сервисов.

Эти инструменты часто используются как хранилища типа «ключ-значение» и распределяются по всем хостам кластера. Обычно такие хранилища предоставляют HTTP-интерфейс для доступа к данным. Некоторые из них предоставляют дополнительные функции безопасности: шифрование, контроль доступа и т.п. Распределённые хранилища необходимы для управления кластеризованным окружением Docker.

Вот некоторые задачи хранилищ обнаружения сервисов:

Популярные инструменты обнаружения сервисов:

Управление сетью

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

Встроенные сетевые функции и возможности Docker предоставляют два механизма связывания контейнеров:

  1. Открыть порты контейнера и настроить их для взаимодействия с хостом для внешней маршрутизации. Указать порт можно на хосте; кроме того, Docker может сам случайно выбрать неиспользуемый порт с большим номером. Это универсальный способ предоставления доступа к контейнеру, подходящий в большинстве случаев.
  2. Позволить контейнерам взаимодействовать при помощи ссылок Docker. С их помощью контейнер будет получать данные о подключении на другой стороне связи. Это позволит ему подключаться автоматически, если он отслеживает изменения. Таким образом можно устанавливать взаимодействие между контейнерами на одном хосте и при этом не задавать порт или адрес сервиса заранее.

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

Инструменты для сети Docker:

Примечание: Подробную информацию о сетевых инструментах можно получить здесь.

Планирование, управление кластером и оркестровка

Следующим важным компонентом кластерного окружения является планировщик. Инструменты планирования отвечают за своевременный запуск контейнеров на доступны хостах.

С помощью API или специального приложения отправляется запрос. После этого планировщик оценивает условия запроса (например, информацию о плотности размещения контейнеров и загруженности хостов) и состояние доступных хостов. Таким образом он может развернуть новое приложение на наименее загруженном хосте.

Процесс выбора хоста – одна из ключевых задач планировщика. Обычно у таких инструментов есть функции автоматизации этого процесса. При этом администратор может установить некоторые ограничения, например:

Планировщик отвечает за помещение контейнеров на соответствующие хосты, а также их запуск, остановку и управление процессами.

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

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

Популярными инструментами для планирования и управления хостами являются:

Заключение

Теперь Вы знакомы с функциями базового программного обеспечения экосистемы Docker.

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