8.2 服务管理与动态伸缩

在 Docker Swarm 集群中,“服务 (Service)” 是我们部署和管理应用的核心概念。你可以把服务看作是运行在集群中的一组容器的定义。Swarm 会确保指定数量的服务实例(称为“任务”或“副本”)始终在运行,并且可以轻松地对服务进行伸缩和更新。
这篇实验手册将引导你学习如何在 Swarm 集群中部署、管理和更新服务。

任务一:部署与伸缩服务

1. 创建第一个服务
让我们部署一个简单的示例容器服务,它会通过 Web 服务展示主机名、学号等信息。
s00 的 00 部分替换为你的学号后两位,例如 s25。docker service create --replicas 2 --name s[学号后两位] -p [8000+学号]:80 -e STUDENT_ID=[学号] harbor.seahi.me/stu/whoami-for-swarm
docker service create: 创建新服务的命令--replicas 2: 指定服务需要运行 2 个实例(副本)--name s00: 为服务指定一个名称harbor.seahi.me/stu/whoami-for-swarm: 使用的 Docker 镜像

s00 服务为例2. 查看服务列表
部署服务后,我们可以查看当前 Swarm 集群中所有服务的列表。
docker service ls
你会看到类似下面的输出,其中包含了服务的 ID、名称、模式(默认为 replicated)、副本数(REPLICAS)、镜像和端口等信息。

3. 查看服务中的任务
一个服务由一个或多个“任务 (Task)”组成,每个任务就是一个运行中的容器实例。
docker service ps s00
这个命令会列出名为 s00 的服务包含的所有任务,以及它们的状态(例如 Running)、所在的节点等。

4. 访问该服务
通过集群中的任一IP地点+端口号进行访问,多刷新几次查看效果:

5. 伸缩服务
Swarm 的一大优势就是可以轻松地对服务进行扩容或缩容。现在,我们将 s00 服务的副本数量增加到 3 个。
docker service scale s00=3
Swarm 会自动在集群中调度并启动新的任务,直到达到指定的副本数量。

6. 验证服务伸缩
再次查看服务列表和任务列表,确认服务的副本数和任务状态。
docker service ps s00

你会发现 s00 服务现在有 3 个正在运行的任务了。
7. 查看任务在不同节点的分布
Swarm 会将服务的任务(容器)分布到集群中的不同节点上以实现负载均衡和高可用。你可以在不同的节点(包括管理节点和工作节点)上执行 docker ps 来查看本地正在运行的容器。
在某个节点上执行:
docker ps
你会看到该节点上可能运行着 s00 服务的一个或多个任务实例。



任务二:删除服务
如果不再需要某个服务,可以将其从 Swarm 集群中删除。
docker service rm s00
删除服务后,Swarm 会停止并移除与该服务相关的所有任务(容器)。
验证:
在管理节点上执行 docker service ls,确认 s00 服务已不存在。

在各个节点上执行 docker ps,确认之前运行的 s00 服务的容器也已经被清除了。

今日命令总结





