(三)用docker-compose部署postgres+ postgis
因为postgres用docker镜像安装,所以host不需要安装pg,只需要安装客户端
sudo apt-get install -y postgresql-client
postgres+postGIS
使用https://github.com/appropriate/docker-postgis 有各种版本组合,目前使用 pg11 + pGIS 2.5
把3个文件放到1个文件夹里我这里是./machines/postgis,因为还有别的dockerfile。让docker-compose能找到
# Use postgres/example user/password credentials
version: '3.7'services:postgis: #postgres+ postGIS 安装 不塞入自己写的任何代码!#image: mdillon/postgis #图省事可以直接用docker hub上的镜像build: ./machines/postgisrestart: alwaysenvironment:POSTGRES_PASSWORD: examplevolumes:- data_pg:/var/lib/postgresql/dataports:- "5432:5432"networks:mynet:ipv4_address: '172.19.0.12'networks:mynet:ipam:driver: defaultconfig:- subnet: 172.19.0.0/16volumes:data_pg:driver_opts:type: none#device: ./commondevice: /home/XXX/data_pgo: bind
小坑: volume 用bind本地文件夹的方式,一定要先手工创建出 /home/XXX/data_pg 来
然后, 一定要注意挂载进去名字要一样. 今年文曲化忌,很容易因为这些小问题卡住
networks是为了手工指定IP地址,真正和pg有关的是把本地文件夹作为volumes 命名为data_pg 挂进去,让pg能找到,这样数据保存在本地文件夹里。
暴露pg的默认端口5432,用于pgadmin查看
----20190505发现的坑--------
启动sh脚本需要时间, 多个服务的时候,或者原作者那样直接docker run 不会有问题
但是,如果docker-compose 只包含1个pg服务的时候, 直接entrypoint就退了! 无论如何启动不好.
卡了1晚上.
不得不说,docker-compose 不是个适合定制初始化过程的工具. 服务间等待之类的都要依赖wait-for-it.sh,像这种只有1个服务的,反而问题更大.有点垃圾.
主观原因:还是不够单一职责,
让docker-compose只负责把实例启动起来
不要把初始化db这些工作,耦合进容器启动中这个生命周期里来,
应该在启动后用别的方式搞定.
于是一咬牙.舍掉sh脚本
无非是用psql 连接pg 创建数据库模板, 安装postgis extention的语句.这些
实测,完全可以用py通过pscopg2 搞定.
——果然,1小时搞定
多说几句,dockerfile写的很精简
FROM postgres:12LABEL author xuqinghanENV POSTGIS_MAJOR 3ENV POSTGIS_VERSION 3.0.0+dfsg-2~exp1.pgdg100+1RUN apt-get update \&& apt-cache showpkg postgresql-$PG_MAJOR-postgis-$POSTGIS_MAJOR \&& apt-get install -y --no-install-recommends \postgresql-$PG_MAJOR-postgis-$POSTGIS_MAJOR=$POSTGIS_VERSION \postgresql-$PG_MAJOR-postgis-$POSTGIS_MAJOR-scripts=$POSTGIS_VERSION \postgis=$POSTGIS_VERSION \&& rm -rf /var/lib/apt/lists/*RUN mkdir -p /docker-entrypoint-initdb.d
COPY ./initdb-postgis.sh /docker-entrypoint-initdb.d/postgis.sh
COPY ./update-postgis.sh /usr/local/bin
只要把sh考进去, 就能在最后结尾时自动当成entrypoint 执行
这样,不需要显式写 ENTRYPOINT CMD
dockerhub官网直接有postgis镜像,但是pg版本低,还是9.x的
所以就选择自己配个pg10+postgis 2.4.1
postgres
postgres在dockerhub上的官方介绍不是太清楚,没有演示-v
我目前的主要需求是:
db用镜像起容器
数据内容保存在容器外
启动db容器时,用-v把数据内容挂进去
主要目的就是懒得安装db配参数,然后,db更新升级的时候别影响数据。
yml这样写
# Use postgres/example user/password credentials
version: '3.1'services:db:image: postgresrestart: alwaysenvironment:POSTGRES_PASSWORD: examplevolumes:- /home/db/postgres:/var/lib/postgresql/dataadminer:image: adminerrestart: alwaysports:- 8080:8080
/home/db/postgres是自己随便写的。可以事先不存在。
放在/home,是因为装系统的时候/home为独立分区,重装系统的时候只要挂载点选上home,就完全保留数据。
然后用adminer 登录数据库。用户名用 postgres 密码是 example Database是postgres
server对应的是docker-compose.yml里services:下面 用postgres镜像的名字,在这里是db。如果换成别的名字,就要注意修改!
老实说,和pg的文档八字不合。先是没看懂dockerhub里各种乱七八糟的参数设置介绍(例子里用全局变量配了密码,可是不配用户名,莫名其妙啊);
然后没看懂“Use postgres/example user/password” 这句话。直接写 user:postgres password:example,或者加个as “ use postgres/example as user/password”行吗?
是我智力低, 脑抽了,还是他文档过于奇葩?
反正主要是为了postgis也就忍了。
PostGIS
安装依赖项一堆,除去常见的gcc make g++,这些不算,gdal geos proj4 3件套是必装的,官网的各种版本依赖关系矩阵茫茫多啊。。。然后还有json-c什么的。
实在懒得自己配了。直接参考github上docker-postgis, dockerhub地址
只要把第一句pg版本从9.5改成10.0就OK了:优点,使用的linux是alpine,体积超小。但gdal,geos 都是用apk 安装的,看版本,在依赖关系矩阵里也还算比较新吧。
只砍了一句,不知道postgis 2.4.1的 SHA256码是多少,砍了
(三)用docker-compose部署postgres+ postgis相关推荐
- docker compose部署服务
1 用docker compose部署服务 - 需求:假如现在我们手里有很多容器,每个容器对应每个服务,有nginx容器,redis容器,mysql容器等.现在我们需要批量化的去管理,批量启动,停止, ...
- 使用Docker Compose 部署Nexus后提示:Unable to create directory /nexus-data/instance
场景 Ubuntu Server 上使用Docker Compose 部署Nexus(图文教程): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/ ...
- 使用Docker Compose 部署Nexus后初次登录账号密码不正确,并且在nexus-data下没有admin.password
场景 Ubuntu Server 上使用Docker Compose 部署Nexus(图文教程): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/ ...
- Ubuntu Server 上使用Docker Compose 部署Nexus(图文教程)
场景 Docker-Compose简介与Ubuntu Server 上安装Compose: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/deta ...
- Docker Compose部署Nexus3时的docker-compose.yml代码
场景 Docker-Compose简介与Ubuntu Server 上安装Compose: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/deta ...
- Docker Compose部署GitLab服务,搭建自己的代码托管平台(图文教程)
场景 Docker-Compose简介与Ubuntu Server 上安装Compose: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/deta ...
- Docker Compose部署项目到容器-基于Tomcat和mysql的项目yml配置文件代码
场景 Docker-Compose简介与Ubuntu Server 上安装Compose: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/deta ...
- 使用Docker Compose部署SpringBoot应用
使用Docker Compose部署SpringBoot应用 原创: 梦想de星空 macrozheng 6月19日 Docker Compose是一个用于定义和运行多个docker容器应用的工具.使 ...
- Docker - 使用Docker Compose部署应用
简介 Docker Compose是一个基于Docker Engine进行安装的Python工具.该工具使得用户可以在一个声明式的配置文件中定义一个多容器的应用,在Docker节点上,以单引擎模式(S ...
最新文章
- 查看本地oracle密码,Oracle 本地验证和密码文件
- HBase基本概念和hbase shell常用命令用法
- html校验长度为9位,2018记一次前端面试笔试考题一
- python服务端开发调试日志系统_Python:如何进行延迟调试日志记录
- django中collectstatic的使用(亲测)
- 爬虫软件python彻底卸载_Python爬虫实践:如何优雅地删除豆瓣小组的帖子
- 自动化运维 Shell
- 逻辑漏洞(基本概念、爆破)
- 企业微信好友和微信好友的区别
- 什么是python语言的解释性?
- Lowest, highest?
- 【遇到的问题】VMware Workstation 无法连接到虚拟机。请确保您有权运行该程序、访问该程序使用的所有目录以及访问所有临时文件目录。
- html页面播放avi视频
- 计算机毕业设计Java-ssm办公自动化管理系统源码+系统+数据库+lw文档
- 骑士cms火车头发布模块-骑士cms火车头采集规则免费
- 核心期刊《中国兽医学报》
- ccf-星际旅行(80分)
- mysql 初次进入_怎么初次进入mysql?
- R语言如何自定义调整所绘图形的大小?
- ACDSee Photo Studio for Mac 7.7.1全面的摄影控制。