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

в 9:33, , рубрики: docker, docker machine, docker swarm, docker-compose, dockerfile, kitematic, Блог компании 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, но там все коммуникации)

Автор: Lemon007

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js