1 前言在文章《Docker启动PostgreSQL并推荐几款连接工具》中我们介绍如何通过Docker 来启动PostgreSQL ,但只有一个数据库,如果想要创建多个数据库在同一个Docker 容器上怎么办呢? 2 两种方案一种方案是把shell/sql 脚本放入/docker-entrypoint-initdb.d/ 目录中,让容器启动的时候自动执行创建;另一种是通过shell 脚本指定创建,本质是一样的。这里只介绍第一种。 把shell 脚本或sql 脚本放入指定目录,就会自动执行,两种脚本都可以。 shell 脚本例子如下:
#!/bin/bashset -eset -ufunction create_user_and_database() { local database=$1 echo " Creating user and database '$database'" psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" <<-EOSQL CREATE USER $database; CREATE DATABASE $database; GRANT ALL PRIVILEGES ON DATABASE $database TO $database;EOSQL}if [ -n "$POSTGRES_MULTIPLE_DATABASES" ]; then echo "Multiple database creation requested: $POSTGRES_MULTIPLE_DATABASES" for db in $(echo $POSTGRES_MULTIPLE_DATABASES | tr ',' ' '); do create_user_and_database $db done echo "Multiple databases created"fi sql 脚本例子如下:
CREATE USER pkslowuser;CREATE DATABASE logdata;GRANT ALL PRIVILEGES ON DATABASE logdata TO pkslowuser;CREATE DATABASE orderdata;GRANT ALL PRIVILEGES ON DATABASE orderdata TO pkslowuser;CREATE DATABASE userdata;GRANT ALL PRIVILEGES ON DATABASE userdata TO pkslowuser; 3 打包启动准备Dockerfile ,把shell/sql 脚本文件放入镜像中去: FROM postgres:10COPY src/main/resources/create-multiple-postgresql-databases.sh /docker-entrypoint-initdb.d/COPY src/main/resources/create-multiple-postgresql-databases.sql /docker-entrypoint-initdb.d/ 启动如下: docker run -itd / --name pkslow-postgres / -e POSTGRES_MULTIPLE_DATABASES=db1,db2 / -e POSTGRES_USER=pkslow / -e POSTGRES_PASSWORD=pkslow / -p 5432:5432 / pkslow/postgresql-multiple-databases:1.0-SNAPSHOT 启动成功后,就会创建如下数据库: db1,db2,logdata,orderdata,userdata 4 总结这是在开发测试阶段使用的方案,实际上把数据库放在容器中不是一个好的选择。 代码请查看:https://github.com/LarryDpk/pkslow-samples 下载地址: 服务器大量php-cgi.exe进程导致CPU占用100%的解决方法 Docker中运行PostgreSQL并推荐几款连接工具 |