docker-swarm建立本地集(ji)成開發環境
在k8s出(chu)現之(zhi)后(hou),docker-swarm使(shi)用(yong)的(de)人(ren)越來越少,但在本地集成開發環境(jing)的(de)搭建上,使(shi)用(yong)它(ta)還是比較輕(qing)量級的(de),它(ta)比docker-compose最大(da)的(de)好處就是容(rong)器之(zhi)間的(de)共享和(he)服務的(de)治理,你不需(xu)要links容(rong)器,也不知道關心(xin)失敗之(zhi)后(hou)的(de)重啟,這些都于swarm來實(shi)現。
對于docker-compose和docker-swarm的分工
- docker-compose用來進行鏡像的編排,同時將多個相關鏡像構建
- docker-swarm用來啟動和管理容器,它不能構建鏡像
建立compose文件,不支持build,links,depends_on
services:
db:
image: arungupta/couchbase:latest
ports:
- 8091:8091
- 8092:8092
- 8093:8093
- 11210:11210
swarm初始化
docker swarm init
建立服務
docker stack deploy --compose-file=docker-compose-swarm.yml lind
查看所有服務列表
docker stack ls
查看指定服務
docker stack services lind
更新某個服務
docker service update lind_service1 //有時我們的lind_service1依賴于configserver,當后者沒有重啟動,前者會一直報錯,然后使用默認的配置,由于默認配置為localhost,所以就出現了連接失敗的情況
刪除服務
docker stack rm lind
痛點
configserver是比(bi)較低(di)層(ceng)的(de)服務,所有項目的(de)配(pei)(pei)置都(dou)來自(zi)于這(zhe)個(ge)服務,我們拿(na)eureka配(pei)(pei)置為例,如(ru)果項目從(cong)配(pei)(pei)置中(zhong)心拿(na)不(bu)(bu)到(dao)它的(de)配(pei)(pei)置,會(hui)使用默(mo)認的(de)localhost:8761做為連(lian)接地址(zhi),這(zhe)在(zai)某些不(bu)(bu)是localhost:8761的(de)環境下,這(zhe)簡直就成了(le)災難。
配置中心使用本地倉庫
配置(zhi)(zhi)中心的配置(zhi)(zhi)文(wen)件一般存儲在git遠(yuan)(yuan)程(cheng),而如(ru)果太依賴遠(yuan)(yuan)程(cheng)也不(bu)是好事 ,你可以把倉庫(ku)下載到本地,然后掛(gua)載到容器目錄即可,但在進行操作時(shi)也有一些需要注意的點:
- 配置中心的目錄必須是git倉庫,默認是master分支
- 使用docker-comopse部署時,使用volumes把宿主目錄掛載到容器目錄,例如固定為config_repo,它可以在yml文件里提前聲明。
- compose文件
configserver:
image: swarm_configserver
ports:
- "6200:6200"
- "6201:6201"
environment:
SPRING_PROFILES_ACTIVE: development
PORT: 6200
BG_PORT: 6201
EUREKA_PORT: 6761
MY_IP: 192.168.170.30
volumes:
- /Users/lind.zhang/github/config_repo:/config_repo
- bootstramp.yml文件
spring:
profiles: development
cloud:
config:
server:
git:
uri: /config_repo