0

practicum

Контейнеризация

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

image

Так же, как и ВМ, контейнер изолирован от других контейнеров и хостовой ОС. Он может содержать различные приложения и запускаться на различных платформах.Хорошей практикой считается принцип «один контейнер — один сервис»: так проще обновлять приложения и создавать резервные копии. Например, если вы написали для веб-сервера nginx веб-приложение на Python, поместите сервер и приложение в отдельные контейнеры.

Слоистая архитектура контейнеров

Говоря о контейнерах, часто употребляют термин слой. Любое изменение окружения — установка программы, создание директории — создаёт новый слой. Эти слои накладываются друг на друга.Если на одном сервере оказываются несколько контейнеров с общими слоями (например, библиотеками), то слои не дублируются: они устанавливаются один раз и затем используются совместно.

Преимущества контейнеров

С контейнерами разработка стала эффективнее и проще. Чем же они хороши?

  • Экономия ресурсов. Во-первых, контейнеры занимают меньший объем, чем ВМ: они не содержат отдельных копий ОС и дополнительных программ и утилит. Во-вторых, благодаря общим слоям контейнеры оптимизируют использование ресурсов хоста.
  • Независимость. Контейнер самодостаточен. Всё, что нужно для работы (библиотеки, настройки, среда запуска), находится внутри.
  • Переносимость. Контейнер независим. Платформа, на которой его запускают, неважна: он везде будет работать одинаково. Можно спокойно переносить контейнер с одной платформы на другую.
  • Скорость разворачивания контейнеров и работы в них. Это преимущество следует из предыдущих. Сервер не тратит время на эмуляцию гостевой ОС, а высвободившиеся ресурсы можно направить на увеличение производительности приложений и сервисов.
  • Тиражирование и масштабирование. Собрали контейнер однажды — копируйте его сколько угодно раз. Запускайте одновременно нужное количество копий контейнера. Всё будет работать одинаково.
  • Оркестрация. Дирижёр одновременно управляет множеством музыкантов, играющих на разных инструментах. Вы можете создавать похожие системы из контейнеров, каждый из которых выполняет узкую задачу. Оркестрация — это управление такими системами, т. е. координация работы множества контейнеров. Подробнее о ней мы поговорим на следующих уроках.