Docker и postgresql: как управлять данными - PullRequest
0 голосов
/ 13 марта 2019

Я работаю над проектом Django.

В качестве сервера разработки используется хост arhclinux с запущенным postgresql.

Я создал базу данных в postgresql.

sudo su - postgres (get into the shell session for the postgres user)
[postgres]$ psql  (Log into a Postgres session by typing:)
 psql (10.3)
 Type "help" for help.

 postgres=# 
 postgres=# CREATE DATABASE myproject;
 postgres=# CREATE USER myprojectuser WITH PASSWORD 'password';
 postgres=# GRANT ALL PRIVILEGES ON DATABASE myproject TO myprojectuser;

В моем приложении django изменили settings.py для доступа к postgresql

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'myproject',
        'USER': 'myprojectuser',
        'PASSWORD': 'password',
        'HOST': 'localhost',
        'PORT': '',
    }

}

Затем в django я выполняю миграции и создаю суперпользователя:

# do migrations
cd ~/myproject
python manage.py makemigrations
python manage.py migrate

# create super user
python manage.py createsuperuser

Теперь я хочу использовать docker для производства:

Как лучше всего управлять моей базой данных postgresql:

Вариант 1: (mount / var / lib / postgresql внутри контейнера postgres)

Предполагается, что я использую хост-сервер aws ubuntu, затем устанавливаю на нем postgresql, создаю пользователя [myproject] и базу данных [myproject], а затем восстанавливаю свою базу данных из резервной копии с моего сервера разработки

psql dbname

Теперь в dockercompose.yml

  dbpostgres:
    image: postgres
    volumes:
      - /var/lib/postgresql:/var/lib/postgresql
    ports:
      - "5432:5432"

В этом методе мне не нужно беспокоиться о пользователе или создании базы данных в контейнере по крайней мере в начале.

Option 2: (используйте именованный том, созданный docker compose)

  dbpostgres:
    image: postgres
    volumes:
      - datavolume:/var/lib/mysql
    ports:
      - "5432:5432"

 volumes
  datavolume

Теперь данные тома являются постоянными.Данные хранятся в контейнере.

Минусы:

Мои миграции потеряны.

Также мне нужно создать пользователя [myproject] и базу данных [myproject], а затем восстановить мою базу данных из резервной копии из моей разработки.Сервер с помощью Docker запускает dbpostgres.

Какой лучший способ хранения данных postgresql.

...