简介
在这个实验中,你将学习如何在 Docker Swarm 环境中有效管理服务更新。我们将从创建一个 Docker Swarm 服务开始,该服务是部署和扩展容器化应用程序的基础。
创建服务后,你将对服务配置进行更新,模拟典型的部署场景。本实验的核心重点是演示如何使用 docker service rollback
命令将服务恢复到之前的稳定版本。最后,你将在回滚后验证服务的配置,以确认恢复成功。
在这个实验中,你将学习如何在 Docker Swarm 环境中有效管理服务更新。我们将从创建一个 Docker Swarm 服务开始,该服务是部署和扩展容器化应用程序的基础。
创建服务后,你将对服务配置进行更新,模拟典型的部署场景。本实验的核心重点是演示如何使用 docker service rollback
命令将服务恢复到之前的稳定版本。最后,你将在回滚后验证服务的配置,以确认恢复成功。
在这一步中,我们将学习如何创建一个 Docker Swarm 服务。Docker Swarm 服务是一组运行在 Swarm 集群上的任务。每个任务都是一个容器实例。服务是 Docker Swarm 的核心概念,它允许你定义应该运行多少个容器镜像副本以及如何更新它们。
在创建服务之前,我们需要初始化一个 Docker Swarm。由于我们在单个虚拟机上运行,因此将初始化一个单节点 Swarm。
首先,让我们初始化 Swarm:
docker swarm init --advertise-addr 127.0.0.1
你应该会看到输出信息,表明 Swarm 已初始化,并且当前节点现在是一个管理器。
现在,让我们使用 nginx
镜像创建一个服务。我们将该服务命名为 my-nginx
,并指定要运行 3 个 nginx
容器副本。
首先,拉取 nginx
镜像以确保它在本地可用:
docker pull nginx:latest
现在,创建服务:
docker service create --name my-nginx --replicas 3 nginx:latest
此命令使用 nginx:latest
镜像创建一个名为 my-nginx
的新服务,包含 3 个副本。Docker Swarm 将自动在 Swarm 中的节点间分布这些副本(在这种情况下,只有我们的单个节点)。
要验证服务是否已创建且副本正在运行,你可以列出服务:
docker service ls
你应该会看到 my-nginx
被列出,且有 3/3 个副本正在运行。
你还可以检查与该服务关联的任务:
docker service ps my-nginx
此命令将显示组成 my-nginx
服务的各个任务(容器)、它们的当前状态以及运行它们的节点。你应该会看到 3 个任务处于 Running
状态。
在这一步中,我们将更新 my-nginx
服务,使其使用 nginx
镜像的不同版本。这展示了如何在 Docker Swarm 中对服务进行滚动更新。
首先,让我们拉取 nginx:1.21
镜像。这是我们要将服务更新到的特定版本的 Nginx。
docker pull nginx:1.21
现在,我们将更新 my-nginx
服务,使其使用 nginx:1.21
镜像。我们还将把副本数量更改为 5。
docker service update --image nginx:1.21 --replicas 5 my-nginx
此命令告知 Docker Swarm 更新 my-nginx
服务。--image nginx:1.21
标志指定要使用的新镜像,--replicas 5
标志将所需的副本数量更改为 5。Docker Swarm 将执行滚动更新,用运行指定镜像的新容器替换旧容器,并调整副本数量。
你可以通过列出服务任务来监控更新进度:
docker service ps my-nginx
你将看到使用 nginx:1.21
镜像的新任务正在创建,而旧任务正在关闭。最终,你应该会看到 5 个任务处于 Running
状态,所有任务都使用 nginx:1.21
镜像。
你还可以检查服务详细信息以确认更新:
docker service inspect my-nginx --pretty
查看输出中的 Image
和 Replicas
字段,以确认它们分别已更新为 nginx:1.21
和 5。
在这一步中,我们将把 my-nginx
服务回滚到它之前的配置。Docker Swarm 会记录之前的服务配置,这样如果更新引入了问题,你可以轻松恢复到已知的正常状态。
要回滚服务,我们使用带有 --rollback
标志的 docker service update
命令。
docker service update --rollback my-nginx
这个命令指示 Docker Swarm 将 my-nginx
服务回滚到上一次更新之前的配置。在我们的例子中,这意味着恢复到 nginx:latest
镜像和原来的副本数量(即 3 个)。
你可以通过列出服务任务来监控回滚过程:
docker service ps my-nginx
你会看到运行 nginx:1.21
镜像的任务被关闭,而运行 nginx:latest
镜像的新任务被创建。任务数量也会调整回之前的副本数量。
回滚完成后,你应该会看到运行 nginx:latest
镜像的任务,并且副本数量应该回到 3 个。
你还可以检查服务详细信息来确认回滚操作:
docker service inspect my-nginx --pretty
查看输出中的 Image
和 Replicas
字段。它们现在应该反映出上一次更新之前的配置。
在这一步中,我们将明确验证 my-nginx
服务是否已成功回滚到其之前的配置。这包括检查服务所使用的镜像以及副本数量。
首先,让我们列出服务以查看当前状态:
docker service ls
你应该会看到 my-nginx
被列出,并且 REPLICAS
列应显示 3/3
。这表明期望的副本数为 3,且当前有 3 个副本正在运行。
接下来,让我们检查服务详细信息以确认镜像和副本数量。
docker service inspect my-nginx --pretty
在输出中,查找 Image
字段。它现在应该是 nginx:latest
。此外,查找 Replicas
字段,它应该是 3
。
最后,让我们查看与该服务关联的任务,以确认正在运行的容器使用的是正确的镜像。
docker service ps my-nginx
你应该会看到列出了 3 个任务,并且每个任务的 IMAGE
列应该是 nginx:latest
。所有任务的 CURRENT STATE
应该是 Running
。
通过执行这些检查,我们可以确信回滚操作已成功,并且服务正在以期望的先前状态运行。
在本次实验中,我们学习了如何管理 Docker Swarm 服务,特别关注了服务的创建和更新。我们首先初始化了一个单节点的 Docker Swarm,然后使用 nginx:latest
镜像创建了一个名为 my-nginx
的服务,该服务有三个副本。我们使用 docker service ls
和 docker service ps
验证了服务的创建和正在运行的任务。
在创建服务之后,我们探索了如何更新服务配置。这包括更改服务所使用的镜像,展示了在 Swarm 环境中进行服务更新的常见场景。