Docker. Как заполнить объем при запуске
Я использую docker-compose для запуска проекта Django.
Моя цель состоит в том, чтобы docker стартовал с существующими данными (статикой, базой данных и всем содержимым медиа-каталога).
В настоящее время статика собирается и распределяется по томам. База данных начинается с подготовленного дампа.
<<<Каталог/media добавлен в .dockerignore
Вопрос в том, как правильно заполнить медиа-том из каталога медиа при первом запуске docker compose (то есть когда медиа-том еще пуст)?
docker-compose.yaml файл:
volumes:
mysql_data:
static:
media:
services:
db:
image: mysql:8.0
restart: always
volumes:
- mysql_data:/var/lib/mysql
- ./database_dump.sql:/docker-entrypoint-initdb.d/dump.sql
environment:
- MYSQL_DATABASE=${MYSQL_DATABASE}
- MYSQL_USER=${MYSQL_USER}
- MYSQL_PASSWORD=${MYSQL_PASSWORD}
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
env_file:
- .env
backend:
build: ./
depends_on:
- db
restart: always
volumes:
- static:/app/static/
- media:/app/media/
env_file:
- .env
nginx:
build: ./gateway/
depends_on:
- backend
ports:
- "8000:80"
restart: always
volumes:
- static:/static/
- media:/media/
Dockerfile:
FROM python:3.11
WORKDIR /app
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1
ENV DJANGO_SETTINGS_MODULE='app.settings'
RUN apt-get update && apt-get install -y netcat-openbsd
COPY ./requirements.pip ./
RUN pip install --upgrade pip && pip install -r requirements.pip --no-cache-dir
COPY . .
RUN python manage.py collectstatic --no-input
RUN chmod +x ./entrypoint.sh
EXPOSE 8000
ENTRYPOINT ["./entrypoint.sh"]
entrypoint.sh:
#!/bin/sh
echo "Waiting for MySQL..."
while ! nc -z $MYSQL_HOST $MYSQL_PORT; do
sleep 0.1
done
echo "MySQL started"
python manage.py migrate --no-input
gunicorn app.asgi:application \
--bind 0.0.0.0:8000 \
--workers 8 \
--worker-class uvicorn.workers.UvicornWorker
exec "$@"