Оптимизация пересборки 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

docker images


Ответы (0 шт):