在k8s出現之后,docker-swarm使用的人越來越少,但在本地集成開發環境的搭建上,使用它還是比較輕量級的,它比docker-compose最大的好處就是容器之間的共享和服務的治理,你不需要links容器,也不知道關心失敗之后的重啟,這些都於swarm來實現。
對於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是比較低層的服務,所有項目的配置都來自於這個服務,我們拿eureka配置為例,如果項目從配置中心拿不到它的配置,會使用默認的localhost:8761做為連接地址,這在某些不是localhost:8761的環境下,這簡直就成了災難。
配置中心使用本地倉庫
配置中心的配置文件一般存儲在git遠程,而如果太依賴遠程也不是好事 ,你可以把倉庫下載到本地,然后掛載到容器目錄即可,但在進行操作時也有一些需要注意的點:
- 配置中心的目錄必須是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