
В мире современного ПО мало что может сравниться по крутости с Docker и Kubernetes.
Возьмем, к примеру, Docker. Название самой платформы, по сути, уже стало нарицательным и часто используется для обозначения технологии контейнеризации как таковой. Сегодня можно запросто услышать, как разработчик говорит «докер», имея в виду контейнеры в целом, и скорее всего он считает Docker лучшей платформой контейнеризации.
Kubernetes, в свою очередь, называют одной из самых скоростных платформ за всю историю ПО с открытым исходным кодом, и в действительности так оно и есть. Изначально компания Google разрабатывала инструмент для внутреннего пользования под названием Borg, который затем разросся до платформы контейнерной оркестрации с открытым исходным кодом, известной как Kubernetes.
Хотя первопроходцы уже получили хороший гандикап, многие ИТ-специалисты и организации только начинают осваивать контейнеры, технологии контейнерной оркестрации и сопутствующие тренды. В этой статье мы объясним, что такое и Docker, и Kubernetes, а также с чем их едят, разберем главные тренды и сценарии использования, расскажем об основных принципах их работы и ответим на самые животрепещущие вопросы, например: «Обязательно ли я должен выбрать одно или другое?» (спойлер: нет, не обязательно, и мы сейчас объясним, почему).
Погнали!
Согласно собственному определению Docker, образ контейнера — это «легкий, автономный, исполняемый программный пакет, в котором есть всё необходимое для его выполнения: код, среда выполнения, служебные программы, системные библиотеки и настройки».


Иначе говоря, в контейнер упаковано всё, что нужно приложению — не просто голый код, а все зависимые объекты, библиотеки и данные конфигурации, и, кроме того, контейнер отделяет это всё от любой физической или виртуальной среды, в которой приложение будет работать. При идеальном раскладе это значит, что ваш код нормально работает во всех средах (от разработки и тестирования до продуктивной среды) как на локальных машинах, так и в облаке, и даже отладка не нужна. Кто-то называет это виртуализацией на уровне операционной системы, но термин «контейнер» привычнее и пользуется большей популярностью.
Главная причина, по которой название Docker стало нарицательным среди платформ контейнеризации, заключается в том, что Docker первым научился упаковывать расширенные функции ядра Linux вместе, тем самым позволив командам разработчиков быстрее создавать упаковываемые продукты, способные работать на разных серверах.
Контейнеры Docker существенно облегчили жизнь разработчиков, которые теперь могут одинаково эффективно работать в локальных, тестовых, промежуточных и продуктивных средах, везде запуская один и тот же готовый продукт или образ контейнера Docker.
Это ускорило разработку и развертывание: вместо того, чтобы строить с нуля целый сервер для запуска сервиса или приложения, можно запустить образ контейнера Docker на хосте и, задействовав немного ресурсов хоста, запустить сервис или приложение, даже в нескольких средах.
Разница особенно заметна при сравнении с образами традиционных виртуальных машин: контейнеры весят меньше и эфемерны, а значит их можно разворачивать и сворачивать по мере увеличения или уменьшения ресурсов или масштабирования приложения.
Контейнеризация дает много преимуществ в эпоху DevOps, облачных архитектур и набирающих популярность распределенных вычислительных сред, что поспособствовало быстрому и широкому распространению Docker.
Конечно, контейнеризированные процессы могут быть сложными. Первые адепты Docker очень скоро обнаружили, что они заполнили контейнеры сотнями или даже тысячами рабочих нагрузок. Всё это быстро привело к проблемам эксплуатации, ведь масштабируемость стоит денег.
Когда у вас 10 контейнеров и четыре приложения, контейнерная оркестрация — это не повод для беспокойства. Но если у вас 1 000 контейнеров и четыре сотни сервисов, то все уже не так просто. Еще немного, и черт ногу сломит.


Добро пожаловать в эпоху Kubernetes и контейнерной оркестрации. Kubernetes — это инструмент, автоматизирующий развертывание, масштабирование и управление контейнерными приложениями. Автоматизация — ключевое слово и одна из причин, по которой Kubernetes становится все более популярным среди инженеров и других специалистов, отвечающих за работоспособность веб-сайтов, инфраструктур и эксплуатацию систем. Kubernetes позволяет управлять непрерывной оркестрацией тысяч контейнеров, т. е. ваши сервисы будут всегда доступны.
На первых порах организации использовали один из нескольких инструментов с открытым исходным кодом, в том числе Kubernetes, или создавали собственные для управления контейнерами в масштабе. Однако Kubernetes постепенно становится для оркестрации тем, чем Docker уже стал для контейнеризации, т. е. именем нарицательным.
По сути Docker и Kubernetes не исключают, а, наоборот, дополняют друг друга как части более крупной системы, и вопрос выбора между ними просто не стоит. К слову, недавний опрос, проведенный организацией The New Stack, показал, что переход на контейнеры приводит к внедрению Kubernetes, причем оба процесса неразрывно связаны между собой. (Мы подробнее осветим эту тему ниже в обзоре рынка.)
О Docker и Kubernetes закрепилось ложное представление как о конкурентах (либо одно, либо другое), но, как говорится, нет дыма без огня. Дело в том, что в экосистеме Docker есть собственное решение для контейнерной оркестрации Docker Swarm — функциональный аналог Kubernetes.
Кто бы ни одержал безоговорочную победу в контейнерной оркестрации, Kubernetes был как никогда к этому близок в 2018 г. Доказательства? Docker добавил мощную поддержку для Kubernetes в начале года, выпустив официальный релиз Docker Enterprise Edition 2.0, которой позволяет пользователям запускать Kubernetes и Docker Swarm на одном кластере.
Иногда, если речь идет не о продуктивной среде, а только о средах разработки или тестирования, использовать контейнеры Docker можно и без Kubernetes. Принято считать, что Docker Swarm легче использовать, тогда как большинству пользователей освоение Kubernetes дается куда труднее.
Однако стоит организациям переместить огромные контейнеризированные рабочие нагрузки в продуктивную среду, сразу становится понятно, что нет ничего лучше Kubernetes (статистические данные будут уже через пару строк). Теперь, когда Docker облегчил бизнесу использование Kubernetes, у этого легендарного дуэта появится еще больше фанатов.
Давайте немного сменим тему и посмотрим на ценность контейнеров в долларовом эквиваленте. По прогнозам исследовательской группы 451 Research, рынок контейнеров приложений вырастет с запланированных 1,5 млрд долл. США в 2018 году до 2,7 млрд долл. США в 2020 году. Неплохо, учитывая, что Docker существует всего лишь пять лет, а Kubernetes 1.0 вышел в июле 2015 года.
Достоверные данные о доле рынка контейнеризации достаточно сложно найти, потому что рынок еще только формируется, но приведенные выше цифры указывают на то, что он стремительно растет.
Например, исследовательская группа 451 Research во время ежеквартального опроса Voice of the Enterprise обнаружила, что 23,7% респондентов уже применяют контейнеризацию, а недавний опрос, проведенный компанией New Relic, показал, что эта тенденция гораздо ярче прослеживается среди пользователей публичного облака: 26% респондентов предпочитают пользоваться контейнерами, а 39% — контейнерной оркестрацией. Кроме того, группа 451 Research отмечает, что все больше компаний используют контейнеры в продуктивной среде, т. е. мы сейчас переживаем переходный период, и скоро еще больше компаний будут использовать контейнеры уже не только в средах разработки и тестирования, но и в продуктивной среде.
В марте 2018 года по случаю пятилетнего юбилея Docker компания подвела итоги: скачано 37 млрд контейнеров, 3,5 млн приложений упаковано в контейнеры Docker, более 450 клиентов пользуются корпоративной версией Enterprise Edition.
Kubernetes тоже продолжает завоевывать мир. Организация New Stack опубликовала электронную книгу «Текущее состояние экосистемы Kubernetes», где собран богатый пользовательский опыт и, в частности, сказано, что многие организации не осознают, насколько важна оркестрация, пока не начнут развертывать контейнеры в продуктивной среде.
Данные исследования можно посмотреть на сайте New Stack: 60% организаций, активно использующих контейнеры в продуктивной среде, используют и Kubernetes, а еще 19% — только начали использовать Kubernetes в продуктивной среде. Аналогично, 58% компаний, которые только начинают использовать контейнеры в продуктивной среде, сообщают, что только начали использовать в ней и Kubernetes. При этом 22% респондентов пока думают, стоит ли переходить на Kubernetes.
Чем же обусловлен такой спрос на контейнеры? Рассмотрим несколько значимых и часто пересекающихся примеров, когда точно стоит использовать контейнеры:
Возможно, главной причиной перехода на Kubernetes, на самом деле, стало внедрение контейнеров. Как уже было сказано выше, многие организации осознают, что использование внушительного количества контейнеров, особенно в продуктивной среде, требует хорошей оркестрации.
Помимо этого, еще несколько трендов повлияли на развитие Kubernetes.
Хотя Docker и Kubernetes появились относительно недавно, они стремительно развиваются и демонстрируют внушительный потенциал. Многие компании и команды DevOps только начинают вгрызаться в этот гранит, и им точно понадобятся крепкие зубы.