Работа с Docker не самая простая задача. В этой статье хотелось бы рассказать что нас подтолкнуло с созданию DockStation проекта и что у нас уже реализовано на данный момент.
Я работаю разработчиком уже больше 8 лет, и для меня всегда была болью настройка dev окружения для разработки при переходе на другую OС или смене рабочей машины.
Рано или поздно многие разработчики подходят к той границе, когда появляется необходимость в создании единого и автономного окружения для разработки. Такое окружение без проблем можно перенести с одной машины на другую, отключить одним кликом, поделиться им. С учётом этой необходимости, все дороги вели к Vagrant.
Однако последние два года на слуху была какая-то неведомая и непонятная для меня штука, которая вроде как подходила под мои надобности — Docker. Этот проект часто удостаивается наград и премий, а некоторые и вовсе называют его лучшим из того, что было создано за последние 20 лет. Однако, даже несмотря на то, что по ночам я немного DevOps-ил (пока никто не видит), для меня все эти «изолированные контейнеры» были тёмным лесом. Тем не менее, я решил разобраться в этой интересной вещице.
Первые шаги в освоении были не совсем простыми, но в некоторых моментах мне помогали ребята из сообщества dev.by в Slack-чате.
Хотя Docker позиционирует себя как инструмент для деплоя, я понял, что он полностью удовлетворяет всем моим требованиям к среде для разработки.
Потратив около недели на изучение документации, я понял саму философию и то, как работать с этим чудо-инструментом. Смущало лишь одно — километровые CLI команды, которые нужно было запускать каждый раз для запуска контейнера. Видимо, я был не один в такой беде: у ребят оказался в арсенале ещё один инструмент Docker Compose, который позволял сохранять все эти километровые команды в единый конфигурационный файл. И вроде бы — можно радоваться, но реальность, как обычно, оказывается жестокой.
Собрав и перенеся свои личные и рабочие рабочие проекты и получив по итогу более полусотни контейнеров, я столкнулся с вопросом: «Как всем этим управлять?». Знаю по своему опыту: если есть что-то консольное, то должно быть что-то «мышко-юзабельное» на GUI. Начались поиски приложения, которое помогло бы управлять всем этим делом.
Первое, на что я наткнулся, был Kitematic — GUI-приложение от Docker, которое позволяет производить манипуляции с контейнерами.
Можно без вопросов остановить, перезапустить, удалить контейнер, произвести многие манипуляции с ним, такие как просмотр логов или быстрый доступ в контейнер.
Но это не решало мою проблему: разобрать и сгруппировать кучу контейнеров от моих проектов. Да и никаких глобальных вопросов оно не решало, лишь немного помогало работать с контейнерами и мониторить их состояние. Затем я рассмотрел Rancher, но снова не то: этот инструмент предназначен и заточен для деплоя, и для разработчика он не совсем подходит. Были найдены схожие инструменты типа Shipyard и Portainer, но все они были лишь немного более проработанными вариантами Kitematic. Что ж, раз решения под нужную задачу не существует, сделаем решение своими руками.
Вот так, начиная от обычной идеи банальной группировки контейнеров по проектам и появилось желание сделать свой продукт. Одному такой проект тянуть было бы очень сложно, разработка «в одно лицо» заняла бы много времени. В декабре 2016 года я пришёл с этой идеей и с предложением совместной разработки к своему другу Павлу Лозко. Он работал с Docker, поэтому быстро понял общий смысл проекта и дал согласие на участие.
Через два месяца я перешёл на фул-тайм работу над проектом.
В итоге мы нарушили все правила, проигнорировали советы великих стартап-гуру о том, что нужно запускаться уже на стадии Hello World и, имея на руках только лишь идею, бежать к инвесторам за деньгами на MVP. Спустя шесть месяцев кропотливой и тяжёлой работы проект вышел в свет.
В основе проекта изначально лежали принципы:
Итого, озираясь на последние 10 месяцев работы.
Текущие итоги и результаты
На сегодня главная наша заслуга в том, что мы выпустили продукт. Покинув работу для фулл-тайм погружения в проект, суммарно потратив более 10 месяцев личного времени и какое-то количество своих денег, без сторонней поддержки выпустили проект в жизнь и продолжаем его развивать. Поскольку основной задачей у нас была работа над проектом, то никакие стартап-тусовки, ивенты и прочие мероприятия мы не посещали, поэтому значков, отметок и наград от экспертов у нас нет. Зато сейчас нашим приложением пользуется более 1000 разработчиков в месяц, у нас есть сотни положительных отзывов и пожелаений и это вдохновляет творить дальше.
Web
GitHub (проект не OpenSource, но там все коммуникации)
Начало
Я работаю разработчиком уже больше 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 конфигов.
- Поскольку IP контейнеров меняются при перезапуске, управлять проектом, используя локальное хост-имя, становится не совсем просто. Мы решили эту задачу: при смене IP контейнера будет установлена актуальная хост-запись в /etc/hosts.
Текущие итоги и результаты
На сегодня главная наша заслуга в том, что мы выпустили продукт. Покинув работу для фулл-тайм погружения в проект, суммарно потратив более 10 месяцев личного времени и какое-то количество своих денег, без сторонней поддержки выпустили проект в жизнь и продолжаем его развивать. Поскольку основной задачей у нас была работа над проектом, то никакие стартап-тусовки, ивенты и прочие мероприятия мы не посещали, поэтому значков, отметок и наград от экспертов у нас нет. Зато сейчас нашим приложением пользуется более 1000 разработчиков в месяц, у нас есть сотни положительных отзывов и пожелаений и это вдохновляет творить дальше.
Web
GitHub (проект не OpenSource, но там все коммуникации)