Зачастую корпоративное программное обеспечение обвиняют в консервативности и неудобстве, когда речь заходит о гибкости и способности подстраиваться под изменения процессов или задач. Однако все – инженеры-разработчики, ИТ-специалисты и пользователи – хотят иметь под рукой быстродействующий и легко настраиваемый продукт, который в то же время стабилен и безопасен.
Или, по крайней мере, такие требования могут – и должны — предъявляться к инструментам разработки корпоративных приложений.
К счастью разработчиков, выпуск на рынок такого инструмента как Docker в 2013 году значительно облегчил жизнь в этом плане. Хотя эта статья в основном предназначена для разработчиков и ИТ-специалистов, которые, возможно, еще не знакомы с контейнерами Docker, но хотят внедрить эту технологию в ИТ-среду своего предприятия, я также продемонстрирую, что руководители предприятий тоже получат значимую выгоду от использования Docker.
Что это такое?
Docker — программное обеспечение с открытым кодом для автоматизации развёртывания и управления приложениями в средах с поддержкой контейнеризации.
Контейнеры Docker характеризуются небольшими размерами, легко переносимы и управляемы; они стартуют практически моментально, при этом в них встроен собственный механизм поддержки версионности и повторного использования компонентов. Контейнеры Docker можно использовать для любого стека технологий, приложений или сервисов. В контейнере можно разместить сайт, микросервис или обернуть движок базы данных. Благодаря своим преимуществам Docker стал практически массовым продуктом, но наиболее широкое применение он получил в разработке и реализации микросервисов.
Где работает технология Docker
Итак, вы находитесь на стадии принятия решения о внедрении в вашей организации технологии Docker. Начнем с того, как и где работает технология Docker-контейнеризации. Docker представляет собой систему управления контейнерами. Он позволяет «упаковать» приложение, микро-сервис или веб-сайт со всем его окружением и зависимостями в контейнер. В дальнейшем контейнером можно будет легко управлять: переносить на другой сервер, масштабировать, обновлять.
Изначально Docker работал только с Linux-системами, однако теперь его можно использовать также в Windows и MacOS. Нужно, все же, уточнить, что Windows образы (images) можно запустить только на хосте с ОС Windows, а Linux образы (images) могут быть запущены на хостах с ОС Linux и OC Windows (при использовании Hyper-V Linux VM). В данном контексте под хостом может подразумеваться сервер или виртуальная машина (VM).
При установке Docker регистрирует необходимую виртуальную машину (Docker хост) для запуска контейнеров, используя заранее созданные образы.
Разница между виртуальными машинами и Docker контейнерами
Когда говорят о контейнеризации, бывает, что ее ассоциируют с виртуализацией, однако, путать эти два понятия не следует. Рассмотрим отличия структуры Docker-контейнеров от структуры виртуальной машины. На рисунках представлены схемы виртуальной машины и контейнеров Docker.
Контейнеры запускают (загружают в память на выполнение) приложения и все их зависимости. Ресурс ядра ОС распределен между контейнерами, которые выполняются как изолированные процессы на хосте OC.
Виртуальные машины запускают на выполнение приложения с необходимыми библиотеками и полноценной гостевой ОС. Полная виртуализация предполагает больше аппаратных ресурсов, чем контейнеризация.
Поскольку контейнеры требуют намного меньше ресурсов (например, они не требуют ОС полностью), они просты для развертывания и запускаются быстрее. Это позволяет запустить больше серверов на одном аппаратном блоке, экономя средства предприятия на закупку серверов и, соответственно, уменьшая стоимость эксплуатации и поддержки.
С другой стороны, виртуальные машины обеспечивают большую изоляцию приложений, чем контейнеры (что может быть более востребовано в отдельных отраслях, например, регулируемых стандартами).
Основная цель образов контейнеров – обеспечить одинаковое окружение и зависимости при развертывании приложений. Это означает, что можно отладить приложение на машине разработчика и затем развернуть гарантированно идентичное окружение на другой машине.
И нельзя забывать, что развертывание и сопровождение виртуальных машин требует не только ресурсов, но и значительного времени. В конце концов, основное бизнес требование к виртуальным машинам в настоящее время – их переносимость на другие платформы.
Преимущества внедрения платформы Docker
Итак, какие преимущества может дать внедрение платформы Docker в промышленных корпорациях? Рассмотрим их по порядку:
Во-первых, это быстрое развертывание на тестовых и промышленных серверах. Нет необходимости тратить много времени, чтобы настраивать окружение отдельно для разработки, тестирования и на промышленном сервере. При этом использование контейнеров гарантирует совпадение инфраструктуры во всех используемых средах.
Во-вторых, устраняется проблема несовпадения окружений в разных средах, и как следствие исчезают связанные с ними ошибки (проблема, когда «все работает на моей машине и не работает на промышленном сервере»). Все необходимое окружение упаковывается в контейнер и быстро разворачивается на всех средах, включая промышленную. На хосте или на машине конечного пользователя не нужны установки дополнительных компонент или зависимостей для запуска приложения, которое находится внутри контейнера, достаточно возможности запуска Docker-контейнера.
В-третьих, Docker позволяет использовать любой язык или стек технологий на одном сервере, решает проблему несовместимости различных технологий и конфликта версий используемых библиотек.
В-четвертых, обновление контейнеров может происходить в реальном времени, без необходимости перезагрузки промышленного сервера и остановки работы пользователей.
В-пятых, упрощается процесс администрирования. Облегчается процесс по переносу контейнера с одного работающего сервера на другой. Контейнер позволяет запустить несколько экземпляров образов, например, при кратковременной пиковой нагрузке. Проще реализуется обновление одного или группы контейнеров. В случае выявления проблем можно быстро откатиться к старой версии – поддерживается версионность.
В-шестых, решается проблема безопасности приложения, так как контейнеры работают в частичной изоляции друг от друга на уровне процессов и операционной системы, на которой запущен Docker. При этом контейнер работает на том же самом ядре, что позволяет ему очень быстро запускаться. Запуск сотни контейнеров на рабочей машине не будет проблемой.
В-седьмых, технология помогает извлечь экономические выгоды. Контейнеры Docker позволяют исполнять на каждом сервере больше кода, повышая эффективность использования ресурсов и сокращая расходы.
Наконец, есть возможность автоматизации компоновки образа контейнера, а именно возможность написания процедур для создания нового образа. То есть для настройки среды можно писать код и сохранять его в системе контроля версий.
Преимущества внедрения Docker для руководителей предприятий или департаментов
Если вы не разработчик и не DevOps-инженер, а ваш бизнес не имеет прямого отношения к разработке ПО, то зачем вам вообще знать о Docker? Вы удивитесь, но темпы внедрения Docker корпорациями быстро растут. Исследование компании Datadog, в котором приняли участие почти 10000 респондентов, показало, что более 35% компаний уже внедрили Docker к январю 2018 года. Это подтверждает и компания Sysdig, изучившая 90000 контейнеров в Северной и Латинской Америке, в Европе, Африке, на Ближнем Востоке и в Азиатско-Тихоокеанском регионе (около 6000 хостов). Исследование показало, что 83% из них использовали Docker.
В качестве владельца бизнеса вы можете столкнуться со множеством трудностей, как только компания начинает разрастаться. Среди них обеспечение всех сотрудников быстрым и надежным доступом к унифицированным или, наоборот, уникальным настройкам групп пользователей применительно к корпоративному программному обеспечению. А еще вы наверняка стремитесь к тому, чтобы рабочая нагрузка приложений распределялась эффективно, равномерно и могла бы быть легко перенесена на другие платформы. В таком случае, Docker и контейнеризация могут решить ваши проблемы.
С точки зрения бизнеса преимущества, упомянутые в предыдущей части статьи, означают, что (1) все ваши сотрудники, несмотря на их местонахождение, получат доступ к одной и той же рабочей среде (т.е. вы затратите намного меньше времени и ресурсов на отслеживание и развертывание приложений в каждой локации или даже на рабочей станции); (2) ваш ИТ-отдел сможет минимизировать количество ошибок при развертывании и обновлении приложений, что значительно сократит время, затрачиваемое на незапланированную работу; (3) вы не будете ограничены настройками программы или оборудования (что также позволит сократить бюджет и временные издержки); и (4) если вам потребуется модифицировать свои программные системы или приложения в соответствии с изменениями бизнес-процессов, это можно сделать быстрее и с меньшими затратами (опять же – денег, времени и ресурсов).
При всем том, надо иметь в виду, что Docker отнюдь не будет решением всех проблем. Внедрение контейнеров Docker подходит не всем компаниям и требует расходов на этапе внедрения. Необходимо также заложить время и бюджет на обучение персонала или найм DevOps-эксперта, что может быть очень недешево. Потребуются дополнительные ресурсы на конфигурацию. Не исключен вариант, при котором придется вносить изменения (и планировать соответствующие затраты) на дозакупку аппаратного обеспечения и обновления стека технологий или рассматривать возможность поиска разработчиков для требующейся модификации внутренних систем (или даже замены их архитектуры на микросервисы).
Значит ли это, что вы вне игры, если у вас нет подходящих разработчиков или времени для найма и тренингов? Вовсе нет! На рынке представлено достаточно много компаний, предоставляющих сервисы по разработке и развертыванию ПО. Главное подойти к процессу выбора партнера внимательно и выбрать надежного подрядчика, который сможет провести грамотный бизнес-анализ процессов и потребностей вашей компании или отдела, проверить инфраструктуру и среду на соответствие этим требованиям, разработать кастомизированное решение и обучить ваш персонал.