Найти тему
VK Cloud

Контейнеризация приложений: что это такое и когда стоит использовать

Оглавление

По меткому выражению специалистов из IBM, контейнеризация «позволяет писать приложения один раз и запускать их где угодно».

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

В статье, написанной совместно с экспертами из компании Git in Sky , расскажем о том, как контейнерные технологии устраняют эту проблему.

Что такое контейнер и чем эта технология удобна для разработчиков приложений

Контейнер приложения — экземпляр исполняемого программного обеспечения (ПО), который объединяет двоичный код приложения вместе со всеми связанными файлами конфигурации, библиотеками, зависимостями и средой выполнения.

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

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

Контейнеры — небольшие, быстрые и портативные, потому что могут не включать в себя гостевую операционную систему (ОС), а используют функции и ресурсы основной ОС. Контейнеры используют не только для изоляции различных программных процессов, но и для контроля ресурсов, за которые эти процессы могут конкурировать. Это, например, объем памяти или ресурсы процессора.

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

Еще одно применение технологии — использовать контейнер, содержащий экземпляр другого дистрибутива ОС, что позволяет запускать одновременно несколько контейнеров с приложениями, требующими разных дистрибутивов. Такие контейнеры называют системными и применяют их для традиционных приложений: все конфигурации, инструменты (различное вспомогательное ПО) и монолитная архитектура приложения находятся в одном контейнере.

Например, на сервере с Ubuntu Linux запущены контейнеры с приложениями, которым требуется Alpine Linux, а также другие контейнеры с приложениями, которым необходима определенная версия Debian.

Чтобы лучше понять, чем хороши контейнеры, стоит сравнить их с виртуальными машинами.

В чем разница между контейнерами и виртуальными машинами

  1. Виртуальные машины — абстракция на уровне физического оборудования, превращает один сервер в несколькоНа каждой виртуальной машине (ВМ) отдельная гостевая операционная система работает поверх операционной системы хоста с виртуализированным доступом к базовому оборудованию.Виртуальные машины с разными ОС могут работать на одном физическом сервере: ВМ UNIX может работать вместе с ВМ Linux и так далее. Микроядро и система виртуализации, которые создают и запускают виртуальные машины, называются гипервизорами или мониторами ВМ. Это то, что находится между оборудованием и ВМ и необходимо для виртуализации сервера, а также для изоляции операционных систем друг от друга.
  2. Контейнеры — абстракция на уровне приложения, объединяет код и зависимостиКонтейнеры устанавливаются поверх физического сервера и его ОС, например Linux или Windows. Каждый контейнер отделяет свое содержимое от операционной системы. Контейнеры «легкие» — весят всего мегабайты и запускаются за секунды, ведь они берут лишь небольшую часть памяти при совместном использовании ОС.
Источник: blog.netapp.com
Источник: blog.netapp.com

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

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

Преимущества контейнеризации приложений

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

  1. Решается проблема зависимостей в разных окружениях. Отлаженное на одном компьютере приложение можно легко развернуть на другом, ведь контейнер содержит все необходимые зависимости. В этом случае говорят о переносимости, гибкости контейнеров.
  2. Появляется возможность использовать микросервисные архитектуры. Контейнеры хорошо подходят для приложений на основе микросервисов: можно проверить работоспособность каждого контейнера, ограничить каждую службу определенными ресурсами, запускать и останавливать их независимо друг от друга.
  3. Можно заметно сократить время разработки приложения. Некоторые технологии, например кеширование слоев сборки, способствуют ускорению циклов разработки и тестирования.
  4. Снижение накладных расходов. Контейнеры совместно используют системное ядро операционной системы сервера, следовательно, запуск контейнера не требует запуска отдельного экземпляра ОС для каждого приложения. Это повышает эффективность сервера и снижает затраты на сервер и лицензирование.
  5. Легковесность и портативность благодаря тому, что каждый контейнер не содержит образ ОС.
  6. Эффективность. Контейнеры позволяют быстрее развертывать приложения, легче масштабировать их горизонтально, проще находить в них ошибки.
  7. Изоляция ошибок. Выход из строя одного контейнера не влияет на дальнейшую работу других контейнеров.

Безопасность контейнеров

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

Здесь нужно использовать решения, повышающие безопасность контейнеров:

  1. Добиться изолированности процессов с помощью принципа «каждый контейнер — для решения только одной задачи», его еще формулируют как «одно приложение — один контейнер».
  2. Не загружать готовые к использованию контейнеры из ненадежных источников, а в особых случаях использовать исключительно собственные непубличные репозитории с контейнерами (Container Registry), которые интегрируются в CI/CD-среды .
  3. Использовать внутренние функции сервиса контейнеризации по поиску уязвимостей во всем вспомогательном ПО — такое тестирование тоже легко автоматизируется в CI/CD-средах и позволяет исключить развертывание уязвимых контейнеров в продакшене.

Как управляют контейнерами: системы оркестрации

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

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

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

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

Для чего подходит и не подходит контейнеризация

Контейнеризация не подходит : если для работы приложения требуется другая ОС, а не та, что установлена на сервере.

Контейнеризация подходит:

  • для упрощения процесса развертывания и сопровождения приложений;
  • для запуска небезопасного или непроверенного кода с целью тестирования или отладки — для этого контейнеры подходят в 99% случаев;
  • для запуска приложений, требующих другого дистрибутива ОС (системные контейнеры);
  • для передачи отдельных компонентов приложения между членами команды в ходе цикла «разработка — тестирование — внедрение» и быстрого внесения изменений;
  • для микросервисов, которые можно разрабатывать и обновлять независимо;
  • для горизонтально масштабируемых приложений — когда запускается несколько одинаковых контейнеров на текущих ресурсах без увеличения стоимости этих ресурсов. В отличие от вертикального масштабирования, где увеличение количества ядер CPU, объемов RAM, размера HDD на сервере стоит денег;
  • для модернизации и миграции существующих приложений в более современные среды.

Контейнеризация сегодня — популярный подход к разработке приложений и управлению ими. Исследовательская компания Gartner прогнозировала, что к 2020 году 50% компаний будут использовать контейнерные технологии.

Но уже в 2017 году по результатам опроса IBM выяснилось, что внедрение технологии происходит еще быстрее, и уже 59% компаний улучшили качество приложений и сократили количество ошибок с помощью контейнеризации. По самым свежим прогнозам от Gartner, к 2023 году 70% международных компаний будут использовать более двух контейнерны х приложений .

Автор: Ольга Роде

Источник: https://mcs.mail.ru/blog/chto-takoe-kontejnerizacija-prilozhenij

Читайте также статьи по теме:
Простым языком о микросервисной архитектуре для начинающих
С чего начать переход на микросервисы: базовые советы
Зачем крупным компаниям микросервисы, контейнеры и Kubernetes: как эти три технологии выводят IT на новый уровень