天天看點

Docker Swarm 編排及部署 PostGIS,并操作 GIS 資料

本文還是繼docker之後的一片更新,隻是這次使用 Docker stack 進行容器部署及編排。部分圖檔來自 Docker 官網。

postgis 鏡像的基礎是 PostgreSql,是以我們部署了 postgis 鏡像也就意味着有了 PostgreSql 資料庫,在Docker Hub上已經有人為我們建構好了,我們拉取配置即可使用。

Swarm 是 Docker 官方提供的一款叢集管理工具,其主要作用是把若幹台Docker主機抽象為一個整體,并且通過一個入口統一管理這些Docker 主機上的各種 Docker 資源。相較與 k8s(Kubernetes), Swarm 的功能也更少一些。但是 Docker 公司已經同時支援了 Swarm 和k8s。 Swarm 的基本架構如下圖所示,

Docker Swarm 編排及部署 PostGIS,并操作 GIS 資料

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: [email protected]
      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

Docker Swarm 編排及部署 PostGIS,并操作 GIS 資料

連接配接資料庫

序号 名稱 備注
1 主機名 47.95.247.* ip
2 端口 5432
3 資料庫 gis
4 使用者名 sde
5 密碼
Docker Swarm 編排及部署 PostGIS,并操作 GIS 資料

連接配接效果

Docker Swarm 編排及部署 PostGIS,并操作 GIS 資料

在 QGIS 中連接配接 PostGIS 容器

Docker Swarm 編排及部署 PostGIS,并操作 GIS 資料

QGIS 連接配接效果

Docker Swarm 編排及部署 PostGIS,并操作 GIS 資料

用 QGIS 導入 shape 資料

打開QGIS, 将要添加的資料加載到QGIS中,并打開DBManager 插件,點選下圖中所示的導入圖層按鈕。

将 shapefile 資料導入 postgis 中

Docker Swarm 編排及部署 PostGIS,并操作 GIS 資料

導入完成

Docker Swarm 編排及部署 PostGIS,并操作 GIS 資料

在 QGIS 中浏覽資料

Docker Swarm 編排及部署 PostGIS,并操作 GIS 資料

在 QGIS 中編輯資料

Docker Swarm 編排及部署 PostGIS,并操作 GIS 資料

回到 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 都裝不了。不哭了,真窮。