如何通過Docker-Compose一鍵部署SuperMap iCloudManager
題記
前面一篇部落格已經向各位介紹了SuperMap iCloudManager 8C SP2已經支援Docker平臺了,並介紹瞭如何部署,當然我們可以看到,當時的部署方式通過一個已經安裝好的VMWare 的OVF包(內建了iCM\Zabbix-server\mariaDB),然後與另外一個Docker環境進行聯動。
這種方式的好處就是,好多資訊同時幫使用者做了,使用者可以非常方便的使用這個OVF包,那如果是物理環境呢?可能使用者還需要自己來部署類似OVF實現的步驟,而且更重要的是,這與我們現在Docker所提倡的微服務相矛盾,所謂微服務簡單來說就是將原來在同一個伺服器的多個伺服器拆分為獨立的容器執行,這與相互之間並不影響,而且隔離安全,在我們分析問題也能夠清楚的劃分界限。
所以,我們更希望的部署方式應該是這樣的。
所有的組成部分都已容器的形式存在,那麼我們就需要建立並啟動相關的容器即可,非常高興的是,目前我們常用的容器物件,在容器倉庫中都可以找到,包括SuperMap GIS 8C 的相關產品,如果我們涉及的服務越多,所參與的容器就越多,那麼問題來了,如果非常好的去編排、管理這些大量的容器?如果靠人工來做,豈不是非常鬱悶。
還好,Docker 提供了Docker-Compose工具來解決這個問題。
Docker Compose是一個部署多個容器的簡單但是非常必要的工具,Docker Compose在實際工作中非常有價值,相信隨著Docker Compose的完善,其必將取代docker run成為開發者啟動docker容器的首選。
1、預設安裝好的Docker環境是沒有docker-compose的,需要額外安裝
安裝方式1:下載包安裝
curl -L https://github.com/docker/compose/releases/download/1.1.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
安裝之後需要設定許可權chmod +x /usr/local/bin/docker-compose
安裝方式2:直接apt-get install即可
sudo pip install -U docker-compose
安裝完畢之後,就可以直接執行docker-compose命令了。
2、編排docker-compose.yml
由於SuperMap iCloudManager需要藉助於Zabbix-Server進行監控,相關監控資訊預設儲存在MariaDB(MySQL),所以,只需要這三種映象即可。
zabbix-db:
image: monitoringartist/zabbix-db-mariadb
ports:
- "3306:3306"
environment:
- MARIADB_USER=zabbix
- MARIADB_PASS=zabbix
zabbix-server:
image: monitoringartist/zabbix-3.0-xxl
ports:
- "80:80"
- "10051:10051"
links:
- zabbix-db:zabbix_db
environment:
- ZS_DBHost=zabbix_db
- ZS_DBUser=zabbix
- ZS_DBPassword=zabbix
icloudmanager:
image: supermap/icloudmanager:c802
environment:
- ZABBIX_URI=http://zabbix-server:80/api_jsonrpc.php
- ZABBIX_USERNAME=Admin
- ZABBIX_PASSWORD=zabbix
- PLATFORMTYPE=DOCKER
- DOCKER_SERVERIP=192.168.21.178 #修改你自己的Docker伺服器IP
- DOCKER_SERVERPORT=2375 #修改你自己的Docker埠
- DOCKER_PROTOCOL=tcp
- DOCKER_API_VERSION=1.22
ports:
- "8080:8080"
links:
- zabbix-server:zabbix-server
我們在使用Docker Compose就可以通過我們編排好的docker-compose.yml檔案來自動化的完成邏輯部署。
注意:
docker-compose的docker-compose.yml與dockerfile都需要編排指令碼,兩種區別也比較明顯。docker-compose.yml主要編排容器與容器直接的關係,dockerfile主要編排一個容器內部的關係。當然兩者的命令類似,(這是我個人的簡單理解)
在上面的yaml檔案中,我們可以看到compose檔案的基本結構。首先是定義一個服務名,下面是yaml服務中的一些選項條目:
- image:映象的ID
- build:直接從pwd的Dockerfile來build,而非通過image選項來pull
- links:連線到那些容器。每個佔一行,格式為SERVICE[:ALIAS],例如 – db[:database]
- external_links:連線到該compose.yaml檔案之外的容器中,比如是提供共享或者通用服務的容器服務。格式同links
- command:替換預設的command命令
- ports: 匯出埠。格式可以是:ports:-"3000"-"8000:8000"-"127.0.0.1:8001:8001"
- expose:匯出埠,但不對映到宿主機的埠上。它僅對links的容器開放。格式直接指定埠號即可。
- volumes:載入路徑作為卷,可以指定只讀模式:
- volumes_from:載入其他容器或者服務的所有卷
- net:容器的網路模式,可以為”bridge”, “none”, “container:[name or id]”, “host”中的一個。
- dns:可以設定一個或多個自定義的DNS地址。
- dns_search:可以設定一個或多個DNS的掃描域。
- 其他的working_dir, entrypoint, user, hostname, domainname, mem_limit, privileged, restart, stdin_open, tty, cpu_shares,和docker run命令是一樣的,這些命令都是單行的命令。例如:
注意:在linux執行注意格式問題。
關於docker埠修改,參考上一篇安裝iCM連結介紹。
3、Docker-Compose執行
預設直接執行docker-compose up即可(up命令及建立和啟動容器例項),也可以新增引數-f 輸入docker-compose.yml的路徑,如果不輸入,只要在執行命令當前路徑存放yml檔案即可。
[email protected]:~# docker-compose up -d
Pulling zabbix-db (zabbix/zabbix-db-mariadb:latest)...
latest: Pulling from zabbix/zabbix-db-mariadb
1544084fad81: Pull complete
df0fc3863fbc: Pull complete
a3d54b467fad: Pull complete
86f54d6b4779: Pull complete
cfba9b6f790a: Pull complete
1db3f9e7d065: Pull complete
bf38cfadf2fd: Pull complete
ef32faf6169c: Pull complete
b030f283076d: Pull complete
263abf799cfb: Pull complete
af166cd8baec: Pull complete
8a2ea714f6e1: Pull complete
Digest: sha256:4e306267f5e9b37efc48ae7cefcbd0befc366943b125596f2d46c8511160f02b
Status: Downloaded newer image for zabbix/zabbix-db-mariadb:latest
Pulling zabbix-server (zabbix/zabbix-3.0:3.0.0)...
3.0.0: Pulling from zabbix/zabbix-3.0
77494712c17c: Pull complete
9deb9659ce4e: Pull complete
0e737cb310ea: Pull complete
16d24c04e4af: Pull complete
1f9078a7675f: Pull complete
a93c62422c98: Pull complete
7b63781750d3: Pull complete
7250a285fc56: Pull complete
cc056fd00c94: Pull complete
6ba115307d0f: Pull complete
2d8e0b63fc5e: Pull complete
Digest: sha256:6dad46ad179209961208e9b0002932231fae1395c4c2d33776b7d4cb8796404f
Status: Downloaded newer image for zabbix/zabbix-3.0:3.0.0
Pulling icloudmanager (supermap/icloudmanager:c802)...
c802: Pulling from supermap/icloudmanager
5c710afc4104: Downloading [==> ] 3.243 MB/65.7 MB
0c1b7a0002c7: Download complete
257fb77d6206: Download complete
1348637f7ed1: Download complete
4d6732aef6e2: Download complete
4d5a6dcd3514: Download complete
984abbe5b293: Download complete
7620e89572f3: Downloading [====> ] 1.837 MB/22.59 MB
6f29d129414f: Downloading [=========> ] 416.8 kB/2.202 MB
c4274a2d3f19: Downloading [=================> ] 1.605 MB/4.489 MB
d41f9a16045f: Download complete
d27c03ab4b59: Downloading [> ] 2.697 MB/192.9 MB
7e28ec434867: Download complete
352eba0511ce: Downloading [================================> ] 5.684 MB/8.621 MB
d66f66e4bcef: Download complete
5f822d80f039: Download complete
7e8cea3fb905: Download complete
b624c51cbbab: Pull complete
3b200fe90bd8: Pull complete
Digest: sha256:22754e49ff94feeaadf8a32fbfebf1153a3c5d4499d1db9ead127e2d71d16c10
Status: Downloaded newer image for supermap/icloudmanager:c802
Creating root_zabbix-db_1
Creating root_zabbix-server_1
Creating root_icloudmanager_1
[email protected]:~#
我們可以看到已經下載好的映象
[email protected]:~# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
zabbix/zabbix-3.0 3.0.0 2d8e0b63fc5e 30 hours ago 719.8 MB
supermap/icloudmanager c802 3b200fe90bd8 4 days ago 533.6 MB
zabbix/zabbix-db-mariadb latest 8a2ea714f6e1 13 days ago 554.6 MB
ubuntu/mysql latest 62b80c65d15b 6 months ago 373.3 MB
ubuntu/os latest 39eea0e53d4e 6 months ago 653.2 MB
ubuntu 14.04 1d073211c498 7 months ago 187.9 MB
ubuntu 14.04.3 1d073211c498 7 months ago 187.9 MB
ubuntu 12.04 0ac5b09d8536 7 months ago 136.1 MB
tutum/ubuntu latest 151c4704c045 11 months ago 251.5 MB
training/sinatra latest f0f4ab557f95 2 years ago 447 MB
也可以檢視已經配置好的執行例項
[email protected]:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6c444ce91ca4 supermap/icloudmanager:c802 "/bin/sh -c /etc/iclo" 8 minutes ago Up 8 minutes 0.0.0.0:8080->8080/tcp root_icloudmanager_1
ee4b8e6cff5c zabbix/zabbix-3.0:3.0.0 "/config/bootstrap.sh" 8 minutes ago Up 8 minutes 0.0.0.0:80->80/tcp, 0.0.0.0:10051->10051/tcp, 162/udp, 10052/tcp root_zabbix-server_1
d3f65bdcb149 zabbix/zabbix-db-mariadb "/run.sh" 8 minutes ago Up 8 minutes 0.0.0.0:3306->3306/tcp root_zabbix-db_1
46ddb7c1d0d7 ubuntu:14.04 "/bin/bash" 8 weeks ago Exited (137) 4 hours ago sharp_raman
1cf6125b550f ubuntu:12.04 "/bin/bash" 8 weeks ago Exited (130) 8 weeks ago big_mirzakhani
c1ba487df40a 62b80c65d15b "/bin/sh -c mysqld" 6 months ago Exited (1) 6 months ago naughty_lovelace
5743c82b6cba 62b80c65d15b "/bin/sh -c mysqld /b" 6 months ago Exited (1) 6 months ago awesome_leakey
4、啟動iCM管理介面
問題來了,如果我們的宿主機重啟之後,所有的容器例項就關閉了,如何還能保證編排的容器能夠按照邏輯啟動呢?
1、關閉docker服務測試
[email protected]:~# service docker restart
docker stop/waiting
docker start/running, process 15141
[email protected]:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6c444ce91ca4 supermap/icloudmanager:c802 "/bin/sh -c /etc/iclo" 38 minutes ago Exited (137) 10 seconds ago root_icloudmanager_1
ee4b8e6cff5c zabbix/zabbix-3.0:3.0.0 "/config/bootstrap.sh" 38 minutes ago Exited (137) 10 seconds ago root_zabbix-server_1
d3f65bdcb149 zabbix/zabbix-db-mariadb "/run.sh" 38 minutes ago Exited (143) 18 seconds ago root_zabbix-db_1
46ddb7c1d0d7 ubuntu:14.04 "/bin/bash" 8 weeks ago Exited (137) 5 hours ago sharp_raman
1cf6125b550f ubuntu:12.04 "/bin/bash" 8 weeks ago Exited (130) 8 weeks ago big_mirzakhani
c1ba487df40a 62b80c65d15b "/bin/sh -c mysqld" 6 months ago Exited (1) 6 months ago naughty_lovelace
5743c82b6cba 62b80c65d15b "/bin/sh -c mysqld /b" 6 months ago Exited (1) 6 months ago awesome_leakey
2、使用docker-compose restart命令
[email protected]:~# docker-compose restart
Restarting root_icloudmanager_1 ... done
Restarting root_zabbix-server_1 ... done
Restarting root_zabbix-db_1 ... done
3、檢視docker執行例項
[email protected]:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6c444ce91ca4 supermap/icloudmanager:c802 "/bin/sh -c /etc/iclo" 48 minutes ago Up 15 seconds 0.0.0.0:8080->8080/tcp root_icloudmanager_1
ee4b8e6cff5c zabbix/zabbix-3.0:3.0.0 "/config/bootstrap.sh" 48 minutes ago Up 15 seconds 0.0.0.0:80->80/tcp, 0.0.0.0:10051->10051/tcp, 162/udp, 10052/tcp root_zabbix-server_1
d3f65bdcb149 zabbix/zabbix-db-mariadb "/run.sh" 48 minutes ago Up 15 seconds 0.0.0.0:3306->3306/tcp root_zabbix-db_1
46ddb7c1d0d7 ubuntu:14.04 "/bin/bash" 8 weeks ago Exited (137) 5 hours ago sharp_raman
1cf6125b550f ubuntu:12.04 "/bin/bash" 8 weeks ago Exited (130) 8 weeks ago big_mirzakhani
c1ba487df40a 62b80c65d15b "/bin/sh -c mysqld" 6 months ago Exited (1) 6 months ago naughty_lovelace
5743c82b6cba 62b80c65d15b "/bin/sh -c mysqld /b" 6 months ago Exited (1) 6 months ago awesome_leakey