Мы поговорили с Никитой Цукановым aka kekekeks о том, в чем преимущества 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-разработчиков»
Комментарии (12)
0x0FFF
02.06.2016 15:28+1Сообщество Linux в течении более чем 10 лет разрабатывало функционал ядра Linux для поддержки приложений вроде LXC и Docker — это и cgroups для контроля потребления ресурсов, и различные namespace для изоляции процессов, и различные union fs вроде aufs для поддержки файловой системы контейнера, и виртуальные сетевые адаптеры. Это всё в ядре Linux, и что-то уже очень давно.
Похоже, Microsoft желает сделать то же самое за год-другой. Конечно, ни о каком запуске контейнеров Linux в Windows речи не идет — для этого Windows должен поддерживать чересчур много системных вызовов Linux, от чего они пока весьма далеко. Но прогресс идет в этом направлении, что весьма интересно — сначала Linux пытался догнать Windows, улучшая GUI и борясь за десктопных пользователей, а теперь Microsoft эмулирует системные вызовы Linux и портирует функционал их ядра, борясь за серверных пользователей.23derevo
02.06.2016 15:33Да, это действительно очень занятно наблюдать. Видимо, MS поняли, что проигрывают серверный рынок. Еще из трендов — вы забыли упомянуть оперсорс. Это тоже штука, которая долго была в Linux-мире, а теперь перекочевала в Windows-мир.
0x0FFF
02.06.2016 15:43-4Пока ядро Windows проприетарно, добиться успеха в области серверных приложений у них не получится. Кто делает вклад в ядро Linux: Intel, Red Hat, Samsung, IBM, SUSE, Texas Instruments, Google, всего более 1200 компаний. Кто делает вклад в ядро Windows: Microsoft. У них просто нет такого количества квалифицированных ресурсов, чтобы конкурировать с таким большим open source сообществом
Umed
03.06.2016 06:48-2По данным Википедии: Number of employees 118,584 (March 2015). И вправду не хватает квалифицированных ресурсов.
0x0FFF
03.06.2016 09:42-2Intel: 107'300, Red Hat: 8'300, Samsung: 307'000, Google: 57'100, IBM: 377'757, TI: 31'003 — мне продолжать по остальным 1294 компаниям?
К тому же из 118,584 человек в Microsoft только 43,860 инженеры. Из них, например, над Windows 7 работали 2'000 разработчиков. По другой информации всего над Windows работает около 5'000 человек
Лично я считаю, что Microsoft движется в правильном направлении, но они сильно опоздали на этот рынок. Я профессионально занимаюсь кластерными системами, и по моему опыту серверные инсталляции Windows популярны только в Израиле (из всего региона EMEA). Так же, например, Microsoft опоздали на рынок мобильных ОСUmed
03.06.2016 09:52А сколько человек из выше названных компаний работают над ядром Linux?:)
Не будем сориться, просто не вижу ничего плохого в том, что ядро Windows закрытое, они же там не совсем криворукие и дураки.
и маленькое замечание:
Пока ядро Windows проприетарно, добиться успеха в области серверных приложений у них не получится...
Лично я считаю, что Microsoft движется в правильном направлении, но они сильно опоздали на этот рынок.
так проприетарно плохо или хорошо?
И причём тут мобильный рынок?0x0FFF
03.06.2016 10:38Правильное направление — признание лидерства Linux в области серверных ОС и работа в сторону лучшей с ним интеграции (нативный запуск Linux-приложений в Windows, версия MSSQL для Linux, портирование Docker и Hadoop, и т.д.)
Проприетарно — это не хорошо и не плохо, это по-другому. Но проприетарность серверной ОС — это то, с чем многие разрабатывающие софт компании не хотят мириться, т.к. для них разработка под такую платформу является более высоким риском, чем разработка под открытую платформу.
Мобильные ОС (смартфоны) — пример рынка, на который MS также опоздала, и так и не сумела выйти в лидеры
kekekeks
03.06.2016 00:56+2Похоже, Microsoft желает сделать то же самое за год-другой.
У них уже работают аналог aufs и разделение по группам процессов, равно как и сетевые адаптеры, правда, пока только в режимах nat, bridge и каких-то специфичных для Azure. Overlay network из состава используемой докером libnetwork пока не поддерживается, но к релизу скорее всего будет.
Windows должен поддерживать чересчур много системных вызовов Linux, от чего они пока весьма далеко
А можно конкретнее, чего именно не хватает для того, чтобы запустить линуксовый докер-контейнер? Поскольку их Linux Subsystem for Windows по сути оным и является — запускается отдельное дерево процессов со своей файловой системой, лежащей в ФС хоста, не хватает только приватной сети и поддержки аналога aufs, которые уже реализованы для виндовых контейнеров. После объединения вышеперечисленного останется допилить обвязку в виде демона докера.
olen
Можно ли будет в докере запускать Windows приложения (например, MS SQL Server)? Или речь идет только о возможности запуска линукс контейнеров на ОС Windows?
build_your_web
Конкретно MS SQL Server запускать можно будет, т.к. скоро должна выйти Linux версия (без шуток).
kekekeks
В контейнерах Windows Server Core MSSQL уже заводят. Единственное, там не будет работать кластеризация этого самого MSSQL, у винды слишком много порезали, чтобы в докер впихнуть.