Django docker-compose: как обрабатывать миграции и собирать статику

У меня есть приложение django, которое я пытаюсь "докеризировать". Я довольно близок к этому, но столкнулся с небольшой проблемой.

По сути, я пытаюсь понять, как мне справиться с тем, что каждый раз, когда я запускаю docker-compose, я должен запускать python manage.py migrate.

Есть предложения? Ниже мой dockerfile и мой dockercompose. Если они совершенно неправильные, пожалуйста, сообщите мне об этом.


# pull official base image
FROM python:3.10-alpine

# set work directory
WORKDIR /app

# set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
ENV DEBUG 0

# install psycopg2
RUN apk update \
    && apk add --virtual build-essential libffi-dev gcc python3-dev musl-dev \
    && apk add postgresql-dev \
    && pip install psycopg2

# install dependencies
COPY ./requirements.txt .
RUN pip install -r requirements.txt
# copy project
COPY . .

# add and run as non-root user
RUN adduser -D miliu
USER miliu

# run gunicorn
# CMD gunicorn mywebsite.wsgi:application --bind 0.0.0.0:$PORT
CMD python ./manage.py collectstatic --noinput

version: "3.8"
services:
  web:
    build: .
    volumes:
      - .:/django
    ports:
      - 8000:8000
    env_file: .env
    image: miliu
    container_name: miliu_container
    command: >
      sh -c "python manage.py migrate &&
             python manage.py runserver 0.0.0.0:8000"
    depends_on:
      - db
  db:
    image: postgres
    volumes:
      - ./data/db:/var/lib/postgresql/data
    environment:
      - POSTGRES_DB=postgres
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
    command: postgres -c password_encryption=md5
    container_name: postgres_db
    #platform: linux/x86_64
    #image: mysql:5.7
    #environment:
    #  MYSQL_DATABASE: 'django-app-db'
    #  MYSQL_ALLOW_EMPTY_PASSWORD: 'true'
    #volumes:
    #  - ./data/mysql/db:/var/lib/mysql
Вернуться на верх