Как инициализировать контейнер postgres с данными, используя .dump вместо .sql? - PullRequest
1 голос
/ 09 апреля 2019

я видел в документах и ​​многих решениях для инициализации контейнера postgres с базой данных, используя init.sql, как упомянуто в этом вопросе :

COPY init.sql /docker-entrypoint-initdb.d/10-init.sql

Проблема заключается вчто данные моей базы данных в .sql слишком велики (8 ГБ).Это делает процесс дампа длинным, а файл - тяжелым.Я пытался сделать что-то похожее на этот подход, генерируя файл .dump с (540 МБ).

У меня есть 2 контейнера для запуска моего проекта django.Dockerfile для моей среды Python и изображения postgres.Мои файлы докера показаны в конце этого вопроса.До сих пор мне удалось запустить дамп в моем контейнере с помощью следующих шагов:

  1. Я добавляю свой .dump файл в свой контейнер в docker-compose
  2. сборка моих контейнеров
  3. Зайдите в мой контейнер postgres и выполните команду pg_restore для выгрузки моей базы данных.
  4. Затем перейдите в мой контейнер python / django, чтобы выполнить команду migrate.
  5. И, наконец,Запустите сервер.

Это работает, но не автоматизировано.Как я могу автоматизировать эту проблему в моих файлах докера, чтобы мне не нужно было выполнять эти команды вручную?

Ниже приведены мои файлы и команды, необходимые для запуска моего .dump файла в контейнере postgres:

создать и добавить ./project-dump/latest.dump в мой проект

docker-compose up -d web db #build containers

docker-compose exec db bash # go in my postgres container
pg_restore --verbose --clean --no-acl --no-owner -h {pg_container_name} -U postgres -d database_dev 
exit # exit postgres container
docker-compose exec web bash # go in my python/django project container
./manage.py migrate # migrate database
./manage.py runserver 0.0.0.0:3000 #run server

Dockerfile:

FROM python:3.7.3-stretch
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
COPY requirements.txt /code/
RUN pip install -r requirements.txt
COPY . /code/
COPY init.sql /docker-entrypoint-initdb.d/10-init.sql
RUN python manage.py migrate
EXPOSE 3000

docker-compose.yaml

version: '3'
services:
  db:
    image: postgres
    environment:
      POSTGRES_USER: postgres
      POSTGRES_DB: database_dev
      POSTGRES_PASSWORD: secret
    ports:
      - "5432:5432"
    volumes:
      - ./project-dump/:/var/www/html
  web:
    build: .
    command: python3 manage.py runserver 0.0.0.0:3000
    volumes:
      - .:/django-docker
    ports:
      - "3000:3000"
    depends_on:
      - db

init.sql

CREATE DATABASE database_dev;
GRANT ALL PRIVILEGES ON DATABASE database_dev TO postgres;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...