自定义docker镜像集成postgresql10.5+postgis2.4.7插件+pipeline1.0.0插件制作秘籍
概念
1.通过docker快照打镜像,参考https://bbs.huaweicloud.com/blogs/231bfdd3b5b811e89fc57ca23e93a89f
步骤
1.dockerhub 上启动centos7必须要用特权方式启动:
docker run --privileged -itd --name=pg10_postgis2_pipelinedb1_jj 9f38484d220f /usr/sbin/init
2.进入容器开始制作新镜像
docker exec -it d6415e876d14 /bin/bash
安装pg10.5:
1.首先安装PostgreSQL的rpm
yum install https://download.postgresql.org/pub/repos/yum/10/redhat/rhel-7-x86_64/pgdg-centos10-10-2.noarch.rpm -y
2.安装postgresql10-contrib和postgresql10-server
yum install postgresql10-contrib postgresql10-server -y
装好后这样会自动给我们的系统增加一个postgres用户以及postgres组!
3.
修改默认数据目录
Postgresql默认的数据目录是/var/lib/pgsql/版本号/data目录,这要求你在/var下有足够的存储空间,我们这里将其换掉,假设/home的空间很大。
首先在/home下创建一个Postgresql的数据目录,指定所有者postgres同时分配权限
mkdir /home/postgresql_data chown postgres:postgres /home/postgresql_data chmod 750 /home/postgresql_data
设置环境变量/etv/profile
export PATH=/usr/pgsql-10/bin:$PATH export LD_LIBRARY_PATH=/usr/pgsql-10/lib export PGDATA=/home/postgresql_data
记住要重置环境变量:source /etc/profile
切换到postgres用户,使用initdb初始化数据库,这样在/home/postgresql_data下会增加很多东西.
接着修改/usr/lib/systemd/system/postgresql-10.service文件的内容,在#Location of database direcotry里面指定正确的PGDATA:
#Location of database directory Environment=PGDATA=/home/postgresql_data
4.配置数据库服务开机启动并立即启动数据库服务
systemctl enable postgresql-10.service
systemctl start postgresql-10.service
systemctl status postgresql-10.service
5.修改密码
分为postgres用户密码和数据库密码,保持一致吧
passwd postgres
设置数据库密码:
su postgres psql ALTER USER postgres WITH PASSWORD '密码';
\l 列出当前库:
\q退出pg,exit退出postgres用户
安装postgis2.4插件
1.先安装几个工具包
yum install wget net-tools epel-release -y
2.安装pg
yum install postgis24_10 postgis24_10-client -y
3.安装拓展工具
yum install ogr_fdw10 -y yum install pgrouting_10 -y
4.进入postgres用户,创建数据库originaltek_testdb
su postgres
psql
CREATE DATABASE originaltek_testdb OWNER postgres;
进入数据库
\c spatial_testdb
安装PostGis扩展
spatial_testdb=# CREATE EXTENSION postgis; spatial_testdb=# CREATE EXTENSION postgis_topology;
验证是否安装成功
SELECT postgis_full_version();或者用 \dx 查看所有状态
安装pipelinedb1.0.0插件
先吐槽一下官网的方法有问题!!导致yum源一直302,不懂什么原因有知道的烦请指点一二,小生换了一招成功装上插件,但听我娓娓道来!
1.根据自己的环境下载pipelinedb包。(我是centos7 x86_32)
wget https://github.com/pipelinedb/pipelinedb/releases/download/1.0.0rev4/pipelinedb-postgresql-10-1.0.0-4.centos7.x86_64.rpm
2.安装rpm包
rpm -ivh pipelinedb-postgresql-10-1.0.0-4.centos7.x86_64.rpm
3.
我们来到data目录。如果是yum安装,默认目录在 /var/lib/pgsql/10/data/,我已经给这个目录重置了,到 /home/postgresql_data
修改这两个参数。要使PipelineDB运行,shared_preload_libraries
必须设置配置参数,该参数可以在postgresql.conf
数据目录下找到。设置max_worker_processes
相当高的值以使PipelineDB工作进程具有足够的容量也是一个好主意:
shared_preload_libraries = 'pipelinedb' max_worker_processes = 128
4.重启数据库
systemctl restart postgresql-10.service
5.同gis进入数据库创建pipelinedb插件扩展
create extension pipelinedb;
6.设置远程连接
修改配置文件
首先修改/home/postgresql_data/pg_hba.conf,改为trust!图片懒得截图了用的网上的不要参考
其次修改/home/postgresql_data/postgresql.conf,改为:
重启。
systemctl restart postgresql-10.service systemctl status postgresql-10.service
oh yeh 大功告成,恭喜兄弟入门!
打成docker 镜像
1.最后打成镜像差点忘掉,不好依稀~~
docker commit -m "originaltekj_guanghedb" -a "jy" d6415e876d14 originaltek/originaltekj_guanghedb:1.0.0
给刚才的容器,打个快照 docker commit -m "xx" -a "tsj" container-id tsj/image:tag -a : 提交的镜像作者; container-id : 刚才跑命令的容器id。可以使用 docker ps -a 查询得到; -m : 提交时的说明文字; tsj/image:tag : 仓库名/镜像名:TAG名
docker images查看
总结坑
1.所有进入数据库命令都要带上分号!不然会认为你一直没有结束语句!!!!!!!
2.dockerhub上的centos7没有sudo命令,因此开始装!
yum -y install sudo
3.安装locate便于查找东西
yum install mlocate -y
sudo updatedb
4.postgres
目录:/usr/pgsql-10/bin
data目录:/home/postgresql_data
5.postgis
目录:/usr/pgsql-10/share/extension
6.pipelinedb
目录:
/usr/pgsql-10/share/extension
7,运行自定义好的镜像
a.一定别忘了端口映射哦,pg默认5432 小生木有修改
b.千万记住要用–privileged方式起容器!
docker run --privileged -itd --name=guanghedb -p5210:5432 7462b3e8f560 /usr/sbin/init