Что такое контейнер?

Узнайте, что такое контейнеры и чем различаются популярные контейнерные платформы.

Sten Pittet Sten Pittet

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

Схема, показывающая, как структурированы контейнеры

Зачем нужны контейнеры?

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

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

Как они работают?

Чтобы понять, что такое контейнеры, стоит поговорить о виртуализации. Виртуализация — это разделение общих вычислительных ресурсов (ЦП, оперативной памяти, диска и сети) на изолированные ресурсы, которые работают независимо от своей физической общности. При виртуализации компьютера с использованием виртуальных машин (ВМ) или контейнеров ресурсы хост-компьютера, по сути, делятся на части для использования виртуализированными компонентами.

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

В контейнерных системах обычно есть служебная команда независимой оркестрации или служебный процесс сервера. Для создания отдельных контейнеров и управления ими участники команды DevOps работают с утилитой оркестрации. Утилита оркестрации отвечает за разделение ресурсов пользовательского пространства в операционной системе хост-компьютера, распределение этих ресурсов между контейнерами, а также запуск и мониторинг контейнеров.

Примеры использования

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

Сравнение контейнеров и виртуальных машин

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

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

Инструменты контейнерной среды выполнения

Контейнерная среда выполнения — это набор инструментов, используемый для указания зависимостей, которые необходимо упаковать в контейнер. Затем среда выполнения строит контейнер и запускает его.

Docker

Самая популярная и широко используемая контейнерная среда выполнения. Среда Docker положила начало недавнему стремительному росту DevOps в инфраструктуре на основе контейнеров. Docker имеет общедоступный репозиторий с контейнерами, в которых размещаются популярные инструменты с открытым исходным кодом.

Контейнеры Linux — LXC

Контейнеры Linux используют для создания контейнерных сред выполнения набор собственных утилит Linux с открытым исходным кодом. Контейнеры Linux обеспечивают независимую от поставщика среду для разработки контейнерных технологий. В основе Docker фактически лежит технология LXC. Работа с контейнерами Linux максимально похожа на взаимодействие с виртуальной машиной.

CRI-O

Новые спецификации контейнеров, предназначенные для системы управления контейнерами Kubernetes, которая не требует много ресурсов. CRI-O реализует инициативу открытых контейнеров (OCI). OCI — это стандарт, разработанный совместными усилиями компаний Red Hat, Intel и IBM.

Rkt и rktlet

Rkt (читается как «рокет») — это спецификация контейнеров, ориентированная прежде всего на безопасность. Контейнеры rkt не допускают выполнения небезопасных функций, пока пользователь не отключает настройки безопасности явным образом. Решение rkt использует технологию подов, а потому отлично работает с системой управления контейнерами Kubernetes.

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

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

Kubernetes

Kubernetes — это система управления контейнерами с открытым исходным кодом, разработанная и выпущенная Google. Kubernetes применяют для создания распределенного кластера размещенных контейнеров. Kubernetes предоставляет надежные инструменты оркестрации контейнерных кластеров, которые обеспечивают мониторинг состояния, развертывание, аварийное переключение и автоматическое масштабирование.

Docker

Решение Docker также предлагает набор утилит для запуска и оркестрации кластера контейнеров, а также управления им. Оно так широко распространено, что его система определения контейнеров поддерживается многими сторонними системами управления контейнерами, такими как Amazon ECS и Kubernetes.

Amazon ECS

Amazon Elastic Container Service — это облачный сервис Amazon, который упрощает управление контейнерами Docker в кластере. Сервис ECS содержит многофункциональный интерфейс API и тесно интегрирован с остальным пакетом облачных решений Amazon, позволяя применять мощные рабочие процессы DevOps.

OpenShift

Контейнерная платформа OpenShift — это корпоративный продукт Red Hat Linux. Это гибридный продукт для облачной интеграции технологий Kubernetes и OpenShift. OpenShift — надежная корпоративная облачная платформа, интегрированная с другими инструментами Red Hat.

Заключение

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