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

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

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

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

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

Говоря о контейнерах, часто имеют в виду технологию 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

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

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

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

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

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

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

Docker Engine CE

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

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

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

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

Kubernetes

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

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

Заключение

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

***

Хочу научиться программировать с нуля, но не знаю, с чего начать. Что делать?

Можно учиться самостоятельно (долго) или пойти на курсы с преподавателями (быстро). Плюс нужно учитывать, что джунов много, конкуренция выше и работодатели повышают порог вхождения при найме на работу. Чтобы получить актуальные знания, мы в proglib.academy запустили курсы:

  • Основы программирования на Python.
  • Профессия Python-разработчик.
  • Алгоритмы и структуры данных.
  • Математика для Data Science.
  • Профессия Data Science.
  • Frontend Basic: принцип работы современного веба.
  • Профессия Фронтенд-разработчик.
  • Обработка естественного языка. Полный курс.

На подходе еще больше 10 курсов для взрослых и детей.

Источники

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

matyushkin
12 мая 2020

Как запустить веб-приложение на Nginx в Docker 🐳👨🏽‍💻

Инструкция по настройке совместной работы веб-приложения и сервера Nginx в ...
Библиотека программиста
02 сентября 2017

10 популярных вопросов и ответов на DevOps собеседовании

DevOps работает как мост между разработкой, тестированием и эксплуатацией в...
Библиотека программиста
12 июля 2017

Что такое Docker, и как его использовать? Подробно рассказываем

Разберем по косточкам, ведь Docker – это мощный инструмент, и огромное коли...