1. 简介
Docker Swarm 是Docker的集群管理工具,简单方便、易于上手。
Swarm集群由以下两个组件构成:
- Mananger:负责整个集群的管理工作包括集群配置、服务管理等所有跟集群有关的工作
- Worker:主要负责运行相应的服务来执行任务(task)
2. 部署
准备两台server,分别是:192.168.44.141(Manager)、192.168.44.140(Worker)。
- 初始化Manager
# docker swarm init --advertise-addr 192.168.44.141
Swarm initialized: current node (zm7q1dewfj6tqo4way3f497ky) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-0671cw61lnf0xuf8gftx7pnapirf8pk20dv9rr3k9fo7kuti76-8micra51k1rolbjcx47i2vd4v 192.168.44.141:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
- 加入Worker
# docker swarm join --token SWMTKN-1-0671cw61lnf0xuf8gftx7pnapirf8pk20dv9rr3k9fo7kuti76-8micra51k1rolbjcx47i2vd4v 192.168.44.141:2377
This node joined a swarm as a worker.
3. 管理
可以利用docker node
实现对swarm节点的管理
- 查看帮助
# docker node --help
Usage: docker node COMMAND
Manage Swarm nodes
Commands:
demote Demote one or more nodes from manager in the swarm
inspect Display detailed information on one or more nodes
ls List nodes in the swarm
promote Promote one or more nodes to manager in the swarm
ps List tasks running on one or more nodes, defaults to current node
rm Remove one or more nodes from the swarm
update Update a node
- Manager上查看node信息
# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
zm7q1dewfj6tqo4way3f497ky * master Ready Active Leader 19.03.12
eg2en2llac0g4cd17xqoweufz node1 Ready Active 18.06.3-ce
4. 服务
可以利用docker service
实现对swarm服务的管理
- 查看帮助
# docker service --help
Usage: docker service COMMAND
Manage services
Commands:
create Create a new service
inspect Display detailed information on one or more services
logs Fetch the logs of a service or task
ls List services
ps List the tasks of one or more services
rm Remove one or more services
rollback Revert changes to a service's configuration
scale Scale one or multiple replicated services
update Update a service
- 创建服务
# docker service create --replicas 1 -p80:80 --name=myngx nginx
n3q3hjn69isu2b0cp6lrmmp58
overall progress: 1 out of 1 tasks
1/1: running [==================================================>]
verify: Service converged
- 列出服务
# docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
n3q3hjn69isu myngx replicated 1/1 nginx:latest *:80->80/tcp
- 删除服务
docker service rm myngx
5. 编排
可以利用docker stack
将应用部署到swarm集群上
- 查看帮助
# docker stack --help
Usage: docker stack [OPTIONS] COMMAND
Manage Docker stacks
Options:
--orchestrator string Orchestrator to use (swarm|kubernetes|all)
Commands:
deploy Deploy a new stack or update an existing stack
ls List stacks
ps List the tasks in the stack
rm Remove one or more stacks
services List the services in the stack
- docker-compose.yml示例
# cat docker-compose.yml
version: '3'
services:
redis:
image: "redis:alpine"
- 部署
# docker stack deploy -c docker-compose.yml redis
Creating network redis_default
Creating service redis_redis
- 查看
# docker stack ls
NAME SERVICES ORCHESTRATOR
redis 1 Swarm
# docker stack ps redis
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
s6oqyfb0tgf4 redis_redis.1 redis:alpine node1 Running Running less than a second ago
# docker stack services redis
ID NAME MODE REPLICAS IMAGE PORTS
5x3zx5lkf20u redis_redis replicated 1/1 redis:alpine
- 删除
# docker stack rm redis
Removing service redis_redis
Removing network redis_default