什么是Docker Swarm
Docker Swarm 是 Docker 的内置编排工具,它允许将多个 Docker 主机组成一个集群,并以统一的方式管理和部署容器化应用程序。Swarm 提供了高可用性、伸缩性和容错能力,使得应用程序能够在集群中弹性地运行和扩展。
Docker Swarm的优点
- 内置支持:Docker Swarm 是 Docker 官方提供的解决方案,与 Docker 引擎紧密集成,无需额外安装和配置。
- 简单易用:Swarm 的命令和操作与 Docker 引擎类似,易于理解和学习。它提供了简化的命令和配置选项,使得容器编排变得简单。
- 可扩展性:Swarm 可以轻松扩展到数百甚至数千个节点,支持大规模容器部署和管理。
- 高可用性:Swarm 提供容错和故障恢复机制,确保在节点故障或服务异常时,应用程序能够继续运行。
- 安全性:Swarm 支持安全传输和身份验证,保护集群和容器的安全。
- 与 Docker 生态系统集成:Swarm 可与其他 Docker 工具和服务集成,如 Docker Compose、Docker Registry 等,提供完整的容器化解决方案。
概念
节点
swarm 集群由管理节点(manager)和工作节点(work node)构成。
- manager:负责整个集群的管理工作,包括集群配置、服务管理等所有跟集群有关的工作。
- work node:主要负责运行从管理节点分派的任务,管理节点也默认作为工作节点。
服务和任务
任务(Task)是Swarm中的最小调度单位。服务(Services)是指一组任务的集合,服务定义了任务的属性。服务有两种模式:
- replicaetd services:按照一定规则在各个工作节点上运行指定个数的任务。
- global services:每个工作节点上运行一个任务
初始化 swarm 集群
在一个管理节点执行初始化命令:
$ 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