Необходимо настроить инфраструктуру для нового проекта. Раньше я использовал марионетку отдельно с дженкинсами, но теперь я думаю о включении сборников докеров, так что я мог бы продвигаться от разработчика к стадии до производства, не запуская сборку, а просто получая докерные изображения докеров, которые уже были встроенный.
Приложение:
- Веб-приложение Java с поддержкой api при поддержке postgresql, neo4j, elasticsearch
- Клиентское приложение, написанное с помощью angular, которое разговаривает с java через rest api
- Код, хранящийся в репозиториях git
Envs:
- Сервер Dev (создание, dev + тестовые среды) - 32-гигабайтная Linux-машина
- Сервер тестирования (AWS)
- Производство (AWS)
Настройка:
Так что в основном я думал примерно так:
- Отдельные изображения Docker для приложения java + cient side, postgresql, elasticsearch, neo4j, которые разговаривают друг с другом и хранят свои данные на хостах через тома Docker, или используя контейнеры данных Docker (еще не определились с подходом)
- Дженкинс строит весь код и создает изображения Docker, которые будут перенесены в закрытый внутренний репозиторий.
- Тестирование интеграции выполняется с модулем док-станции Puppet на сервере DEV
- Нажмите на производство с дженкинсами через марионетку с помощью Docker
Почему я должен использовать докер?
- Big dev machine - может легко запускать несколько приложений моего приложения без необходимости виртуализации (может иметь неустойчивый dev, стабильный dev, sit и т.д.).
- Простота развертывания (используйте докер и модуль кукольного докера) и откат (просто загрузите предыдущую версию из репозитория Docker)
- Быстрая миграция и возможность запуска новых экземпляров
- Подготовка к простому масштабированию различных частей системы (например, кластеризация elasticsearch)
Вопросы
- Это выглядит разумно?
- Я думаю об использовании этого кукольного модуля https://github.com/garethr/garethr-docker. Как обновить мои среды через него? Я должен как-то остановить контейнер докеров, сделать докер rm, а затем запустить докер?
- Мы используем Liquibase для управления обновлением базы данных. Угадайте, что это должно идти отдельно от докеров для обновлений/откатов?
Любые предложения приветствуются, спасибо.