Связаться по Skype: vkarabedyants
Позвонить Написать
+7 (499) 404-28-83

Блог о системном администрировании серверов и сайтов

Установка, настройка программного обеспечения Linux, Windows операционных систем

Автоматизация с docker-compose

СЕО компании Docker представил данные, согласно которым за два прошлых года, приложений работающих в контейнерах докер увеличилось на 3100%. Во всем мире около 460 тысяч приложений работают с использованием docker.

Если вы еще не используете докер, то обязательно подумайте об этом. Благодаря docker поменялся подход к разработке приложений и стал не заменимым продуктом у программистов и devops инженеров. Данная статья предназначена для уже использующих докер, и покажет еще одно преимущество этого продукта.

Мы поделимся как используем в больших проектах docker-compose. Используя docker-compose для настройки, тестирования и автоматизации процессов разработки, мы улучшили эффективность команды разработчиков, которые теперь занимаются только разработкой.

Задачи

Как все работало раньше? У разработчиков была дополнительная задача развернуть окружение для непосредственной разработки и тестирования приложения. Нужно было поставить БД и другие инструменты для работы. Так же нужно было все это настроить под рабочее место, указывать нужные пути и порты в системе. Данные потуги настройки обычно не документировались и занимали много времени по подготовке и доведения системы до рабочее состояния.

Большинство продуктов были довольно примитивными, но ввиду развития обрастали все новыми и новыми функциями, с которым нужно было разбираться. Были внедрены очереди и дополнительные БД. Ввиду популярности микросервисов, большие приложения стали разделять на части. Данные видоизменения касаются команды работающей над проектом. Член команды разработки, внеся изменения, которые затрагивают переменные окружения, писал длинные терады, что и как нужно поменять, для настройки. Не удивительны случаи когда один разработчик внес изменения и вроде как описал все, что нужно сделать что бы заработало в локальных окружения, ушел спасть. А остальная команда потеряла день, дабы разобраться, что ж не так. Ведь разработчик забыл уточнить одну маленькую, но очень важную деталь.

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

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

Начало работы с docker-compose

Инструмент, который одной командой запускает несколько докер контейнеров и называется docker-compose. Далее расскажу немного о проекте. В проекте использовано  monorepo, бд, веб приложение, API, все хранится в директории. Сервис имеет docker файл, с описанием зависимостей.

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

Что бы запустить приложение, выполним

При первом запуске создаются и загружаются нужные контейнеры. В принципе все понятно, для тех кто знаком с докер, но все же уточним детали:

  1. context: ./web — для monorepo указывается путь к исходному коду
  2. dockerfile: Dockerfile.dev— в среде разработки используется отдельный Dockerfile.dev. В продуктиве код копируется напрямую в контейнер, в то время как для разработки подключается как том. Благодаря этому необходимости при каждом изменении код заново создавать контейнер отсутствует.
  3. volumes: - "./web/src:/web/src" — добавление каталога с кодом в docker как том.
  4. Docker-compose связывает контейнеры друг с другом автоматически, пример, веб-сервис может получить доступ к mongodb по имени: mongodb://mongo:27017

Использование аргумента --build

Если на хосте существуют контейнеры, то команда up их не пересоздаст, для этих целей необходимо использовать —build. Данные действия нужны в случае, изменения зависимостей или docker файла. Можно выполнять docker-compose up —build всегда, так как докер кэширует контейнера и если изменений не было он не будет их пересоздавать. Использование —build может немного уменьшить скорость загрузки, зато избавит от проблем с устаревшими зависимостями.

Запуск

В нашем примере docker-compose.yml существует зависимость сервисов:

В данном кусочке кода требуется БД. docker-compose позволяет указав имя сервиса запустить только его

Послу выполнения команды запустится база mongodb, а затем и сам API.

Такая функция полезна для разработчиков, использующих разные части в системе.

Логи

Иногда программы формируют большое количество логов. Зачастую информация никому не нужна. Их можно отключить. Например выключим лог для БД

docker-compose файлы

После запуска команды docker-compose up происходит поиск файлов docker-compose.yml в директории. Иногда может пригодится не один, а несколько таких файлов. Что бы подключить другой файл используем —file:

Несколько файлов может пригодится для разбития большого проекта на подпроекты. В любом случае, сервисы связаны не зависимо в одном или в нескольких файлах. Например в одном файле инфраструктура БД, а в другом приложение.

Тестирование

Для сервисов используется свой набор тестов, используя различные виды unit, ui, integrational, linting. Для тестирования мы решили создать отдельный файл:

Данный файл тестирования, зависит от основного файла. UI-тесты подсоединяются web frontend, интеграционные тесты — development api. Существует возможность частичного запуска:

Префиксы контейнеров

При использовании docker-compose контейнерам пресваеваются префиксы с именем родительской директории. Для устранения проблем в различных средах разработки, мы используем унифицированый префикс:

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

Заключение

Docker-compose — гибкий и удобный инструмент для запуска ПО

 

Руководство по внедрению изменения кода или разработки, выглядит приблизительно так

  • установить Docker и Docker-compose,
  • загрузить репозиторий,
  • запустить команду ./bin/start.sh.

Нужна автоматизация процесса разработки, обращайтесь office@system-admins.ru

Оставить комментарий

Лимит времени истёк. Пожалуйста, перезагрузите CAPTCHA.