docker配置PostgreSQL数据库
参考官方文档 https://hub.docker.com/_/postgres
1. 下载镜像
下载postgres镜像:
| |
2. 创建本地持久化目录
创建本地持久化目录:
| |
3. 尝试运行容器
为了密码安全,我们创建一个保证密码的配置文件postgres-passwd:
| |
运行postgresql容器:
| |
使用这种方式运行容器中一直提示找不到文件:
| |
百度搜索docker postgresql POSTGRES_PASSWORD_FILE设置POSTGRES_PASSWORD_FILE文件的参考文献非常少。
我们改用直接在命令行设置密码形式运行:
| |
可以看到postgres-server容器运行正常!
以上运行容器命令中,需要输入 POSTGRES_PASSWORD=securepasswd来指定密码,也存在一定的风险。
通过docker run帮助文档可知我们可以使用--env-file list Read in a file of environment variables (default [])参数来将环境变量设置在文件中。我们可以配置一个环境变量文件。
我们先环境一个.postgres.env的环境变量文件,并存放在/dockerdata/postgresql目录下,其内容如下:
| |
查看文件内容:
| |
我们将之前运行的postgres-server容器删除掉。然后重新创建新的容器。
4. 删除不用的容器
我们在~/.bashrc文件中加上以下内容:
| |
然后使用source ~/.bashrc使快捷命令生效。我们使用快捷命令将之前生成的postgres-server容器删除掉。
| |
可以看到postgres-server容器已经被删除掉了。
将之前容器本地挂载的目录下的文件清空掉。
| |
5. 通过环境文件读取环境变量来运行容器
运行以下命令:
| |
命令释义:
docker run运行容器。--name postgres-server指定容器名称。--restart=alwaysdocker服务重启后本容器自动启动。-p 5432:5432将容器中的5432端口映射到宿主机端口的5432端口,-p 宿主机端口:容器内部端口。-v /dockerdata/postgresql/data:/var/lib/postgresql/data将容器中路径/var/lib/postgresql/data挂载到宿主机的/dockerdata/postgresql/data目录,实现数据持久化。--env-file=/dockerdata/postgresql/.postgres.env从环境变量文件中读取环境变量。-d postgres在后台运行容器。
执行命令:
| |
查看日志信息:
| |
可以看到日志中没有报错,容器运行正常。
| |
可以看到我们设置的环境变量已经正常读取到容器的元数据当中了。
6. 进入容器操作数据库
使用以下命令进入到postgres数据库中:
| |
由于我们在创建容器的时候设置了环境变量,现在在容器内可以直接使用环境变量:
| |
可以看到环境变量能够正常使用。
下面我们使用psql连接到数据库命令行。
| |
PostgreSQL 语法详细可参考: https://www.runoob.com/postgresql/postgresql-syntax.html
我们通过psql命令进入到数据库命令行:
| |
可以看到已经进入到testdb数据库下了。
7. 创建数据库和用户并授权
我们为nextcloud私有云盘创建一个nextcloud的数据库,并创建一个ncadmin的用户,并将ncadmin授权控制nextcloud数据库。
- 创建数据库
| |
执行命令:
| |
- 创建用户
| |
执行命令:
| |
列出所有用户:
| |
- 授权
| |
执行命令:
| |
- 更新用户密码
| |
执行命令:
| |
退出:
| |
8. 测试授权是否成功
为了测试在宿主机上面能否连接到容器的数据库,我们在宿主机上面安装postgresql客户端:
| |
登陆:
| |
能够正常登陆进数据库命令行,尝试创建表并插入数据:
| |
说明操作正常!连接没有问题。
参考:
