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

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