Docker — инструмент автоматизации развертывания и управления приложениями в среде виртуализации на уровне операционной системы. Docker позволяет развертывать приложения в переносимых контейнерах и управлять такими контейнерами. Распространяется компанией Docker как свободное программное обеспечение.

Мы поговорили с Никитой Цукановым 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)


  1. olen
    02.06.2016 14:21
    +2

    Можно ли будет в докере запускать Windows приложения (например, MS SQL Server)? Или речь идет только о возможности запуска линукс контейнеров на ОС Windows?


    1. build_your_web
      02.06.2016 20:50

      Конкретно MS SQL Server запускать можно будет, т.к. скоро должна выйти Linux версия (без шуток).


    1. kekekeks
      03.06.2016 00:51

      В контейнерах Windows Server Core MSSQL уже заводят. Единственное, там не будет работать кластеризация этого самого MSSQL, у винды слишком много порезали, чтобы в докер впихнуть.


  1. 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 и портирует функционал их ядра, борясь за серверных пользователей.


    1. 23derevo
      02.06.2016 15:33

      Да, это действительно очень занятно наблюдать. Видимо, MS поняли, что проигрывают серверный рынок. Еще из трендов — вы забыли упомянуть оперсорс. Это тоже штука, которая долго была в Linux-мире, а теперь перекочевала в Windows-мир.


      1. 0x0FFF
        02.06.2016 15:43
        -4

        Пока ядро Windows проприетарно, добиться успеха в области серверных приложений у них не получится. Кто делает вклад в ядро Linux: Intel, Red Hat, Samsung, IBM, SUSE, Texas Instruments, Google, всего более 1200 компаний. Кто делает вклад в ядро Windows: Microsoft. У них просто нет такого количества квалифицированных ресурсов, чтобы конкурировать с таким большим open source сообществом


        1. Umed
          03.06.2016 06:48
          -2

          По данным Википедии: Number of employees 118,584 (March 2015). И вправду не хватает квалифицированных ресурсов.


          1. 0x0FFF
            03.06.2016 09:42
            -2

            Intel: 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 опоздали на рынок мобильных ОС


            1. Umed
              03.06.2016 09:52

              А сколько человек из выше названных компаний работают над ядром Linux?:)
              Не будем сориться, просто не вижу ничего плохого в том, что ядро Windows закрытое, они же там не совсем криворукие и дураки.

              и маленькое замечание:

              Пока ядро Windows проприетарно, добиться успеха в области серверных приложений у них не получится...

              Лично я считаю, что Microsoft движется в правильном направлении, но они сильно опоздали на этот рынок.


              так проприетарно плохо или хорошо?

              И причём тут мобильный рынок?


              1. 0x0FFF
                03.06.2016 10:38

                Правильное направление — признание лидерства Linux в области серверных ОС и работа в сторону лучшей с ним интеграции (нативный запуск Linux-приложений в Windows, версия MSSQL для Linux, портирование Docker и Hadoop, и т.д.)

                Проприетарно — это не хорошо и не плохо, это по-другому. Но проприетарность серверной ОС — это то, с чем многие разрабатывающие софт компании не хотят мириться, т.к. для них разработка под такую платформу является более высоким риском, чем разработка под открытую платформу.

                Мобильные ОС (смартфоны) — пример рынка, на который MS также опоздала, и так и не сумела выйти в лидеры


                1. Umed
                  03.06.2016 10:47

                  Теперь стало понятно, что Вы имели ввиду. Благодарю за разъяснения. :)


    1. kekekeks
      03.06.2016 00:56
      +2

      Похоже, Microsoft желает сделать то же самое за год-другой.

      У них уже работают аналог aufs и разделение по группам процессов, равно как и сетевые адаптеры, правда, пока только в режимах nat, bridge и каких-то специфичных для Azure. Overlay network из состава используемой докером libnetwork пока не поддерживается, но к релизу скорее всего будет.


      Windows должен поддерживать чересчур много системных вызовов Linux, от чего они пока весьма далеко

      А можно конкретнее, чего именно не хватает для того, чтобы запустить линуксовый докер-контейнер? Поскольку их Linux Subsystem for Windows по сути оным и является — запускается отдельное дерево процессов со своей файловой системой, лежащей в ФС хоста, не хватает только приватной сети и поддержки аналога aufs, которые уже реализованы для виндовых контейнеров. После объединения вышеперечисленного останется допилить обвязку в виде демона докера.