Docker – средство автоматизации управления приложениями, виртуализированными на уровне ОС. Каждое приложение вместе со всеми своими зависимостями и окружением помещается в так называемый контейнер. Контейнеры изолированы друг от друга на уровне ядра ОС: вычислительные ресурсы, ресурсы ввода/вывода, пространства имен, файловые системы для каждого контейнера свои. Их можно легко тиражировать, запускать на различных серверах (строго говоря, тиражируются образы, и из этих образов запускаются контейнеры). При этом специализированной настройки ОС для запуска не требуется, т.к. все необходимое окружение в контейнере присутствует. И самое интересное – контейнеры можно наследовать. Т.е. можно взять имеющийся контейнер, «пристроить» к нему некое приложение и получить новый контейнер с приложением. Таким образом программисты реализовали объектно-ориентированный подход в ИТ-инфраструктуре.
Выглядит это так (см. рис. 1).
Рис. 1. Технология контейнеризации в Linux
Это решение отдаленно напоминает серверную виртуализацию. Но виртуализируются не серверы целиком, а отдельные приложения. На первый взгляд, решаемые задачи похожи, но общего в этих технологиях только то, что появляется возможность абстрагировать полезную нагрузку от сервера, на котором она выполняется.
Табл. 1. Сравнение контейнеризации и серверной виртуализации
| Контейнер | Виртуальная машина |
Что включает? | Приложение (или его компонент) и необходимые ему библиотеки | ОС, драйверы, системное и прикладное ПО |
Совместимость | Требуется совместимость на уровне ядра ОС (ограниченная обратная совместимость) | Требуется поддержка на уровне ЦПУ (есть во всех современных устройствах) |
Объем | Меньше | Больше |
Эффективность использования вычислительных ресурсов | Выше (включает только ПО и его зависимости) | Ниже (помимо ПО, включает ОС, драйверы и т.п.) |
Возможности тиражирования и наследования | Широкие возможности | Тиражирование: можно создавать ВМ из шаблона, после чего она становится независимой (связь с исходной ВМ теряется). |
Отделить приложение от данных | Можно, встроено в технологию контейнеризации | Можно с помощью средств системы хранения данных и правильного конфигурирования ПО при инсталляции |
Изоляция приложений друг от друга | Хуже (на одном хосте одно ядро ОС) | Лучше (известно очень мало способов попасть из одной ВМ в другую в обход средств безопасности) |
Выводы? Делать их пока рановато. Сама технология контейнеризации – это лишь часть необходимой инфраструктуры. Аналоги привычных технологий мира серверной виртуализации (vMotion, HA, резервное копирование) пока в стадии разработки. А без них сложно говорить о применимости Docker в Enterprise-секторе. Также важны средства преобразования имеющегося приложения в контейнер – P2C (аналог P2V).
Дмитрий Глушенок, системный архитектор компании «Инфосистемы Джет»
Основная практика применения контейнеризации – в сфере облачных сервисов. Разработка таких сервисов, тестирование, релиз-менеджмент, эксплуатация (все эти Continuous Integration, DevOps) – все делается с помощью контейнеров (не обязательно Docker, но с той же идеологией). В разработке преимущества технологии – в возможности воссоздавать среды для самой разработки (на ноутбуке программиста), тестирования (где-нибудь в виртуальном ЦОД, облаке) и развертывания (например, в другом виртуальном ЦОД, облаке). Все среды получаются одинаковыми и не подвержены расхождению конфигураций со временем. С точки зрения эксплуатации плюсы заключаются в стабильности кода (благодаря более качественной разработке), независимости от платформы (приложение в контейнере работает на любом современном дистрибутиве Linux) и возможностях масштабирования и обновления версий без прерывания сервиса. Частный случай – применение контейнеров в Enterprise-сегменте для собственных разработок (в основном для интернет-сервисов). Преимущества те же, что и у облачных приложений.
Однако уже сейчас есть живой интерес заказчиков к использованию этой технологии для массового тиражирования и эксплуатации типового ПО (например, для автоматизации деятельности магазинов). О своей приверженности технологиям контейнеризации заявляют и крупнейшие вендоры – Microsoft, IBM, Red Hat, Oracle.