Docker на службе команды .NET-разработчиков
Docker — инструмент автоматизации развертывания и управления приложениями в среде виртуализации на уровне операционной системы. Docker позволяет развертывать приложения в переносимых контейнерах и управлять такими контейнерами. Распространяется компанией Docker как свободное программное обеспечение.
Мы поговорили с Никитой Цукановым из компании Promarket о том, в чем преимущества Docker и как его использовать для развертывания серверных приложений и управления ими.
— В чём актуальность контейнерной виртуализации приложений, как она упрощает развертывание приложений и управление ими?
Корпоративные ИТ-команды очень часто сталкиваются с трудностями в развертывании приложений. Вполне «нормальна», к сожалению, ситуация, когда между разработчиками приложений и ИТ-администраторами отсутствует диалог, когда только один человек в компании знает, какие кнопки надо нажать, чтобы приложение развернулось, а администратор сам ничего сделать не может — потому что существует один-единственный человек, у которого есть сакральные знания о том, как нужно развертывать проект. Случается и такое, что нужно запустить, например, четыре разные версии (иногда почти одинаковые, но все же разные) на разных конфигурациях, на разных машинах, а потом это все поддерживать.
У меня довольно большой опыт подобных проектов, и я выделяю следующие основные проблемы с развертыванием приложений. Первая: очень длинная инструкция по развертыванию, очень сложный процесс развертывания, никто не понимает, что в каком порядке нужно развертывать. Вторая: одно приложение необходимо тиражировать для работы с разными клиентами. Третья: несколько серверных приложений должны работать на одном и том же сервере, и их окружение несовместимо между собой, к примеру, вы решили использовать у себя Linq2Excel, но он требует установки Access Database Engine, 32- и 64-битные версии которого не могут быть установлены одновременно.
— Как эти проблемы помогает решать технология Docker?
Docker использует контейнерную виртуализацию (Рисунок 1), т.е. приложения полностью отделены друг от друга, они изолированы на уровне файловой системы и на уровне процессов. Контейнеры по сути представляют собой легковесные виртуальные машины, каждая из которых запускает отдельный продукт. Docker предоставляет богатый инструментарий для того, чтобы создавать образы таких контейнеров и управлять ими. Фактически Docker позволяет взять любое серверное приложение со всеми его зависимостями, с его базовой файловой системой, и сделать его образ, который затем можно тиражировать и запускать. Когда приложения запущены, они изолированы друг от друга, и вся необходимая файловая система у каждого приложения своя.
Рисунок 1
Изначально Docker был набором утилит и сервисов, которые работали поверх встроенного инструментария ядра Linux, настраивая изоляцию процессов и предоставляя управление образами файловой системы. Затем вокруг Docker выросла достаточно большая инфраструктура (Рисунок 2). Например, Docker Hub — это место, где можно централизованно хранить контейнеры, отдельный депозитарий для ваших собственных контейнеров, поскольку они являются интеллектуальной собственностью компании. Инструмент Docker Swarm позволяет управлять контейнерами Docker. А последняя новость о Docker — то, что он будет теперь доступен и для создания контейнеров на базе Windows Server.
Рисунок 2
Один из распространенных примеров использования Docker — решение проблем документации процесса развертывания. Дело в том, что Docker-контейнер создается не вручную, а посредством специального скрипта. Поэтому для каждого Docker-контейнера существует скрипт, который можно запустить, чтобы создать такой же контейнер еще раз; в этом скрипте хорошо виден весь процесс развертывания, а для обновления приложения достаточно обновить его дистрибутив, используемый этим скриптом.
— Насколько популярна технология Docker?
Как я уже сказал, существует ресурс Docker Hub, на котором пользователи размещают готовые образы контейнеров для разных приложений. На данный момент у этого ресурса более 400 тыс. пользователей, зарегистрировано более 2 млрд скачиваний с Docker Hub, таким образом, технология достаточно популярна. Неудивительно, что компания Docker, которая разработала инструмент и занимается поддержкой основных сервисов, получила существенные инвестиции.
— Чем технология Docker интересна для .NET-разработчиков?
Тем же, чем и для всех остальных разработчиков — технология Docker радикально упрощает развертывание приложений в разных сферах. Непосредственно для разработчиков программного обеспечения важно иметь возможность быстро настроить любое количество тестовых конфигураций для развертывания версий приложений, и Docker позволяет создавать такие конфигурации любой сложности.
— Когда технология стала доступна на платформе Windows Server? Какова была роль Microsoft?
Корпорация Microsoft является одним из главных партнеров Docker и непосредственно занимается разработкой Docker для Windows Server, он будет доступен уже в 2016 г., предварительная версия доступна уже сейчас. Соответственно, если объединять серверы на базе Windows Server и системы на базе Linux в один кластер через Docker Swarm, разнородные контейнеры будут «видеть» друг друга в этом кластере и смогут взаимодействовать, у них будут совместимые API, т.е. можно будет выбрать один и тот же инструментарий для управления и тем, и другим. Таким образом, вы может получить сервер, на котором будет, по сути дела, работать кластер из двух машин, и можно будет запускать как Windows-контейнеры, так и Linux-контейнеры.
3 июня в Санкт-Петербурге состоится конференция конференция .NET разработчиков DotNext, и Никита Цуканов выступит на ней с докладом «Docker на службе команды .NET-разработчиков»