Docker: контейнеры, которые могут совершить софтверную революцию

А что мы всё о глобальном, да о глобальном? О рынке облачных технологий и телодвижениях крупных компаний. О ЦОДах в технологическом, экономическом и визионерском смыслах. О том, как корпорация A купила компанию B и теперь, несомненно, завоюет еще не созданный, но уже зарождающийся рынок C. Конечно, прослеживать глобальные тенденции проще – они на виду, а если и не на виду, то стоит немножко копнуть и вот они как на ладони. А дальше прикладываем немного логики, добавляем щепотку здравого смысла, приправим все соусом из свежих аналитических отчетов и вуаля – готов глобальный эпистолярный винегрет!

docker3

Но вот о технологиях, в том числе прекрасных образчиках открытого исходного кода, мы говорим не то чтобы очень много. А ведь и в этих Палестинах происходят крайне интересные вещи! Вот не далее как 26 ноября была у вашего покорного слуги колонка о глобальном, точнее о том, сможет ли кто-то противостоять всесильному Amazon, потихоньку монополизирующему рынок облачных вычислений. Неудивительно, что смельчаки побороться с Amazon находятся и одним из них стал Лукас Карлсон, работающий над продуктом CTL-C. И не стали бы мы обращать внимание на этот продукт, если бы не одна деталь.

CTL-C — это как раз своеобразное объединение IaaS и PaaS, дополненное технологиями AppFog. Но с добавлением одной важной составляющей, без которой продукт CenturyLink мало чем отличался бы от Amazon S3. Карлсон добавил в CTL-C популярную опенсорсную технологию под названием Docker. С функциональной точки зрения это способ запаковать код приложения в подобие цифрового контейнера для переправки между компьютерами или виртуальными машинами. И это, по мнению Лукаса, способно дать бизнесу сразу две ключевых возможности. Первая — кастомизация облачного решения, вторая — возможность на лету перемещать разработки в собственное облако или ЦОД.

Вот именно на Docker хотелось бы взглянуть чуть пристальнее, тем более, что он сейчас в стадии активной разработке и постоянно мелькает в профильных источниках новостей, обрастая всё новыми и новыми функциями, совместимостями, возможностями. Простота и красота этой технологии поразит всякого, кто занимается разработкой или, по долгу службы, так или иначе пересекается с развёртыванием различных приложений в облаках.

По большому счету, Docker – это не более чем «движок», который автоматизирует процесс развёртывания приложения, упаковывая код в контейнер, который может быть запущен как программа практически в любой среде. Как утверждают разработчики, Docker способен инкапсулировать любой код и запустить его на любом сервере. Контейнер, который разработчик тестирует на своем ноутбуке, может быть запущен в продакшене, на виртуальной машине, на сервере, в OpenStack-кластере, публичных инстансах и так далее. По статистике использования Docker на GitHub, наиболее популярные способы внедрения этой технологии таковы: автоматизация упаковки и развёртывания приложений, создание легких и частных PaaS, автоматическое тестирование и непрерывная интеграция приложений, развёвертывание и масштабирование веб-приложений, баз данных и бэкенд-сервисов.

docker1

Какую основную проблему решает Docker? Как пишут сами разработчики, он позволяет устранить то, что называется «dependency hell». В переводе с языка Шекспира на язык Пушкина это, фактически, означает, что Docker устраняет неразбериху, возникающую при большом количестве компонентов и зависимостей между ними. Представьте, что у вас есть множество, условно говоря, софтверных компонентов: пользовательская база данных, ваша база данных, веб-фронтенд, API, наборы статичного кода, статичный веб-сайт и так далее. Все эти взаимосвязанные компоненты нужно уместить в среде «железных компонентов», среди которых виртуальные машины, QA-серверы, дата-центры, публичные облака, продакшен-кластер, пользовательские компьютеры. С точки зрения совместимости все это – полнейший кошмар и ужас. Добавим сюда и тот факт, что приложение должно не только работать в разных средах, но и свободно мигрировать между ними.

Это примерно то же самое, что управление складом и перемещение грузов. Предположим, что у нас есть автомобиль, бочки с вином, бочки с топливом, рояль, мешки с кофе, сервер, ящик со специями. И большое разнообразие инструментов для складирования и перемещения: складские стеллажи, поезда, подъёмные краны, мобильные погрузчики, корабли, грузовики с фургонами. Возникает вопрос – каким образом наиболее оптимально все это уместить, складировать и перемещать, включая перемещения между различными видами транспорта? Получается такое же уравнение со всеми неизвестными, какое у нас вышло при попытке взаимной интеграции софтверных и железных компонентов абзацем выше. 

Но мы ведь пользуемся излюбленным приемом магистров ТРИЗ – перемещаем проблему в иной контекст, решаем её и переводим, посредством аналогии, обратно. Таким образом, для того, чтобы решить проблему с перемещением разнообразных грузов нам нужен... стандартный контейнер! Контейнер, в который можно поместить и упаковать любые товары, при этом он будет запечатан, пока не достигнет пункта назначения. В процессе движения из точки А в точку B он может перемещаться на разных видах транспорта, ведь стандартные размеры предполагают универсальные условия перевозки. По статистике, 90% всех грузов в мире сегодня доставляются в стандартных 40-футовых контейнерах. Это нехитрое изобретение в свое время произвело едва ли не революцию в логистике – стало пропадать и портиться меньше товаров, меньше времени стало уходить на погрузку и разгрузку. Каждый год теперь доставляется не менее 200 миллионов контейнеров по всему миру. Простите мне это логистическое отступление, но если это прекрасно работает в физическом мире, то почему бы такой же технологии не сработать в мире виртуальном?

docker2

Видимо, разработчики Docker подумали точно также. Подумали и создали движок, который позволяет упаковать любые компоненты в легкий, портативный, транспортабельный контейнер, который может запускаться и работать практически на любой «железной» платформе. Получается ситуация win-win для разработчиков и операторов. Первые могут, однажды создав приложение, запускать его где угодно. Вторые, однажды сконфигурировав инфраструктуру, запускать на ней какие угодно приложения – пресловутый «dependency hell» устраняется, таким образом, раз и навсегда.

Контейнерная технология, которая в ближайшее время наверняка наберет популярность, важна потому, что она вполне может оказать такое же экономическое воздействие на рынок облаков и виртуальных машин, какое оказали 40-футовые контейнеры на логистический рынок. Docker позволяет запускать приложения в изолированных контейнерах, которые тем не менее, делят между собой операционную систему и библиотеки. Таким образом, нет необходимости в том, чтобы выделять по виртуальному серверу на каждое приложение. Docker как бы нарезает на кусочки виртуальную машину, делит ее на множество контейнеров и это позволяет сильно сэкономить на вычислительных мощностях, просто за счет оптимизированного распределения ресурсов. Эффективность использования виртуальных машин, таким образом, сильно возрастает. Вероятно, именно поэтому так много интересных продуктов, базирующихся на Docker, появилось в последнее время. На мой взгляд, наиболее интересные из них представители опенсорсного сообщества – это PaaS-платформа Dokku и проект BYO SaaS, который позволяет развернуть собственное SaaS-решение всем желающим. Словом, технология получилась весьма многообещающей. Посмотрим, как Open Source сообщество разовьёт идею.








Последние новости

Подгружаем последние новости