DockStation. Почему мы решили сделать этот проект

    Работа с Docker не самая простая задача. В этой статье хотелось бы рассказать что нас подтолкнуло с созданию DockStation проекта и что у нас уже реализовано на данный момент.

    Начало


    Я работаю разработчиком уже больше 8 лет, и для меня всегда была болью настройка dev окружения для разработки при переходе на другую OС или смене рабочей машины.

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

    Однако последние два года на слуху была какая-то неведомая и непонятная для меня штука, которая вроде как подходила под мои надобности — Docker. Этот проект часто удостаивается наград и премий, а некоторые и вовсе называют его лучшим из того, что было создано за последние 20 лет. Однако, даже несмотря на то, что по ночам я немного DevOps-ил (пока никто не видит), для меня все эти «изолированные контейнеры» были тёмным лесом. Тем не менее, я решил разобраться в этой интересной вещице.

    Docker: как всем этим управлять?


    Первые шаги в освоении были не совсем простыми, но в некоторых моментах мне помогали ребята из сообщества dev.by в Slack-чате.

    Хотя Docker позиционирует себя как инструмент для деплоя, я понял, что он полностью удовлетворяет всем моим требованиям к среде для разработки.

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

    Собрав и перенеся свои личные и рабочие рабочие проекты и получив по итогу более полусотни контейнеров, я столкнулся с вопросом: «Как всем этим управлять?». Знаю по своему опыту: если есть что-то консольное, то должно быть что-то «мышко-юзабельное» на GUI. Начались поиски приложения, которое помогло бы управлять всем этим делом.

    Конкуренты «не решают глобальных вопросов»


    Первое, на что я наткнулся, был Kitematic — GUI-приложение от Docker, которое позволяет производить манипуляции с контейнерами.

    Можно без вопросов остановить, перезапустить, удалить контейнер, произвести многие манипуляции с ним, такие как просмотр логов или быстрый доступ в контейнер.

    Но это не решало мою проблему: разобрать и сгруппировать кучу контейнеров от моих проектов. Да и никаких глобальных вопросов оно не решало, лишь немного помогало работать с контейнерами и мониторить их состояние. Затем я рассмотрел Rancher, но снова не то: этот инструмент предназначен и заточен для деплоя, и для разработчика он не совсем подходит. Были найдены схожие инструменты типа Shipyard и Portainer, но все они были лишь немного более проработанными вариантами Kitematic. Что ж, раз решения под нужную задачу не существует, сделаем решение своими руками.

    DockStation: более полугода кропотливой работы


    Вот так, начиная от обычной идеи банальной группировки контейнеров по проектам и появилось желание сделать свой продукт. Одному такой проект тянуть было бы очень сложно, разработка «в одно лицо» заняла бы много времени. В декабре 2016 года я пришёл с этой идеей и с предложением совместной разработки к своему другу Павлу Лозко. Он работал с Docker, поэтому быстро понял общий смысл проекта и дал согласие на участие.

    Через два месяца я перешёл на фул-тайм работу над проектом.

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

    В основе проекта изначально лежали принципы:

    1. Не обязательно учить тонны документации на начальном этапе, чтобы начать работу с Docker и Docker Compose. Хотя саму философию и принципы всё же понять нужно.
    2. Приложение должно быть нативным, чтобы не пришлось танцеать с бубном для простого запуска (концепция Kitematic-а понравилась больше).
    3. Обратная совместимость. Все сгенерированные проекты должны запускаться как в приложении так и через CLI. Аналогично как и наличие возможность импорта сторонних Docker Compose проектов в приложение.
    4. Всё, что можно, максимально перенести в GUI.

    Итого, озираясь на последние 10 месяцев работы.

    Что мы умеем сегодня


    1. Быстро создавать проекты на лету.
      • Импортировать уже имеющийся проекты, просто указав путь к директории в которой лежит docker-compose.yml файл конфигурации.
      • Парсить Docker команды (beta). Для тех, кто всегда пользовался только docker run командами, есть возможность импортировать проект, просто введя эти команды, они будут переведены в Compose проект.

      image
      • Создавать проект с нуля просто одним кликом мыши.
        image


    2. Мониторинг проектов и сервисов.
      В любой момент можно узнать, работает ли проект, а если нет, то какой из сервисов не работает. С помощью логов найти, в чём заключается проблема. Реализован полнотекстовый поиск по логам.
      image
    3. Управление сервисами и контейнерами.
      • Быстрый запуск, перезапуск, остановка сервисов и всех контейнеров, с ними связанных.
      • Быстрая очистка контейнеров сервиса.
      • Доступ внутрь контейнеров по одному клику.
      • Получение всей информации по контейнерам.
      • Смена версии образа, байндинг портов, переопределение и назначение переменных окружения и многое много другое что необходимо для настройки и управления проектом.

      image
    4. Настройки проектов.
      Часто используемые настройки проекта можно менять через интерфейс. Все изменения сразу же будут записаны в docker-compose конфиг. Если что-то нужно сделать кастомное, то без проблем можно отредактировать compose конфиг вручную и все будет работать.
      image
    5. Работа как с локальным Docker-ом, так и удаленным.
      Реализована система для создания и работы с удаленными подключениями к Docker, которая дает возможность к полноценному управлению удаленными контейнерами. Очень сильной фичей является возможность подключения к Docker через SSH, что позволит избежать очень большой работы по перенастройке Docker-а для открытия внешнего порта и настройки безопасности.
      image
      image
      image
      image
      image
    6. Статистика потребления ресурсов как проектов в целом, так и отдельных контейнеров.
      В Docker-е есть очень слабое место в плане мониторинга ресурсов по Compose проектам в целом. Он позволяет мониторить только лишь ресурсы отдельных контейнеров. Что же, мы исправили это. (к слову issue висит, возможно вскоре и появится: https://github.com/docker/compose/issues/1197)
      image
      image
    7. Мониторинг ресурсов в реальном времени.
      Очень похоже как в менеджере задач, только для контейнеров.
      image
    8. Работа с Docker Machine
      Реализована полноценная работа с Docker Machine c поддержкой драйверов:
      VirtualBox, VMWare, Hyper-V
      image
    9. Работа с Docker Hub
      Можно очень легко и просто работать с образами из Docker Hub. Осуществлять поиск и конфигурацию образов.
      image
      image
    10. Приятные дополнения.
      • Поскольку IP контейнеров меняются при перезапуске, управлять проектом, используя локальное хост-имя, становится не совсем просто. Мы решили эту задачу: при смене IP контейнера будет установлена актуальная хост-запись в /etc/hosts.
      • Реализована поддержка Override конфигов.

      image

    Текущие итоги и результаты

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

    Web
    GitHub (проект не OpenSource, но там все коммуникации)
    DockStation
    17,00
    Инструменты для работы с Docker-ом
    Поделиться публикацией

    Комментарии 55

      0
      А где пруф на скачивание?
      Погуглить можно, но ссылку в конце тоже было бы не плохо
        0
        Исправлено. Подумал что в профиле компании можно посмотреть. Но так то да, проще продублировать. Спасибо за замечание.
          0
          А где пруф на скачивание?

          В слове «пруфлинк» ссылка — это второе слово :-)
          0
          Вы просто переработали Kinematic получается? Оформление один-в-один.
            0
            Нет, от Kitematic-а у нас нету вообще ничего, мы делали все с абсолютного нуля и к слову тот же Kitematic так просто не подогнать под работу с Docker Compose, там проще с 0 все переделать.
            То что есть сходства в интерфейсе, связано с тем, что библиотека которую используем для GUI имеет визуальные сходства. Если интересно: https://github.com/ant-design/ant-design/
              0
              An-Design знаю, понятно. Исходный код вообщем то можно было и открыть когда нибудь для возможности расширения модулями, скажем для работы с Kubernetes или прочими оркестровками
                0
                Сейчас рассматриваем разные варианты, выход в OpenSource так же очень и очень возможен.
            0
            Выглядит очень вкусно. Особенно работа с docker-machine и compose. Посмотрим как оно на самом деле.

            О, посмотрел сайт, вспомнил вас :) Это для вас есть отдельный котел за видео «Coming soon...» :)

            А как у вас происходит разделение dev/prod у одного проекта? Сейчас у меня несколько yml файлов для compose, которые чуть переписывают один основной.
              0
              Ага, +1 котел за то что до сих пор не пофиксил лэндинг :)
              0

              Качаю. По описанию реально огонь. Надеюсь он оправдает возложенные надежды :)


              На сколько проблематично сделать в дополнение web интерфейс?

                0
                Буду рад фидбэку.
                Если возникнут какие вопросы, можете смело обращаться. :)
                  0

                  Сразу две функции которые не увидел, но на мой взгляд достаточно интересные.


                  1. Использование своего registry
                  2. Управление образами. Удаление
                  3. Возможно не нашел — импорт обратно в docker-compose
                    0
                    1) Ведется работа и она будет в v1.4, к слову что будет в сл. версии можете посмотреть здесь: https://github.com/DockStation/dockstation/milestone/4
                    2) Можно поподробнее что именно вы имеете ввиду под управлением образов? Build, Push, Pull в/из регистра?
                      0
                      1. Когда примерно можно ожидать эту версию?
                      2. Эти функции больше относятся к регистру, но конечно в том числе. Я в первую очередь имел ввиду банальную возможность удалить образ :)
                      3. Этот пункт отредактировал. Импорт обратно в docker-compose Есть ли такая возможность?
                      4. Как можно сохранить конфиг в файл с отличающийм названием. Например docker-compose.dev? На сколько понял из github это возможно, но не понял как :)

                      Большое спасибо вам за такой инструмент. Как минимум буду использовать для dev окружения на локалке :)

                        +1
                        1. В сл. месяце, я думаю нам нужно будет еще недели 4 на все про все.
                        2. Ну в принципе так-то это не сложно сделать. Я внесу в список, но это будет в v1.5.
                        3. Немного не понял какой импорт обратно? Мы работаем с нативным docker-compose, т.е. все что мы генирируем и меняем через интерфейс свободно и нативно поддерживается Docker Compose. Т.е. 100% обратная совместимость. Ну а импорт в docker-compose у нас есть из CLI `docker run ...` команд в compose формат.
                          0
                          Вы лучше добавляйте комментарий а не редактируйте, если что-то хотите дополнительно уточнить, т.к. не приходят уведомления.

                          по п.4
                          По дефолту всегда берется docker-compose.yml и используется как точка вхождения. Обычно чтобы разделить какие-то окружения, исользуют override конифги, типа docker-compose.dev.yml или docker-compose.prod.yml
                          У нас есть на гитхабе issue по поводу смены как раз этого entrypoint с docker-compose.yml на какой-нибудь кастомный. Это обсуждали, но пока висит под вопросом, будем вводить эту фичу или нет.
                    0
                    Добрый день.

                    выглядит класссно, надо пробовать. Несколько вопросов:
                    1) У вас на скрине есть стрелочки между разными контейнерами? Как их рисовать, не пойму :(
                    У меня винда10, если что.

                    2) Есть ли в вашей программе функция удаления локальных контейнеров? Не вижу такой.
                      0
                      Здравствуйте.
                      1) Есть. Они берутся из параметров depends_on и links. Сплошная от links и пунктирная для depends_on.
                      2) Да. Вкладка Containers. Выбираете контейнер и нажимаете на кнопку «Remove».
                      0
                      Здравствуйте!
                      Выглядит круто (хоть я и не работаю с докером).
                      Можно узнать, кто участвовал в проекте, каковы были вложения, и собираетесь ли монетизировать. Спасибо!
                        0
                        Здравствуйте. Спасибо.
                        Я и друг, на сайте есть информация. Вложения только свое время и небольшие финансовые вложения. Да, но с моментом монетизации тема очень и очень неоднозначная. Нужно монетизировать хотя бы для того чтобы была возможность полноценно работать фуллтайм на проекте.
                          0
                          Спасибо за ответ.
                          То, что монетизировать нужно — факт бесспорный. И я вижу, что на сайте уже есть об этом информация. А есть у вас уже платящие пользователи?
                            0
                            Извиняюсь, немного закрытая инфа. :)
                              0
                              Ничего, это понятно!
                        0

                        Выглядит здорово! Именно для зоопарка локалки такого очень не хватало! Даже задонатить не жалко.
                        Только еще очень хотелось бы в Aur наличие… через debtap конвертится норм

                          0
                          На самом деле мне тут уже поступило много предложение на разные пакеты, чаще всего это RPM. Мы это предвидели уже давно, поэтому чтобы не пложить кучу всего выбрали 2 основных: для Debian/Ubuntu и AppImage, который свободно запускается на всех *nix системах.
                          0
                          Потратив около недели на изучение документации, я понял саму философию и то, как работать с этим чудо-инструментом

                          Я сейчас на этом же этапе. Кроме оф.доков что-то посоветуете почитать?

                          А сам проект выглядит толково, в закладки добавил.
                            0
                            Нет лучше документации чем знакомые/друзья devOps-ы или те кто шарит.
                            Но вообще у меня было 2 ресурса: оф. дока + stackoverflow. Есть видеотуторы, но что-то ничего так толкового не нашел, чтобы я прям сказал что ВААААУ вот это клево и зашло.
                            0

                            Пользуюсь чуть больше месяца. Есть проблема, возможно, я не сильно разбирался, но у меня при создании проекта и указании docker-compose.yml теряются проброшенные волумы. И бывают подвисания в логах: вывод логов не из того контейнера или просто приложение может некоторое время не отвечать.


                            В остальном же все очень удобно. Отличная штука

                              0
                              Если не сложно, напишите issue на GitHub. Просто все технические вопросы мы стараемся решать там из-за того, что возможно у кого-то могут быть аналогичные проблемы и они найдут решение и к issue приложите туда свой первичный compose конфиг. Обычно мы решаем проблемы очень быстро либо же issue уходит с лэйблом bug.

                              Спасибо!
                              0
                              Две недели назад начал делать тоже самое, удивляясь, что этого никто еще не сделал, и все UI для докера практически бесполезны, да и заходить в них приходится через браузер (с ума все посходили с этим вебом). Я так понимаю проект был на веб стеке собран, на каком-нибудь electron? Печально, что это единственный сегодня существующий способ. Тем не менее, огромное спасибо за ваши старания, это очень круто! /me пошел выкидывать свое поделие в корзину и наслаждаться свободным временем
                                0
                                Ну потому что все считают нужным затолкнуть работу через Docker образ. Это имеет свои плюсы если ты хочешь управлять проектами на удаленной машине через WEB интерфейс (чтобы можно было к примеру с мобилки или пданешета в дороге что-то сделать), но ни разу не удобно если использовать на локальной машине. Пока не буду все спойлерить и расскрывать все карты, но в v2 версии будет широкий выбор типов: как Standalone приложение, так и приложение под WEB-ом.
                                Да, все верно. Стек: Electron + React + Redux + Saga.. На текущий момент самое оптимальное решения чтобы охватить как можно больше платформ, работая в 2 лица. :)

                                Спасибо за отзыв!
                                  0
                                  Стек: Electron + React + Redux + Saga… На текущий момент самое оптимальное решения чтобы охватить как можно больше платформ, работая в 2 лица

                                  Простите, но не самое.
                                  Самое — Qt
                                  А за электрон вам отдельный котёл, с разрабами скайпа вариться будете
                                    0
                                    Ну что поделать. Я лучше выберу котел с ребятами со Slack-а и Spotify-я, с ними поинтереснее будет общаться. :)
                                0
                                По моему это то, чего мне как раз не хватало для работы с Docker.
                                Я программист, я не хочу строить из себя админа и настраивать окружение кучей комманд :)
                                  0
                                  Лови пятюню! Я б тож так хотел, но чтобы написать это пришлось учить. :)
                                    0
                                    Если честно не хватает какого-нить гайдика с HowTO Create *** Dev Server.
                                    Хотя возможно просто у меня руки кривые… Но вообще познакомившись с Docker подробнее я пожалуй склоняюсь к идее, что у отдельных разрабов контейнеров ручки-крючки.
                                      0
                                      Вообще мы уже хотим 3-й месяц записать серию туторов по работе с аппой с реальными примерами, но все осложняется временеи и «перфект инглиш». Сейчас у нее очень большой функционал, а писать документацию дело долгое и утомительное. Но вообще если в 2-х словах, переходите на вкладку схемы и таскаете что вам нужно. Задаете entrypoint если он нужен, прокидываете волумсы и все поднимается. Все контейнеры уже будут меж собой перелинкованы и никаких доп. действиий делать не нужно.
                                      Косяк почти всех кто делает контейнеры что они пихают в один контейнер все, что в своей сути расходится с идеями независимых контейнеров и быстрой их замены. Т.е. они в один контейнер впихивают nginx, php, mysql, redis,… и т.п. и компилят в один одбраз. А вот когда нужно будет побыстрому поменять к примеру php, то оказывается что нужно делать полную пересборку образа, вместо выбрасывания и замены всего-лишь 1-го элемента.
                                        0
                                        Мой вам совет — не заморачивайтесь с перфект инглишом, а сразу делайте с сабами.

                                        Может вы мне сможете помочь. Я создал проект, закинул php, mysql, nginx, phpmyadmin (кроме последнего все из official).
                                        Вроде прокинул порты и volume пошарил с www, но я не могу понять как сказать nginx'у на php-fpm и его порт?
                                        Docker через Virtualbox docker-machine под MacOS (хотя я и под виндой развлекался).
                                          0
                                          Выкатим 1.4 версию и более плотно этим вопросом займемся. Банальная нехватка времени.

                                          Да, php-fpm должен байндиться на порт, т.к. общение меж контейнерами по сети, к сокету не подключиться, как это делается обычно. В конфиге nginx-а укажите на каком порту крутится PHP-FPM: Тыц
                                          А чтобы было еще проще, ловите мой конфиг, там правда для WP делал, но всю начинку по PHP + NGINX можно смело брать оттуда: GitHub
                                  0

                                  Кароч, молодцы ребята, спасибо за труд.

                                    0
                                    Рады стараться! Можно кстати как-нибудь выбраться. :)
                                    0
                                    Отличная вещь! Молодцы, спасибо!
                                    Пожелания:
                                    — на 13' макбуке по высоте не вмещается окно… не видно нижние элементы интерфейса, уменьшить фикс высоту окна бы
                                    — не хватает команд build кастом образов — если поменял чтото в dockerfile ручками приходится запускать команду
                                    а так все супер!
                                      0
                                      — Спасибо. Важное замечание. Исправим оьязательно. Уже внес в список.
                                      — Да, у нас даже в трекере висит issue с этим же предложением. В принципе кнопку билда не сложно добавить.

                                      Спасибо за фидбэк!
                                      0
                                      Гениально!
                                        0
                                        Столкнулся с такой неудобностью, когда скармлеваешь свой docker-compose.yml и нажимаешь Start в шапке, непонятно что происходит.
                                        Имею ввиду следующее, висит надпись Pulling from…
                                        А хотелось бы видеть вывод процесса пуллинга.
                                        Честно говоря, я вначале подумал, что все зависло)
                                          0
                                          На самом деле там обновление прогресса очень специфично проходит при запуске пулла образов во время старта. В плане того что немного сложно полноценно эмулировать поведение терминала в кастомном модальном окне.
                                          Процесс пуллинга мы показываем если вы перебрасываете образ с хаба на схему, т.к. там для этого дергаем спец метод.
                                            0
                                            Да, я заметил что там выводится, а тут нет.
                                            Еще момент, указываю в настройках проекта «Dockerfile Path», где лежит мой файл, а программа говорит, что «Selected path is not accessible, Dockerfile not found on specified path» Тестил на маке и на винде, в чем может быть проблема? Спасибо!
                                              0
                                              Я так понимаю это при создании проекта
                                              1) Проверьте доступность директории на запись
                                              2) Убедитесь что там в директории файл именно с названием docker-compose.yml
                                                0
                                                1) Есть
                                                2) В директории 2 файла docker-compose.yml(программа его читает) и Dockerfile в котором прописан билд.
                                                Я так понимаю, вы говорите, что мне нужно перенести все из Dockerfile в docker-compose.yml, тогда программа корректно его обработает?
                                                  0
                                                  А, у вас проблема с чтением не конфига, а с путиями к конфигу образа. В docker-compose.yml проверьте пути к вашему Dockerfile конфигу.
                                                    0
                                                    Все понял, спасибо. Был мой косяк)
                                          0
                                          Здравствуйте, потестировал и попользовался бы с удовольствием сим творением, но пока не очень понятно следующее…
                                          Насколько я понимаю у данного приложения веб интерфейса нет.
                                          У меня есть проблема с подключением к удалённой машине(там только ssh). Поэтому я установил программу под windows, создал соединение, коннекчусь, коннект есть, а потом закрывается и вылетает ошибка
                                          «Could not connect to remote docker. Docker Machine is not installed.»

                                          Чтоб всё работало, я должен проинсталлировать также докер на windows машине? Благодарю за подсказки.
                                            0
                                            Здравствуйте. Странно почему у вас вообще такая ошибка появилась, т.к. для удаленного подключения нужно чтобы был установлен только докер на удаленной машине.
                                            В настройках приложения у вас стоит какой режим работы, с Docker или Docker Mahcine?
                                              0
                                              О, изменил режим и подключился. Только получаю в консоли «failed to fetch container logs». Что нужно ещё? Да, читал ваше объяснение о документации, но без документации немного тяжело что делать кроме как просматривать логи и перегружать контейнеры. Спасибо!
                                                0
                                                Извиняюсь за задержку.
                                                Выловили баг в извлечением логов. Попробуйте перезапустить проект и логи должны появиться.

                                          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                          Самое читаемое