Удобное управление тестовыми окружениями в docker-compose

Всем привет, хочу рассказать о своей утилите dcw (Docker Compose Workspace) для удобного управления тестовыми окружениями на базе docker-compose.

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

У меня есть такая проблема как переключение между проектами, которое может происходить довольно часто, даже по несколько раз в день. Раньше было как без докера? На машине разработчика устанавливался весь необходимый софт, базы данных Postgres, Redis, какие-то вспомогательные сервисы, такие как Keycloak, Apache PHP, Java… Возможно каждый сервис или язык разработки представлен ещё и несколькими разными версиями. В общем такой зоопарк операционка долго не могла нормально переносить и по итогу, что-то с чем-то конфликтовало, что-то всё-равно где-то ломалось и приходилось переустанавливать всё заново и с этим бороться. В общем это был ад.

Как же хорошо что сейчас есть docker и мы можем все необходимые сервисы, языки и прочее запускать в нём. Можно для описания тестового dev окружения использовать docker-compose, это ещё упрощает жизнь в плане запуска и останова.

Более того, например, VSCode поддерживает Dev Containers и может за нас проделывать всю работу по запуску и останову dev окружения. Но к сожалению, это не полностью спасает, так как есть ещё другие IDE, в которых такой поддержки нет.

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

Много ручной работы, переключений между проектами много. Немного пострадав, я написал себе простенькие bash скрипты, которые запоминали текущий docker-compose.yml, потом останавливали его и запускали новый. Скрипты лежали в ~/bin и выглядели примерно так: switch_to_some_project, switch_to_another_project

И вот настало время и я решил сделать это по человечески, так появилась утилита dcw (https://github.com/navrocky/dcw).

Она написана на C++, скомпилирована в статику с рантаймом uClibc, работает без пересборки на всех возможных Линуксах (x86, x86_64), также работает в docker from scratch (правда не знаю зачем, но работает). Устанавливается простым копированием бинарника в /usr/local/bin или в ~/bin. Кому интересно как собирать такие статические бинарники можете заглянуть в докер файл Dockerfile.uclibc.

Позволяет добавлять docker-compose.yml файлы в свою локальную БД, присваивать alias и потом по этому alias быстро переключаться между ними. Имеется в наличии автодополнение для bash, поэтому не обязательно полностью вводить команды и алиасы, достаточно пощёлкать табом.

Работа с утилитой

Работа с утилитой

Хотелось бы добавить её в популярные дистрибутивы, но там как-то всё сложно с этим, я пока эту затею не реализовал. Если кто-то в комментариях напишет как можно добавить свой пакет, например, в Ubuntu я был бы очень признателен.

Очень надеюсь, что эта утилита кому-нибудь будет полезна. Спасибо за внимание.

© Habrahabr.ru