简介
在这个实验中,你将学习如何在 Docker Swarm 中有效管理服务的运行实例(副本)数量。我们将从创建一个可复制的服务开始,通过多个运行副本建立一个基准。
创建服务后,你将探索如何动态调整服务的规模。这包括扩大单个服务的规模以应对增加的需求、缩小规模,甚至将副本数量缩减至零,最后,同时扩展多个服务以管理复杂的部署。通过实际操作命令,你将获得使用 docker service scale
命令的实践经验,从而为你的容器化应用实现高可用性和资源优化。
在这个实验中,你将学习如何在 Docker Swarm 中有效管理服务的运行实例(副本)数量。我们将从创建一个可复制的服务开始,通过多个运行副本建立一个基准。
创建服务后,你将探索如何动态调整服务的规模。这包括扩大单个服务的规模以应对增加的需求、缩小规模,甚至将副本数量缩减至零,最后,同时扩展多个服务以管理复杂的部署。通过实际操作命令,你将获得使用 docker service scale
命令的实践经验,从而为你的容器化应用实现高可用性和资源优化。
在这一步中,你将学习如何使用 Docker 创建一个可复制的服务。可复制的服务意味着你的服务有多个相同的副本(replicas)同时运行。这提供了高可用性,并使你能够处理更多的流量。
首先,让我们拉取必要的 Docker 镜像。在这个例子中,我们将使用 alpine
镜像。
docker pull alpine
你应该会看到表明镜像正在被拉取和下载的输出。
现在,让我们创建一个名为 my-alpine-service
的可复制服务,该服务有 3 个副本。我们将使用 alpine
镜像,并执行 ping localhost
命令。这个命令将在每个容器内运行,并持续对本地主机进行 ping 操作。
docker service create --name my-alpine-service --replicas 3 alpine ping localhost
运行此命令后,Docker Swarm 将创建该服务并启动指定数量的副本。你应该会看到确认服务创建的输出。
要验证服务是否已创建且副本正在运行,你可以列出所有服务。
docker service ls
你应该会看到 my-alpine-service
被列出,并且有 3 个副本。
你还可以检查服务以获取更多详细信息。
docker service inspect my-alpine-service
这个命令将输出一个大型的 JSON 对象,其中包含有关该服务的详细信息,包括副本的数量。
最后,让我们检查与该服务关联的任务,以查看正在运行的各个容器。
docker service ps my-alpine-service
这个命令将显示服务的每个副本(任务)的状态。你应该会看到列出的 3 个任务,每个任务都处于运行状态。
在这一步中,你将学习如何扩大单个服务的规模。扩大规模意味着增加服务的副本数量。当你需要处理增加的负载或流量时,这非常有用。
在上一步中,我们创建了一个名为 my-alpine-service
的服务,该服务有 3 个副本。现在,让我们将这个服务的规模扩大到 5 个副本。我们可以使用 docker service scale
命令来实现这一点。
docker service scale my-alpine-service=5
运行此命令后,Docker Swarm 将为该服务添加 2 个新的副本。你应该会看到表明服务正在更新的输出。
要验证服务是否已成功扩大规模,你可以再次列出所有服务。
docker service ls
现在你应该会看到 my-alpine-service
被列出,并且有 5 个副本。
你还可以检查与该服务关联的任务,以查看新创建的容器。
docker service ps my-alpine-service
这个命令将显示服务的所有 5 个副本(任务)的状态。你应该会看到列出的 5 个任务,其中新的任务正在过渡到运行状态。
在这一步中,你将学习如何把单个服务的副本数量缩容至零。缩容至零意味着停止服务的所有实例。在不删除服务配置的情况下临时关闭服务时,这种操作很有用。
在上一步中,我们将 my-alpine-service
服务的副本数量扩展到了 5 个。现在,让我们把这个服务的副本数量缩容至 0 个。我们将再次使用 docker service scale
命令。
docker service scale my-alpine-service=0
运行此命令后,Docker Swarm 会停止并移除该服务所有正在运行的副本。你会看到显示服务正在更新的输出信息。
要验证服务是否已缩容至零副本,你可以列出所有服务。
docker service ls
此时,你应该会看到 my-alpine-service
服务的副本数量显示为 0。
你还可以查看与该服务关联的任务。
docker service ps my-alpine-service
这个命令会显示任务的状态。由于我们已将副本数量缩容至零,所以列表中不应有正在运行的任务。你可能会看到处于“Shutdown”(关闭)状态的任务,这表明它们已被停止。
在这一步中,你将学习如何同时扩展多个服务。当你有多个需要一起扩展的服务时,例如一个应用程序的不同组件,这种方法就很有用。
首先,让我们创建另一个服务。我们将使用 nginx
镜像创建一个名为 my-nginx-service
的服务,初始副本数为 1。你需要先拉取 nginx
镜像。
docker pull nginx
你会看到显示正在拉取 nginx
镜像的输出信息。
现在,创建 my-nginx-service
服务。
docker service create --name my-nginx-service --replicas 1 nginx
你会看到确认 my-nginx-service
服务创建成功的输出信息。
现在我们有两个服务:my-alpine-service
(当前副本数为 0)和 my-nginx-service
(副本数为 1)。让我们同时扩展这两个服务。我们将把 my-alpine-service
的副本数扩展到 2,把 my-nginx-service
的副本数扩展到 3。
docker service scale my-alpine-service=2 my-nginx-service=3
运行此命令后,Docker Swarm 会根据指定的副本数更新这两个服务。你会看到显示两个服务都正在更新的输出信息。
要验证这两个服务是否已成功扩展,你可以列出所有服务。
docker service ls
此时,你应该会看到 my-alpine-service
的副本数为 2,my-nginx-service
的副本数为 3。
你还可以分别查看每个服务的任务,以了解正在运行的容器情况。
docker service ps my-alpine-service
这将显示 my-alpine-service
的 2 个正在运行的任务。
docker service ps my-nginx-service
这将显示 my-nginx-service
的 3 个正在运行的任务。
最后,让我们清理我们创建的服务。我们可以使用 docker service rm
命令删除这两个服务。
docker service rm my-alpine-service my-nginx-service
你会看到确认两个服务已被删除的输出信息。
要验证服务是否已被删除,再次列出所有服务。
docker service ls
此时应该没有服务被列出。
在本次实验中,你学习了如何管理 Docker 服务的扩展。首先,你创建了一个具有指定副本数的复制服务,展示了如何初始部署一个具备容错能力的应用程序。接着,你探索了如何动态调整单个服务的运行实例数量,先是进行扩容以应对增加的需求,随后进行缩容,甚至将副本数降至零以有效停止服务。
最后,你学习了如何同时扩展多个服务,展示了如何通过一条命令在 Docker Swarm 环境中管理多个应用程序的资源分配。这些步骤让你获得了使用 docker service scale
命令有效管理服务生命周期和资源利用率的实践经验。