• Sistal © (06.04.17 20:34) [0]
    То там, то здесь постоянно слышу, что многие пользуются Docker и сильно рады тому, как он облегчает процесс разработки IT-решений. Но читаю вики, читаю хабр и не могу понять что это за зверь.
    По преимуществам пишут обычно что-то вроде такого:

    "Docker помогает выкладывать ваш код быстрее, быстрее тестировать, быстрее выкладывать приложения и уменьшить время между написанием кода и запуска кода"

    Как можно помочь выкладывать код быстрее, ведь пока код не напишешь до конца - программа будет не рабочая. А сам код классически хранится в системах контроля версий, ну например git. Получается Docker - это какая то альтернатива git'у?

    Что значит быстрее тестировать? Ты даешь тестировщику готовые EXE (ну или инсталяционный файл), он запускает / устанавливает и тестирует, как можно это быстрее сделать? Это некий аналог автоматических тестов? Или это аналог setup'а?

    Насчет выкладывания - тут я, кажется, больше пониманию. Обычно проводится параллель с виртуальными машинами, то есть это такой набор образов виртуальной машины?
    Но чем удобно выкладывать ПО в виде образов ВМ? В обычных корпоративных приложениях все настройки зачастую хранятся в БД, поэтому если говорить о неких начальных данных в системе, чтобы быстро приступить к тестированию - то можно просто приложить дамп БД с набитыми данными, в этом случае Docker не нужен?

    Если же речь о том, что в образе ВМ будут уже все нужные драйвера, то это ведь тоже частично применимо только. Например, система требует наличия у оператора / тестировщика фискального аппарата (допустим, это кассовое ПО). Но ты же не можешь вложить в образ настройки на определенный фискальник, ты же не знаешь на каком хотя бы порту у тестировщика висит этот самый фискальник. Или Docker как то в этом может помочь? Ведь нужно промапировать порт из ВМ в реальную ОС?

    В общем, я чувствую, что здесь есть какая то фишка, но никак не могу понять - в чем? Если у кого есть опыт - можете кратко описать своими словами?
    Какой-нибудь реальный разбор примера, когда Docker упрощает жизнь?
  • Sistal © (06.04.17 20:36) [1]
    И не понял даже базовой вещи - Docker это только для Linux (судя по вики) или это кросс-платформенное решение и на Windows тоже можно применять?
  • manaka © (06.04.17 20:41) [2]

    > По преимуществам пишут обычно что-то вроде такого:
    >
    > "Docker помогает выкладывать ваш код быстрее, быстрее тестировать,
    >  быстрее выкладывать приложения и уменьшить время между
    > написанием кода и запуска кода"


    Это где такое пишут? Docker не для этого предназначен. ))))
  • Kerk © (06.04.17 20:43) [3]
    Docker - это такая виртуальная машина. Удобен он тем, что позволяет положить внутрь такой машины все необходимое для работы программы (а частенько это не только сама программа, а много взаимосвязанного софта) и управлять этим как единым целом.

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

    >  Sistal ©   (06.04.17 20:36) [1]
    >
    > И не понял даже базовой вещи - Docker это только для Linux
    > (судя по вики) или это кросс-платформенное решение и на
    > Windows тоже можно применять?

    Можно.
  • KilkennyCat © (06.04.17 20:59) [4]

    > То там, то здесь постоянно слышу, что многие пользуются
    > Docker

    даже не слышал. наверное, не там хожу
  • megavoid © (07.04.17 01:39) [5]

    > Docker - это такая виртуальная машина. Удобен он тем, что
    > позволяет положить внутрь такой машины все необходимое для
    > работы программы (а частенько это не только сама программа,
    >  а много взаимосвязанного софта) и управлять этим как единым
    > целом.

    Угу. То есть мы можем условно "сделать" эдакий gimp.exe (размером с 2 Гб - убунту+либы+гимп+тонна его линукс плагинов). Или bind.exe. Или exim.exe. Ну, работает в любую сторону - можно сделать Photoshop.elf. Winword.elf. Autocad.elf. И при запуске сего файла сперва запустится виртуальная машина, а уже потом софт внутри неё, а снаружи, для пользователя, это всё будет прозрачно и красиво, без лишних телодвижений.
  • Alex Konshin © (09.04.17 06:50) [6]
    Не проверял что у нас сегодня на этот счёт, и возможно я отстал отжизни, но ещё год назад оно на Windows не работало. То, что я кобы работало было просто запуск linux в VirtualBox в котором уже запускался докер.
    Насколько я знаю они усилено работают над тем, чтобы это работало по-настоящему на Windows. На самом деле мы уже видим побочные эффекты этой работы - Ubuntu под Windows 10.

    Что это такое? Проще всего это представить как до-нельзя облегчёную недовиртуальную машину, которая пытается изолировать процесс и подсовывает ему некую моделируемую файловую систему. Т.е. большинство файлов системы этот процесс видит как и все другие процессы в системе, но какие-то файлы-директории мапятся в другие места. Ещё более-менее похожая аналогия - portable executables, там тоже процесам подменяют реальный мир на нечто моделируемое.

    Докер оперируем имиджами, а не excutables. Имидж по сути является снепшотом того, что этот докер добавляет. Имиджи могут наследоваться и содержать только изменения по отношению к другому идиджу. И таким образом они могут образовывать матрёшку.  

    Зачем это нужно?
    Воспроизводимость среды выполнения. Приложение запускается и всегда видит ровно то, что прописано в имидже докера.
    Можно на одной машине запустить несколько докеров с одним и тем же приложением, которые, например, в других условиях немогут сосуществовать в одной машине. Например, можно запустить несколько Apache HTTP серверов в докерах, и все они будут думать, что слушают порт (например) 8080, хотя вне докеров они все будут видны на других портах.
    Если есть базовый имидж и последующие содержат только обновления, то они они могут быть очень маленькими. При этом, если запустить несколько докеров, которые наследуются от некого одного имиджа, то все неизменные файлы будут шарится между ними.

    Что плохо?
    Виртуализация всегда имеет свою цену. Здесь она может стоить падением производительности (но это как раз очень мало). Процессы в докерах всё-таки недостаточно изолированы и тут возникает по крайней мере две большие проблемы:
    - некий процесс потенциально может уронить всу машину со всеми докерами.
    - security - потенциально можно получить доступ к данным другого процесса. Т.е. этого стараются не допустить, но по-любому это обойти проще, чем если процессы бегут на разных VM.
    - размер имиджей. Из докера можно иметь доступ к внешним файлам, но тогда нет изолированости и воспроизводимости. Например, можно засунуть весь оракл вместе с базой в докер, но вы можете представить его размер. Если делать тупо и не наследоваться от предыдущего или некого базового имиджа, то каждый билд приложения будет содержаться помимо самого приложения ещё много всего. Для continuous integration/delivery это может стать проблемой.

    Это было краткое объяснение на пальцах, не претендующее на полноту и правильность.
  • Kerk © (09.04.17 22:15) [7]

    > Alex Konshin ©   (09.04.17 06:50) [6]
    >
    > Не проверял что у нас сегодня на этот счёт, и возможно я
    > отстал отжизни, но ещё год назад оно на Windows не работало.

    Работает-работает. Не знаю насчет старых версий в Windows, но в Windows 10 Pro всё отлично.

    > На самом деле мы уже видим побочные эффекты этой работы
    > - Ubuntu под Windows 10.

    Вот тут не соглашусь. Принцип работы линуксовой подсистемы в Windows совсем другой. Там, насколько я знаю, никакой виртуализации нет, а просто функции ядра Linux замкнули на ядро Windows. Docker же запускает полноценные виртуалки под Hyper-V.
  • Alex Konshin © (10.04.17 00:39) [8]
    Windows 10 ещё не используется корпорациями. Достоверно знаю про нашу фирму и про SalesForce - IT не даёт добро на установку Windows 10.

    И потом, "запуск в виртуалке" это всё равно не то, как докер задуман. Этак и сыграть смогу. На линуксе докер запускается без VM. Конечно, там тоже некая виртуализация, но не настолько суровая, как в VM. Насколько я понимаю, там просто на уровне системных вызовов симуляция делается.
  • Alex Konshin © (10.04.17 00:44) [9]
    Да и именно потому, что докер запускает виртуалки на Windows, я и говорю, что он там неполноценый. Он это делать не должен, в этом его идея. И докер как раз и должен системные вызовы перехватывать, т.е. это именно то, что и сделано в Ubuntu Для Windows.

    Честно говоря, я не работаю с докером, у меня пока других проэктов выши крыщи, Но наша группа как раз devops, которая помимо прочего продвигает микросервисы и докер в нашей компании.
  • Kerk © (10.04.17 01:20) [10]
    В интернете пишут, что в Windows Server 2016 уже есть нативная поддержка, но я сам это пока не пробовал. Но мне как раз больше нравится "неполноценный режим". Я docker на Windows использую только для отладки, а контейнеры у нас все линуксовые. Нативно я бы линуксовый контейнер в Windows не смог бы использовать.
  • Sistal © (10.04.17 15:03) [11]

    >  Удобен он тем, что позволяет положить внутрь такой машины
    > все необходимое для работы программы (а частенько это не
    > только сама программа, а много взаимосвязанного софта) и
    > управлять этим как единым целом.

    ну так это просто виртуальная машина, запускаешь - видишь экран ОС, ну можно свою программу в автозагрузку добавить - тогда запуститься сразу и твоя программа.. А в чем фишка доккера?
    Что такое "быстрое развертывание софта"? Вот везде пишут эту фразу, но это ведь зависит от того, кто собрал образ виртуальной машины? Если там всё есть для работы ПО, то для "развертывания" нужно просто "запустить" образ в ВМ, вот и готово... Блин, чего то я не понимаю.


    > Угу. То есть мы можем условно "сделать" эдакий gimp.exe
    > (размером с 2 Гб - убунту+либы+гим

    то есть, Docker - это просто самозапускающаяся виртуальная машина? Ну типа как RAR-архивы, которые выполнены в виде EXE и им для распаковки не нужен установленный RAR? Я правильно уловил мысль?


    > Имиджи могут наследоваться и содержать только изменения
    > по отношению к другому идиджу. И таким образом они могут
    > образовывать матрёшку.  

    вот это крутая идея. То есть, например, я могу подготовить:

    1) базовый image - в него запихнуть Windows + Oracle + все необходимые драйвера.
    2) делать образы дополнения, например подцепляешь дополнительно образ MySoft 1.3.1.0 - и запускается ПО версии 1.3.1.0 со всем окружением - поднимается серверная часть, а также запускается клиент?
    Или даже разбить на "MySoft 1.3.1.0 Server" / "MySoft 1.3.1.0 Client".
    Можно запустить всю систему, можно поднять сервер и к нему "нативно" подключаться из клиента?

    Было бы удобно для тестирования, например проверки некоторых багов на определенной версии продукта.


    > Я docker на Windows использую только для отладки, а контейнеры
    > у нас все линуксовые

    а можешь привести конкретный пример удобства использования?
    Я вот все таки не могу до конца понять концепцию.
  • Kerk © (10.04.17 22:42) [12]

    > Sistal ©   (10.04.17 15:03) [11]
    >
    > А в чем фишка доккера?
    > Что такое "быстрое развертывание софта"? Вот везде пишут
    > эту фразу, но это ведь зависит от того, кто собрал образ
    > виртуальной машины? Если там всё есть для работы ПО, то
    > для "развертывания" нужно просто "запустить" образ в ВМ,
    >  вот и готово... Блин, чего то я не понимаю.

    Не ищи серебряную пулю. Не вдаваясь в технические нюансы, при работе с виртуальными машинами тебе действительно доступно примерно все то же самое. Но докер заточен под определенные цели и поэтому при использовании по назначению намного более удобен.

    Например, с виртуальной машиной ты работаешь как с обычным компьютером по большому счету. Устанавливаешь туда все вручную и в итоге имеешь образ.

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

    Соответственно, если тебе нужно что-то изменить, то ты всего-лишь меняешь скрипт, а не возишься со старым образом вручную.

    То есть все дело в хорошей заточенности под конкретное применение. Плюс развитая инфраструктура вроде kubernetes. Не видел ничего похожего для управления кластерами virtualbox-ов.

    По крайней мере я так вижу.

    > а можешь привести конкретный пример удобства использования?

    В нашем случае это автоматическое развертывание. Допустим запущено X экземпляров контейнеров приложений и понадобилось запустить еще Y. Имея готовый образ docker-а, это сделать легко. То есть для нас это некий уровень абстракции, позволяющий мыслить не в терминах серверов, а в терминах приложений.
  • Empleado © (11.04.17 13:44) [13]
    >IT не даёт добро на установку Windows 10
    +1
Есть новые Нет новых   [134431   +10][b:0][p:0]