Я обычно использую простую композицию производственных образов для управления производственными развертываниями, поэтому исключительно полагаюсь на docker-compose.
Я не использую Kubernetes или другие инструменты, поскольку хочу, чтобы в моих простых приложениях было проще (я не развертываюсь на нескольких хостах, не управляю балансировкой нагрузки или не выполняю CD / CI)
Вот как может выглядеть мой производственный состав:
version: '3'
services:
php:
image: ${CONTAINER_REGISTRY_BASE}/php:${VERSION}
depends_on:
- db
env_file:
- ./api.env
api:
image: ${CONTAINER_REGISTRY_BASE}/api:${VERSION}
depends_on:
- php
- db
db:
image: mariadb:10.2
client:
image: ${CONTAINER_REGISTRY_BASE}/client-prod:${VERSION}
env_file:
- ./client.env
admin:
image: ${CONTAINER_REGISTRY_BASE}/admin-prod:${VERSION}
env_file:
- ./admin.env
Сохранение одной глобальной версии для стека приложений в файле .env
, когда я обновляю эту версию, мне просто нужно сделать следующее:
docker-compose build
docker-compose push
А на рабочем сервере (после обновления версии)
docker-compose up -d
Как вы можете себе представить, проблема в том, что я отправляю весь стек, даже если в одной из служб есть очень маленькая модификация.
Я думал о том, чтобы иметь разные версии для каждого сервиса, но его было довольно сложно поддерживать, так как мы не могли точно знать, какая версия является последней для каждого.
Я вижу это неправильно? Разве я не должен использовать docker-compose в производстве? В каком случае, что я должен использовать?
Может кто-нибудь предложить мне простой способ развертывания, основанный на реестре докеров?