Работа с 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. Спустя шесть месяцев кропотливой и тяжёлой работы проект вышел в свет.
В основе проекта изначально лежали принципы:
- Не обязательно учить тонны документации на начальном этапе, чтобы начать работу с Docker и Docker Compose. Хотя саму философию и принципы всё же понять нужно.
- Приложение должно быть нативным, чтобы не пришлось танцеать с бубном для простого запуска (концепция Kitematic-а понравилась больше).
- Обратная совместимость. Все сгенерированные проекты должны запускаться как в приложении так и через CLI. Аналогично как и наличие возможность импорта сторонних Docker Compose проектов в приложение.
- Всё, что можно, максимально перенести в GUI.
Итого, озираясь на последние 10 месяцев работы.
Что мы умеем сегодня
- Быстро создавать проекты на лету.
- Импортировать уже имеющийся проекты, просто указав путь к директории в которой лежит docker-compose.yml файл конфигурации.
- Парсить Docker команды (beta). Для тех, кто всегда пользовался только docker run командами, есть возможность импортировать проект, просто введя эти команды, они будут переведены в Compose проект.
- Создавать проект с нуля просто одним кликом мыши.
- Мониторинг проектов и сервисов.
В любой момент можно узнать, работает ли проект, а если нет, то какой из сервисов не работает. С помощью логов найти, в чём заключается проблема. Реализован полнотекстовый поиск по логам.
- Управление сервисами и контейнерами.
- Быстрый запуск, перезапуск, остановка сервисов и всех контейнеров, с ними связанных.
- Быстрая очистка контейнеров сервиса.
- Доступ внутрь контейнеров по одному клику.
- Получение всей информации по контейнерам.
- Смена версии образа, байндинг портов, переопределение и назначение переменных окружения и многое много другое что необходимо для настройки и управления проектом.
- Настройки проектов.
Часто используемые настройки проекта можно менять через интерфейс. Все изменения сразу же будут записаны в docker-compose конфиг. Если что-то нужно сделать кастомное, то без проблем можно отредактировать compose конфиг вручную и все будет работать.
- Работа как с локальным Docker-ом, так и удаленным.
Реализована система для создания и работы с удаленными подключениями к Docker, которая дает возможность к полноценному управлению удаленными контейнерами. Очень сильной фичей является возможность подключения к Docker через SSH, что позволит избежать очень большой работы по перенастройке Docker-а для открытия внешнего порта и настройки безопасности.
- Статистика потребления ресурсов как проектов в целом, так и отдельных контейнеров.
В Docker-е есть очень слабое место в плане мониторинга ресурсов по Compose проектам в целом. Он позволяет мониторить только лишь ресурсы отдельных контейнеров. Что же, мы исправили это. (к слову issue висит, возможно вскоре и появится: https://github.com/docker/compose/issues/1197)
- Мониторинг ресурсов в реальном времени.
Очень похоже как в менеджере задач, только для контейнеров.
- Работа с Docker Machine
Реализована полноценная работа с Docker Machine c поддержкой драйверов:
VirtualBox, VMWare, Hyper-V
- Работа с Docker Hub
Можно очень легко и просто работать с образами из Docker Hub. Осуществлять поиск и конфигурацию образов.
- Приятные дополнения.
- Поскольку IP контейнеров меняются при перезапуске, управлять проектом, используя локальное хост-имя, становится не совсем просто. Мы решили эту задачу: при смене IP контейнера будет установлена актуальная хост-запись в /etc/hosts.
- Реализована поддержка Override конфигов.
Текущие итоги и результаты
На сегодня главная наша заслуга в том, что мы выпустили продукт. Покинув работу для фулл-тайм погружения в проект, суммарно потратив более 10 месяцев личного времени и какое-то количество своих денег, без сторонней поддержки выпустили проект в жизнь и продолжаем его развивать. Поскольку основной задачей у нас была работа над проектом, то никакие стартап-тусовки, ивенты и прочие мероприятия мы не посещали, поэтому значков, отметок и наград от экспертов у нас нет. Зато сейчас нашим приложением пользуется более 1000 разработчиков в месяц, у нас есть сотни положительных отзывов и пожелаений и это вдохновляет творить дальше.
Web
GitHub (проект не OpenSource, но там все коммуникации)
Автор: Lemon007