docker swarm
docker swarm
是docker
官方編排Orchestration
項目之一
Swarm: a Docker-native clustering system
- 在使用
Swarm
管理docker
集群時该酗,會有一個swarm manager
以及若干的swarm node
多矮,swarm manager
上運行swarm daemon
留瞳,用戶只需要跟swarm manager
通信窒典,然后swarm manager
再根據(jù)discovery service
的信息選擇一個swarm node
來運行container
-
swarm daemon
只是一個任務調(diào)度器(scheduler
)和路由器(router
)轩褐,它本身不運行容器仑鸥,它只接受Docker client
發(fā)送過來的請求,調(diào)度合適的swarm node
來運行container
install docker swarm
docker pull swarm
docker run --rm swarm -v
修改默認配置項, 重啟 docker
a. docker -H 0.0.0.0:2375 &
或者
b. vim /etc/default/docker
DOCKER_OPTS="-H 0.0.0.0:2375 -H unix:///var/run/docker.sock"
service docker restart
docker swarm 使用DockerHub提供的服務發(fā)現(xiàn)功能
docker run --rm swarm create
# join cluster, token_id=$(docker run --rm swarm create)
docker run -d swarm join --addr=ip_address:2375 token://token_id
# create swarm manage
docker run -d -p 2376:2375 swarm manage token://token_id
# 查詢集群狀態(tài)议惰,任意節(jié)點
docker run --rm swarm list token://token_id
docker -H 192.168.1.83:2376 info
docker swarm 使用文件提供的服務發(fā)現(xiàn)功能
# 需要加入集群的節(jié)點寫入cluster文件中
echo 192.168.1.83:2375 >> cluster
echo 192.168.1.84:2375 >> cluster
echo 192.168.1.124:2375 >> cluster
# 在docker swarm manage節(jié)點上執(zhí)行
docker run -d \
-p 2376:2375 \
-v $(pwd)/cluster:/opt/cluster \
swarm manage file:///opt/cluster
docker swarm 調(diào)度策略
spread
、binpack
言询、random
-
spread
:swarm
會選擇一個正在運行的container
的數(shù)量最少的那個節(jié)點來運行container
-
binpack
:swarm
會盡可能的把所有的容器放在一臺節(jié)點上面運行 -
random
:swarm
會隨機選擇一臺節(jié)點運行container
docker run -d \
-p 2376:2375 \
-v $(pwd)/cluster:/opt/cluster \
swarm manage --strategy=spread file:///opt/cluster
docker -H 192.168.1.83:2376 run \
--name node-1 -d -P redis
docker -H 192.168.1.83:2376 run \
--name node-2 -d -P redis
docker -H 192.168.1.83:2376 run \
--name node-3 -d -P redis
docker -H 192.168.1.83:2376 ps # 容器分布在不同節(jié)點
docker run -d \
-p 2376:2375 -v $(pwd)/cluster:/opt/cluster \
swarm manage --strategy=binpack file:///opt/cluster
docker -H 192.168.1.83:2376 run \
--name node-1 -d -P redis
docker -H 192.168.1.83:2376 run \
--name node-2 -d -P redis
docker -H 192.168.1.83:2376 run \
--name node-3 -d -P redis
docker -H 192.168.1.83:2376 ps # 容器在同一節(jié)點
docker swarm過濾器
swarm
的調(diào)度器在選擇節(jié)點運行容器的時候支持幾種過濾器filter
Constraint
俯萎,Affinity
运杭,Port
夫啊,Dependency
辆憔,Health
# Constraint Filter
DOCKER_OPTS="-H 0.0.0.0:2375 \
-H unix:///var/run/docker.sock --label label_name=083"
# 在指定節(jié)點上啟動容器
docker -H 192.168.1.83:2376 run \
--name redis \
-d -e constraint:label_name==084 redis
# Affinity Filter撇眯,可以讓一個容器緊挨著另一個容器啟動
# 也就是說讓兩個容器在同一個節(jié)點上面啟動
docker -H 192.168.1.83:2376 run -d \
--name redis redis
docker -H 192.168.1.83:2376 run -d \
--name redis_backup -e affinity:container==redis redis
docker -H 192.168.1.83:2376 run -d \
--name redis -e affinity:image==redis redis
# Port Filter也會被認為是一個唯一的資源
docker -H 192.168.1.83:2376 run \
-d -p 80:80 nginx