Создание базы данных с помощью docker-compose django

У меня есть Django приложение, которое докеризовано и использует Postgres для базы данных, и я хочу, чтобы каждый раз, когда кто-то собирает docker-compose, приложение создавало базу данных внутри контейнера db, если база данных еще не существует, а также у меня есть некоторые статические данные в некоторых таблицах, и я хочу вставить эти данные, если те же данные не существуют в таблицах.

docker-compose.yml

version: "3.8"
   
services:
  db:
    container_name: db
    image: "postgres"
    restart: always
    volumes:
      - postgres_data:/var/lib/postgresql/data/
    env_file:
      - dev.env
    ports:
      - "5432:5432"

  app:
    container_name: app
    build: 
      context: .
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - ./core:/app
      - ./data/web:/vol/web
    env_file:
      - dev.env
    ports:
      - "8000:8000"
    depends_on:
      - db

volumes:
  postgres_data:

Dockerfile

FROM python:3
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1

# COPY ./core /app

WORKDIR /app
EXPOSE 8000

COPY ./core/ /app/
COPY ./scripts /scripts

RUN pip install --upgrade pip
COPY requirements.txt /app/
RUN pip install -r requirements.txt && \
    adduser --disabled-password --no-create-home app && \
    mkdir -p /vol/web/static && \
    mkdir -p /vol/web/media && \
    chown -R app:app /vol && \
    chmod -R 755 /vol && \
    chmod -R +x /scripts

USER app

CMD ["/scripts/run.sh"]

/scripts/run.sh

#!/bin/sh

set -e

ls -la /vol/
ls -la /vol/web

whoami

python manage.py collectstatic --noinput
python manage.py migrate

uwsgi --socket :9000 --workers 4 --master --enable-threads --module app.wsgi
Вернуться на верх