开发者社区> 谷中仁> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Docker Swarm 编排及部署 PostGIS,并操作 GIS 数据

简介: 本文还是继docker之后的一片更新,只是这次使用 Docker stack 进行容器部署及编排。
+关注继续查看

本文还是继docker之后的一片更新,只是这次使用 Docker stack 进行容器部署及编排。部分图片来自 Docker 官网。

postgis 镜像的基础是 PostgreSql,所以我们部署了 postgis 镜像也就意味着有了 PostgreSql 数据库,在Docker Hub上已经有人为我们构建好了,我们拉取配置即可使用。

Swarm 是 Docker 官方提供的一款集群管理工具,其主要作用是把若干台Docker主机抽象为一个整体,并且通过一个入口统一管理这些Docker 主机上的各种 Docker 资源。相较与 k8s(Kubernetes), Swarm 的功能也更少一些。但是 Docker 公司已经同时支持了 Swarm 和k8s。 Swarm 的基本架构如下图所示,

docker_swarm_architecture

Docker stack 是一组有关服务的管理组合,是 Docker 关系层级中最高的一级,其作用主要是编排及管理服务(Service)。

目录及文件创建

创建目录

创建的目录用来做容器的数据存储,因为容器秉承的是用完即毁的理念,所以我们应该将我们的数据放在容器之外,生产环境之中,方便下次使用。

$ mkdir pgadmin_data && mkdir postgres_data # pgadmin_data 存储pgadmin的登录即数据库链接信息, postgres_data 存储数据库生产数据
$ tree
.
├── deploy
├── docker-compose.yml
├── pgadmin_data
└── postgres_data

编写 docker-compose.yml 文件

此次部署我们用到容器的编排,所以会有 deploy 里面的各种信息,若有不理解的,还请移步 Docker Compose

version: '3'

services:
  postgis:
    image: kartoza/postgis:9.6-2.4
    ports:
      - "5432:5432"
    environment:
      POSTGRES_USER: sde
      POSTGRES_PASS: sde
      POSTGRES_DBNAME: gis
      ALLOW_IP_RANGE: 0.0.0.0/0
    volumes:
      - ./postgres_data:/var/lib/postgresql
    deploy:
      mode: replicated
      replicas: 1
      restart_policy:
        condition: on-failure
        delay: 5s
        max_attempts: 3
      update_config:
        parallelism: 1
        delay: 10s
      placement:
        constraints:
          - node.role == manager

  pgadmin:
    image: chorss/docker-pgadmin4
    ports:
      - "8888:5050"
    environment:
      PGADMIN_SETUP_EMAIL: guzhongren@live.cn
      PGADMIN_SETUP_PASSWORD: 000000
    volumes:
      - ./pgadmin_data:/data
    deploy:
      mode: replicated
      replicas: 1
      restart_policy:
        condition: on-failure
        delay: 5s
        max_attempts: 3
      update_config:
        parallelism: 1
        delay: 10s
      placement:
        constraints:
          - node.role == manager

swarm 初始化及镜像部署

docker swarm 初始化

$ docker swarm init
Swarm initialized: current node (bvz81updecsj6wjz393c09vti) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join \
    --token SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-1awxwuwd3z9j1z3puu7rcgdbx \
    172.17.0.2:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

获取及部署镜像

编写启动脚本

$ vim deploy
# 加入如下命令
docker stack deploy --compose-file=docker-compose.yml postgre
# Esc --> wq
$ sudo chmod +x deploy

部署

$ ./deploy
Creating network postgre_default
Creating service postgre_postgis
Creating service postgre_pgadmin

链接 pgAdmin 即 Postgis数据库

访问我的阿里云网址+8888端口即可链接pgAdmin

pgadmin

连接数据库

序号 名称 备注
1 主机名 47.95.247.* ip
2 端口 5432
3 数据库 gis
4 用户名 sde
5 密码 sde

connect_database

连接效果

database_pg

在 QGIS 中连接 PostGIS 容器

序号 名称 备注
1 主机名 47.95.247.* ip
2 端口 5432
3 数据库 gis
4 用户名 sde
5 密码 sde

qgis

QGIS 连接效果

qgis_connect

用 QGIS 导入 shape 数据

打开QGIS, 将要添加的数据加载到QGIS中,并打开DBManager 插件,点击下图中所示的导入图层按钮。

将 shapefile 数据导入 postgis 中

dbmanager

导入完成

finish_import

在 QGIS 中浏览数据

view_data

在 QGIS 中编辑数据

edit_data

回到 Docker Swarm

使用 Docker swarm 我们可以更好的管理及扩展我们的Service,如扩容等,还可以对已经部署的容器进行无宕机式的“热更新”;docker stack 自带负载均衡,我们无需担心单个节点容器之间的访问是否会超载等,还有 docker stack 会保证service的数量一直和配置文件中的一直,保证其可用性。

总结

此次部署使用 Docker Swarm 来做集群管理,因为是部署在阿里云上,资源有限,不能进行多节点(Node)的创建及管理,只能用一个 Manager 节点来操作;但是不影响优化之前通过 Docker 简单命令创建及管理容器的操作。利用 Docker Stack 的优势,我们可以更好的管理 Service, 如扩容、更新、创建及销毁。k8s(Kubernetes) 有 Docker stack 的各种能力,但其能力远超 Docker Stack, 其使用也非常简单, 现在 Docker 公司已经开始兼容 k8s。

玩 Docker 还是需要多台机器,起码是虚拟机才好玩,一台阿里云ECS真不够,连 GitLab 都装不了。不哭了,真穷。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
部署Docker前必须问自己的四个问题
本文讲的是部署Docker前必须问自己的四个问题,【编者的话】Docker是当前技术领域最火热话题了,但是真正应用到生产环境并取得革命性成功的案例却并不多。很多人提起这个话题,往往认为Docker不够稳定,坑多,但在在实际的生产实践过程中,很多用户反馈Docker本身的稳定性不错,
1479 0
什么,容器太多操作不过来?我选择Docker Compose梭哈(下)
什么,容器太多操作不过来?我选择Docker Compose梭哈(下)
324 0
Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之部署master/node节点组件(四)
0、前言  整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录   1、部署master组件 master 服务器的组件有:kube-apiserver、kube-controller-manager、kube-scheduler 因此需要下载k8s master,下载地址:https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.9.md ,当然大家可以下载更高版本的。
1063 0
Docker 容器镜像删除
Docker 容器镜像删除 1.停止所有的container,这样才能够删除其中的images: docker stop $(docker ps -a -q) 如果想要删除所有container的话再加一个指令: docker rm $(docker ps -a -q) 2.
2162 0
windows7上使用docker容器
windows7上使用docker容器 1.安装 下载DockerToolbox,并安装。  下载地址:https://dn-dao-github-irror.daocloud.io/docker/toolbox/releases/download/v17.06.2-ce/DockerToolbox-17.06.2-ce.exe。
5568 0
Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之自签TLS证书及Etcd集群部署(二)
0、前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一、服务器设置   1、把每一个服务器的selinux 设置为 disabled 设置方式: vi  /etc/selinux/config 将 SELINUX=disabled,然后保存,然后 执行命令: setenforce 0,使之生效。
936 0
Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之flanneld网络介绍及部署(三)
0、前言   整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一、flanneld介绍    flannel是CoreOS提供用于解决Dokcer集群跨主机通讯的覆盖网络工具。
1024 0
+关注
126
文章
1
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载