Docker Swarm 是 Docker 的内置编排工具,它允许将多个 Docker 主机组成一个集群,并以统一的方式管理和部署容器化应用程序。Swarm 提供了高可用性、伸缩性和容错能力,使得应用程序能够在集群中弹性地运行和扩展。
swarm 集群由管理节点(manager)和工作节点(work node)构成。
任务(Task)是Swarm中的最小调度单位。服务(Services)是指一组任务的集合,服务定义了任务的属性。服务有两种模式:
在一个管理节点执行初始化命令:
$ docker swarm init --advertise-addr 192.168.99.107
Swarm initialized: current node (dlkndguzu1qburlzblvmym828) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-4oogo9qziq768dma0uh3j0z0m5twlm10iynvz7ixza96k6jh9p-ajkb6w7qd06y1e33yrgko64sk 192.168.99.107:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
在工作节点执行join命令加入集群(命令复制于初始化命令的输出内容):
$ docker swarm join --token SWMTKN-1-4oogo9qziq768dma0uh3j0z0m5twlm10iynvz7ixza96k6jh9p-ajkb6w7qd06y1e33yrgko64sk 192.168.99.107:2377
This node joined a swarm as a worker.
docker swarm常用命令:
命令 说明
docker swarm init 初始化集群
docker swarm join-token worker 查看工作节点的 token
docker swarm join-token manager 查看管理节点的 token
docker swarm join 加入集群
docker swarm leave 离开集群
$ docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
1bcef6utixb0l0ca7gxuivsj0 worker2 Ready Active
38ciaotwjuritcdtn9npbnkuz worker1 Ready Active
e216jshn25ckzbvmwlnh5jr3g * manager1 Ready Active Leader
下线一个节点(节点不再参与任务分配):
docker node update --availability drain worker1
上线一个节点:
docker node update --availability active worker1
docker node常用命令:
命令 说明
docker node ls 查看集群中的所有节点
docker node ps 查看一个或多个节点中的 Task 任务(默认查看当前节点)
docker node inspect 查看一个或多个节点的详细信息
docker node promote 节点升级,由工作节点升级为管理节点
docker node demote 节点降级,由管理节点降级为工作节点
docker node update 更新一个节点
docker node rm 删除一个或多个节点(-f强制删除)
# 使用replicas参数来指定副本数
docker service create --name redis --replicas=2 redis:3.0.6
查看服务列表:
$ docker service ls
ID NAME MODE REPLICAS IMAGE
dmu1ept4cxcf redis replicated 2/2 redis:3.0.6
查看指定服务的任务列表:
$ docker service ps redis
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
0qihejybwf1x redis.1 redis:3.0.6 manager1 Running Running 8 seconds
bk658fpbex0d redis.2 redis:3.0.6 worker2 Running Running 9 seconds
查看指定服务的详细信息:
$ docker service inspect --pretty redis
ID: dmu1ept4cxcfe8k8lhtux3ro3
Name: redis
Labels:
Service Mode: REPLICATED
Replicas: 2
Placement:
UpdateConfig:
Parallelism: 0
On failure: pause
Max failure ratio: 0
ContainerSpec:
Image: redis:3.0.6
Resources:
Networks: net1
Endpoint Mode: vip
Ports:
PublishedPort = 4443
Protocol = tcp
TargetPort = 443
PublishMode = ingress
查看日志:
docker service logs -f --tail=n redis
服务扩容与缩容:
docker service scale redis=3
滚动升级服务:
# 创建时使用--update-deplay参数类设置每个task之间的更新延迟
docker service create --name redis --replicas 3 --update-delay 10s redis:3.0.6
# 升级redis服务的镜像版本
docker service update --image redis:3.0.7 redis
删除服务:
docker service rm redis
docker service常用命令:
命令 说明
docker service create 部署服务
docker service ls 查看服务列表
docker service ps 列出一个或多个服务的任务列表
docker service inspect 查看一个或多个服务的详细信息
docker service logs 查看一个服务或任务的日志
docker service scale 设置服务的任务数量
docker service update 更新一个服务
docker service rollback 回滚一个服务到以前的版本
docker service rm 删除一个或多个服务(-f强制删除)
Use the Docker command line | Docker Docs