🐳 Виды контейнеров: когда какой использовать
Все говорят, что контейнеры – это круто. Но они бывают разные: системные и контейнеры приложений, сертифицированные и кастомные. В этой публикации рассказываем о том, для чего нужен каждый тип.
Системный контейнер – один из старых примеров технологии контейнеров. Системный контейнер похож на виртуальную машину: идеален для хранения операционной системы и запуска нескольких процессов. Системные контейнеры используются для традиционных и монолитных приложений – в одном контейнере архитектура, инструменты и конфигурации.
Контейнер приложения – относительно новый тип контейнеров, внутри которых обычно выполняется один процесс. Отличное решение для микросервисов с горизонтальной масштабируемостью. Контейнеры приложений лучше подходят для неизменных инфраструктур.
Говоря о контейнерах, часто имеют в виду технологию 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. Это «чистый» контейнер без каких-либо дополнительных настроек или установленного ПО. Его можно рассматривать как вариант контейнеризации устаревших приложений – почти не требует настройки при миграции из виртуальных машин.
После установки все необходимые конфигурации должны быть выполнены конечным пользователем. Это почти как виртуальная машина, но более легковесная и с преимуществами автоматического вертикального/горизонтального масштабирования.
Пользовательские Docker-контейнеры
Это образ Docker, развернутый внутри системного контейнера, что делает его совместимым с большинством (но не со всеми) отличительными чертами платформы, например, встроенным вертикальным и горизонтальным масштабированием. Другими словами, файловая система такого образа распаковывается внутри среды выполнения системного контейнера.
По сравнению с сертифицированными управляемыми контейнерами этот тип обеспечивает доступ к более широкому выбору программных стеков. Вы можете выбрать один из сторонних образов Docker, доступных в Docker Hub или другом публичном или частном реестре контейнеров. Работоспособность и совместимость ПО внутри платформы уже не может быть гарантирована – здесь уже нет того тестирования, что проводилось для инструментов выше.
Docker Engine CE
Docker Engine Community Edition работает внутри системных контейнеров, но в то же время имеет полную совместимость с нативной экосистемой Docker.
Такая интеграция позволяет работать с основными инструментами контейнерной технологии Docker:
- Docker Engine – работает с Dockerfile и запускает pre-built образы контейнеров.
- Docker Registry – хранит и предоставляет доступ к многочисленным общедоступным и частным образам, предназначенным для развертывания в Docker Engine.
- Docker Compose – помогает собирать приложения, состоящие из нескольких компонентов, где все необходимые конфигурации объявляются в одном compose-файле.
- Docker Swarm – представляет собой несколько независимых Docker узлов, объединенных в кластер.
Kubernetes
Платформа Kubernetes предназначена для развертывания и управления отказоустойчивыми контейнеризированными приложениями. Она может выполнять сложные задачи оркестрации контейнеров, такие как развертывание, обнаружение служб, скользящие обновления, самовосстановление и управление безопасностью.
Иначе говоря, Kubernetes обеспечивает максимальную совместимость всех проектов. Основным преимуществом его использования является усовершенствованная модель масштабирования и запуска контейнеров, что в разы облегчает управление и мониторинг, делает все это «предприятие» экономически выгодным.
Заключение
Теперь вы знаете всё необходимое о существующих на сегодняшний день типах контейнеров, доступных на облачном рынке, а также об общей специфике в рамках работы PaaS. Надеемся, этот материал поможет вам выбрать наиболее подходящий вариант для вашего проекта.
Хочу научиться программировать с нуля, но не знаю, с чего начать. Что делать?
Можно учиться самостоятельно (долго) или пойти на курсы с преподавателями (быстро). Плюс нужно учитывать, что джунов много, конкуренция выше и работодатели повышают порог вхождения при найме на работу. Чтобы получить актуальные знания, мы в proglib.academy запустили курсы:
- Основы программирования на Python.
- Профессия Python-разработчик.
- Алгоритмы и структуры данных.
- Математика для Data Science.
- Профессия Data Science.
- Frontend Basic: принцип работы современного веба.
- Профессия Фронтенд-разработчик.
- Обработка естественного языка. Полный курс.
На подходе еще больше 10 курсов для взрослых и детей.