如何使用 docker service scale 命令扩展服务

DockerDockerBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在这个实验中,你将学习如何在 Docker Swarm 中有效管理服务的运行实例(副本)数量。我们将从创建一个可复制的服务开始,通过多个运行副本建立一个基准。

创建服务后,你将探索如何动态调整服务的规模。这包括扩大单个服务的规模以应对增加的需求、缩小规模,甚至将副本数量缩减至零,最后,同时扩展多个服务以管理复杂的部署。通过实际操作命令,你将获得使用 docker service scale 命令的实践经验,从而为你的容器化应用实现高可用性和资源优化。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker/ContainerOperationsGroup -.-> docker/ls("List Containers") docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/rm("Remove Container") docker/ContainerOperationsGroup -.-> docker/inspect("Inspect Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") subgraph Lab Skills docker/ls -.-> lab-555231{{"如何使用 docker service scale 命令扩展服务"}} docker/ps -.-> lab-555231{{"如何使用 docker service scale 命令扩展服务"}} docker/rm -.-> lab-555231{{"如何使用 docker service scale 命令扩展服务"}} docker/inspect -.-> lab-555231{{"如何使用 docker service scale 命令扩展服务"}} docker/pull -.-> lab-555231{{"如何使用 docker service scale 命令扩展服务"}} end

创建可复制的服务

在这一步中,你将学习如何使用 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 命令有效管理服务生命周期和资源利用率的实践经验。