Как мы это сделали. DockStation — сервис для управления проектами на Docker

25 мая 2017, 12:15

В проекте dev.by «Как мы это сделали» белорусские стартарперы делятся с аудиторией собственным опытом по разработке ИТ-продуктов. Сегодня о своём проекте рассказывает Игорь Козловский, основатель и разработчик DockStation — сервиса для управления проектами, базирующимися на Docker.

Читать далее...

Как всё началось: необходимость в едином и автономном окружении для разработки

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

1. Не обязательно учить тонны документации на начальном этапе, чтобы начать работу с Docker и Docker Compose. Хотя саму философию и принципы всё же понять нужно.

2. Приложение должно быть нативным, чтобы не пришлось танцеать с бубном для простого запуска (привет, Rancher).

3. Обратная совместимость. Все сгенерированные проекты должны запускаться как в приложении так и через CLI. Аналогично как и наличие возможность импорта сторонних Docker Compose проектов в приложение.

4. Всё, что можно, максимально перенести в GUI.

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

1. Быстро создавать проекты на лету.

  • импортировать уже имеющийся проекты, просто указав путь к директории в которой лежит docker-compose.yml файл конфигурации

  • парсить Docker команды (beta). Для тех, кто всегда пользовался только docker run командами, есть возможность импортировать проект, просто введя эти команды, они будут переведены в Compose проект.

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

2. Мониторинг проектов и сервисов. В любой момент можно узнать, работает ли проект, а если нет, то какой из сервисов не работает. С помощью логов найти, в чём заключается проблема.

3. Управление сервисами и контейнерами.

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

4. Приятные дополнения вроде установки локального хоста для контейнера.

Поскольку IP контейнеров меняются при перезапуске, управлять проектом, используя локальное хост-имя, становится не совсем просто. Мы решили эту задачу: при смене IP контейнера будет установлена актуальная хост-запись в /etc/hosts.

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

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

В планах — монетизация, инвестиции, партнёрские отношения

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

В арсенале у нас имеется несколько планов по заработку. Основной — публикация проекта как Open Source с применением двойного лицензирования, c платной поддержкой и персональной доработкой под какие-то узкие потребности. По схожей модели успешно работает тот же Rancher.

Также в запасе пару других моделей, на случай, если что-то пойдёт не по плану.

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

Советы и полезные ссылки 

1. Убедитесь, что проблема существует на самом деле. Желательно решать проблемы, с которыми вы сталкиваетесь лично. В идеале — проблемы той сферы, в которой вы имеете профессиональные компетенции. Чтобы потом в один прекрасный момент не оказалось, что проблему, которую вы так рьяно решали, либо уже давно решили, либо её не существовало вовсе.

2. Слушайте, но думайте. Вы повстречаете много советчиков, которые будут с видом экспертов рассуждать, как нужно и правильно что-то делать, почему ваш проект bullshit и т.п. Нет единого алгоритма сделать проект успешным. Просто принимайте решения, как посчитаете нужным, своей головой, а не чужой.

3. Не советовал бы гоняться за трендами лишь с единой целью — сделать стильный-модный-молодёжный стартап. Если вы прикрутите нейронные сети к микроволновке, маловероятно, что вас купит Google. Не нужно совать AI, AR, NN куда попало лишь потому, что это сейчас на волне популярности.

4. Просите — и получите, ищите — и найдёте, стучите — и вам откроют. 

Полезные ссылки

  • devby.slack.com — сообщество dev.by в Slack. 
  • addthis.com — сервис обмена ссылками в социальных сетях
  • themeforest.net — площадка по продаже шаблонов, где можно найти красивый шаблон, позволяющий быстро создать сайт или лэндинг страницу проекта
  • bitbucket.org — распределённая система контроля версий, которая позволяет бесплатно создавать приватные репозитории
Обсуждение