Docker和Postgresql:如何管理数据

时间:2019-03-13 10:24:11

标签: django postgresql docker-compose docker-volume

我正在研究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应用中,更改了用于访问postgresql的settings.py

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 :(将/ 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"

在这种方法中,我不必担心用户或至少在一开始就在容器中创建数据库。

选项2 :(使用由docker compose创建的命名卷)

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

 volumes
  datavolume

现在,卷数据是持久的。数据存储在容器中。

缺点:

我的迁移丢失了。

我还必须创建用户[myproject]和数据库[myproject],然后使用docker run dbpostgres从开发服务器的备份转储中还原数据库。

哪种是存储postgresql数据的最佳方法。

0 个答案:

没有答案