Экосистема Docker: базовые компоненты
Linux, VPS | Комментировать запись
Контейнеризация – это процесс распространения и развертывания приложений при помощи портативных контейнеров. Контейнеры – это изолированные и легковесные процессы, в которые упаковываются компоненты и зависимости приложения для дальнейшего использования. В настоящее время многие организации заинтересованы в разработке приложений и сервисов, которые можно легко и быстро развернуть в распределенных системах, поскольку при этом система может легко выполнить масштабирование и восстановиться после сбоев компьютера и приложения.
Docker – это популярная платформа для контейнеризации, которая позволяет быстро и без проблем развёртывать различные окружения, создавать контейнеры и управлять ими. Экосистема Docker насчитывает огромное количество различных инструментов.
Контейнеризация Docker
На сегодняшний день Docker является наиболее распространенным инструментом контейнеризации программного обеспечения. По сравнению с другими подобными инструментами, Docker гораздо проще и быстрее создаёт контейнеры, позволяет легко управлять ими, а также интегрируется со многими другими открытыми проектами.
Контейнеры изолируют отдельные приложения и используют системные ресурсы операционной системы, которые были выделены им системой Docker. Контейнеры могут состоять из слоев, которые, в свою очередь, могут совместно использоваться несколькими контейнерами. Это позволяет уменьшить использование ресурсов.
Главные преимущества системы Docker:
- Экономное использование ресурсов: Docker не виртуализирует всю операционную систему; контейнеры изолированы на уровне процесса и использзуют ядро хоста.
- Портируемость: все зависимости для помещённого в контейнер приложения сгруппированы внутри этого же контейнера, что позволяет ему работать на любом хосте Docker.
- Предсказуемость: Хост никак не влияет на содержимое контейнера, и контейнер никак не влияет на хост, на котором он работает. Используются стандартизированные интерфейсы, всё взаимодействие предсказуемо.
Как правило, при разработке приложения или сервиса для контейнеризации с помощью Docker его функции разбиваются на отдельные контейнеры. Такой подход называется сервис-ориентированной архитектурой. Это дает разработчикам возможность в дальнейшем быстро масштабировать или обновлять компоненты независимо друг от друга. Такая гибкость работы является ещё одним серьёзным преимуществом, благодаря которому многие пользователи выбирают Docker для разработки и развертывания приложений.
Примечание: Более подробную информацию о работе с контейнерами можно получить здесь.
Обнаружение сервисов и глобальные хранилища конфигураций
Обнаружение сервисов (service discovery) – один из компонентов общей стратегии, предназначенный для повышения масштабируемости и гибкости развёртывания контейнеров. Благодаря этому контейнеры могут оценить состояние текущей среды без помощи администратора. Они могут найти информацию о подключениях компонентов, с которыми они должны взаимодействовать, а также сообщить о себе другим инструментам. Такие инструменты обычно выступают в качестве распределенных хранилищ конфигураций, которые позволяют устанавливать произвольные параметры конфигураций для сервисов вашей инфраструктуры.
После регистрации контейнера приложения могут установить соединение при помощи системы обнаружения сервисов.
Эти инструменты часто используются как хранилища типа «ключ-значение» и распределяются по всем хостам кластера. Обычно такие хранилища предоставляют HTTP-интерфейс для доступа к данным. Некоторые из них предоставляют дополнительные функции безопасности: шифрование, контроль доступа и т.п. Распределённые хранилища необходимы для управления кластеризованным окружением Docker.
Вот некоторые задачи хранилищ обнаружения сервисов:
- Передача приложениям данных, необходимых для взаимодействия с зависимостями.
- Регистрация данных о подключениях сервисов.
- Предоставление общедоступного хранилища конфигураций.
- Хранение данных о кластере и его членах, что необходимо для программ управления кластером.
Популярные инструменты обнаружения сервисов:
- etcd: обнаружение сервисов, глобальное хранилище типа «ключ-значение».
- consul: обнаружение сервисов, глобальное хранилище типа «ключ-значение».
- zookeeper: обнаружение сервисов, глобальное хранилище типа «ключ-значение».
- crypt: инструмент для шифрования записей etcd.
- Confd: отслеживание изменений в хранилищах и запуск переконфигурации сервисов согласно новым параметрам.
Управление сетью
Приложения, помещённые в контейнеры, принимают сервис-ориентированную архитектуру, которая подразумевает разделение функционала на отдельные компоненты. Это значительно упрощает управление и масштабирование приложения, однако требует надёжной сети между компонентами. Docker предоставляет базовые сетевые структуры, необходимые для обеспечения соединений типа «контейнер-контейнер» и «контейнер-хост».
Встроенные сетевые функции и возможности Docker предоставляют два механизма связывания контейнеров:
- Открыть порты контейнера и настроить их для взаимодействия с хостом для внешней маршрутизации. Указать порт можно на хосте; кроме того, Docker может сам случайно выбрать неиспользуемый порт с большим номером. Это универсальный способ предоставления доступа к контейнеру, подходящий в большинстве случаев.
- Позволить контейнерам взаимодействовать при помощи ссылок Docker. С их помощью контейнер будет получать данные о подключении на другой стороне связи. Это позволит ему подключаться автоматически, если он отслеживает изменения. Таким образом можно устанавливать взаимодействие между контейнерами на одном хосте и при этом не задавать порт или адрес сервиса заранее.
Этот базовый уровень взаимодействия в сети подходит для окружений с одним хостом. Однако экосистема Docker создала множество проектов, сосредоточенных на расширении сетевой функциональности, Такие инструменты дают следующие дополнительные возможности:
- Оверлейные сети, позволяющие упростить и объединить адресное пространство на нескольких хостах.
- Bиртуальные частные сети (VPN), предоставляющие безопасные соединения между различными компонентами.
- Подсети для каждого хоста или приложения.
- Интерфейсов macvlan.
- Пользовательские MAC-адреса, шлюзы и т.д. для контейнеров.
Инструменты для сети Docker:
- flannel: оверлейные сети, отдельные подсети для каждого хоста
- weave: оверлейная сеть, объединяющая все контейнеры в одну сеть.
- pipework: продвинутые инструменты для настройки произвольных сетевых параметров.
Примечание: Подробную информацию о сетевых инструментах можно получить здесь.
Планирование, управление кластером и оркестровка
Следующим важным компонентом кластерного окружения является планировщик. Инструменты планирования отвечают за своевременный запуск контейнеров на доступны хостах.
С помощью API или специального приложения отправляется запрос. После этого планировщик оценивает условия запроса (например, информацию о плотности размещения контейнеров и загруженности хостов) и состояние доступных хостов. Таким образом он может развернуть новое приложение на наименее загруженном хосте.
Процесс выбора хоста – одна из ключевых задач планировщика. Обычно у таких инструментов есть функции автоматизации этого процесса. При этом администратор может установить некоторые ограничения, например:
- Определить хост, на который нужно поместить контейнер.
- Указать хост, на который ни при каких обстоятельствах нельзя помещать указанный контейнер.
- Поместить контейнер на хост с соответствующим именем или метаданными.
- Поместить контейнер на наименее загруженный хост.
- Запустить контейнер на всех доступных хостах.
Планировщик отвечает за помещение контейнеров на соответствующие хосты, а также их запуск, остановку и управление процессами.
Планировщик взаимодействует с каждым хостом в группе, потому он обычно выполняет функции управления кластером. Это позволяет ему своевременно получать данные о членах кластера и выполнять задачи по управлению им.
В данном контексте оркестровкой называется комбинация функций планирования и управления хостами и контейнерами.
Популярными инструментами для планирования и управления хостами являются:
- fleet: планировщик и инструмент для управления кластером.
- marathon: планировщик и инструмент для управления сервисами.
- Swarm: планировщик и инструмент для управления сервисами.
- mesos: сервис абстракции хостов, который позволяет объединить ресурсы хоста для планировщика.
- kubernetes: продвинутый планировщик, позволяющий управлять группами контейнеров.
- compose: инструмент для оркестровки контейнеров и создания групп.
Заключение
Теперь Вы знакомы с функциями базового программного обеспечения экосистемы Docker.
Экосистема Docker предоставляет всё необходимое для управления программным обеспечением, дизайна и развертывания приложений, что обеспечивает высокую масштабируемость. Зная возможности разных сопутствующих инструментов Docker, вы можете развертывать сложные приложения, и при этом учитывать самые разнообразные их требования.
Tags: Docker