Оптимизация пересборки Docker контейнеров с одним образом
Есть приложение, завёрнутое в docker-compose, вот кусок конфига:
...
app:
build: .
restart: unless-stopped
command: uvicorn --host 0.0.0.0 --port 8080 --workers 4 --log-config ../uvicorn_log.ini asgi:application
volumes:
- static_volume:/home/app/staticfiles
- media_volume:/home/app/media
- seo_volume:/home/app/seo
- ${LOGGING_DIR}:/home/app/logs
expose:
- "8080"
env_file:
- .env
depends_on:
- postgres
- public_api_postgres
- redis
celery_worker:
build: .
command: celery -A celery_app worker --loglevel=INFO
restart: unless-stopped
depends_on:
- app
env_file:
- .env
volumes:
- ${LOGGING_DIR}:/home/app/logs
celery_beat:
build: .
command: celery -A celery_app beat -l info --scheduler django_celery_beat.schedulers:DatabaseScheduler
restart: unless-stopped
depends_on:
- app
env_file:
- .env
volumes:
- ${LOGGING_DIR}:/home/app/logs
...
И есть простой скрипт пересборки этого дела:
#!/bin/bash
if ! cd "$1" ; then
echo "Failed to enter folder $1"
exit 1
fi
git pull origin $2
docker-compose rm -sf celery_worker celery_beat app
docker-compose build --no-cache celery_worker celery_beat app
docker-compose up -d celery_worker celery_beat app
docker system prune -af
До этого сервисов celery_worker и celery_beat не было, но сейчас добавились, и я задумался о том, как оптимизировать пересборку приложения.
Стоит ли использовать --no-cache в данном случае? Какие ещё варианты оптимизации есть, если у меня по факту один и тот же образ собирается три раза и просто запускается с разными командами?
UPD: результат команды docker images
