Александр Малаев: Доклад о том как мы используем Docker для сборки и деплоя наших Phoenix приложений; сборка и тестирование в Gitlab CI; текущие проблемы связанные с Docker и как их решать: http://elixir-lang.moscow/events/2/talks/phoenix-i-docker
✓прокинул порт и работает • нужно иметь elixir-окружение на сервере • нужно иметь системные зависимости в проде • нет нормальных init-скриптов • содержит ненужные артефакты
✓ code hot swapping ✓ есть утилиты для управления релизом - start/stop/remote_console/etc… ✓ поддерживается в Erlang OTP и production-ready • релиз нужно собирать на машине с той же архитектурой • нет возможности запускать mix-таски в проде • зоопарк с утилитами для сборки(exrm/distillery/etc…) • проблема с системными зависимостями тоже есть
otp-релиза, с некоторыми ограничениями: ‣ docker и hot swapping — взаимоисключающие вещи ‣ сложности с distributed erlang ✓ системные зависимости пишем в Dockerfile ✓ легкая интеграция в CI ✓ можно использовать с docker-swarm, kubernetes, coreos, etc.
много bash-кода внутри • устаревает в пользу Distillery • Distillery • проще чем exrm внутри • тоже много bash-кода :( • Deploy-тулзы: • edeliver • capistrano/mina/ansible/etc.
кэширование между этапами сборки • запуск интеграционных тестов Как обойти? • Зависимости в Dockerfile.build проекта • Dockerfile ENTRYPOINT • Кэширование артефактов в docker volume • Запуск сервисов из services в .gitlab-ci.yml
docker-образами из docker registry • обновляем образы из registry • при старте релиза запускаем миграции • логи собираются в ELK • краши из приложений падают в Sentry
сервисами. https://github.com/spscream/eid • Персистентные Docker-контейнеры, вместо рестартуемых и поддержка hot swapping • Поддержка rollback-миграций при downgrade релиза • Реализация OTP-registry, для хранения релизов
Мои проекты и вклад в OSS: https://github.com/progress-engine/tarantool.ex https://github.com/spscream Проекты нашей команды тут: https://github.com/ccsteam