eFusion 20 июля 2020

🐳 Виды контейнеров: когда какой использовать

Все говорят, что контейнеры – это круто. Но они бывают разные: системные и контейнеры приложений, сертифицированные и кастомные. В этой публикации рассказываем о том, для чего нужен каждый тип.

Системный контейнер – один из старых примеров технологии контейнеров. Системный контейнер похож на виртуальную машину: идеален для хранения операционной системы и запуска нескольких процессов. Системные контейнеры используются для традиционных и монолитных приложений – в одном контейнере архитектура, инструменты и конфигурации.

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

Схема: контейнер приложения (слева) и контейнер системы
Схема: контейнер приложения (слева) и контейнер системы

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

Сравнение системного контейнера и виртуальной машины. Как видите, они во многом похожи
Сравнение системного контейнера и виртуальной машины. Как видите, они во многом похожи

Ещё один вариант – использование системных контейнеров Virtuozzo и контейнеров приложений Docker во вложенной архитектуре. Внутри платформы различные типы контейнеров могут использоваться для разных целей:

  • сертифицированные управляемые контейнеры;
  • elastic VPS;
  • кастомные Docker-контейнеры;
  • Docker Engine CE;
  • кластер Kubernetes.

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

Сертифицированные управляемые контейнеры

Самый распространенный вариант. Обычно предлагается несколько предварительно сконфигурированных и управляемых программных стеков, позволяющих создавать гибкие топологии с необходимым софтом (Java, PHP, Node.js, Ruby, Python или Go), балансировщик нагрузки, база данных и прочее.

Панель управляемого контейнера
Панель управляемого контейнера

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

Взаимодействие оркестратора с образами
Взаимодействие оркестратора с образами

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

Виртуальные частные серверы (VPS)

Наиболее простым примером реализации системного контейнера является VPS-контейнер с предустановленными ОС: CentOS, Ubuntu и Debian. Это «чистый» контейнер без каких-либо дополнительных настроек или установленного ПО. Его можно рассматривать как вариант контейнеризации устаревших приложений – почти не требует настройки при миграции из виртуальных машин.

Настройка под Elastic VPS образа с CentOS 7.7
Настройка под Elastic VPS образа с CentOS 7.7

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

Пользовательские Docker-контейнеры

Это образ Docker, развернутый внутри системного контейнера, что делает его совместимым с большинством (но не со всеми) отличительными чертами платформы, например, встроенным вертикальным и горизонтальным масштабированием. Другими словами, файловая система такого образа распаковывается внутри среды выполнения системного контейнера.

Работа оркестратора с кастомными образами
Работа оркестратора с кастомными образами

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

Настройка пользовательского контейнера
Настройка пользовательского контейнера

Docker Engine CE

Docker Engine Community Edition работает внутри системных контейнеров, но в то же время имеет полную совместимость с нативной экосистемой Docker.

Взаимодействие оркерстратора с образами Docker Engine
Взаимодействие оркерстратора с образами Docker Engine

Такая интеграция позволяет работать с основными инструментами контейнерной технологии Docker:

  • Docker Engine – работает с Dockerfile и запускает pre-built образы контейнеров.
  • Docker Registry – хранит и предоставляет доступ к многочисленным общедоступным и частным образам, предназначенным для развертывания в Docker Engine.
  • Docker Compose – помогает собирать приложения, состоящие из нескольких компонентов, где все необходимые конфигурации объявляются в одном compose-файле.
  • Docker Swarm – представляет собой несколько независимых Docker узлов, объединенных в кластер.
Настройка окружений для Docker Engine CE и Docker Swarm Cluster
Настройка окружений для Docker Engine CE и Docker Swarm Cluster

Kubernetes

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

Иначе говоря, Kubernetes обеспечивает максимальную совместимость всех проектов. Основным преимуществом его использования является усовершенствованная модель масштабирования и запуска контейнеров, что в разы облегчает управление и мониторинг, делает все это «предприятие» экономически выгодным.

Заключение

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

***

Данный материал подготовлен при поддержке компании GeekBrains — нашего партнёра, предоставляющего помощь в освоении DevOps-технологий. Если вы хотите освоить DevOps, не тратя лишнее время и силы на поиск знаний, инструментов и привыкание к разному стилю чтения курсов, обратите внимание на факультет DevOps.

В рамках курса данного факультета вы освоите технологии Docker, Kubernetes, работу с виртуальными машинами, облачные технологии и микросервисную архитектуру.

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

Источники

РУБРИКИ В СТАТЬЕ

МЕРОПРИЯТИЯ

Как вы используете контейнеры в своей практике?

ВАКАНСИИ

Unity3D Developer
по итогам собеседования
Middle\Senior .Net разработчик
от 120000 RUB до 165000 RUB
Frontend разработчик (react native)
по итогам собеседования
Tableau developer
по итогам собеседования

ЛУЧШИЕ СТАТЬИ ПО ТЕМЕ

BUG