如何使用 docker service ls 命令列出服务

DockerDockerBeginner
立即练习

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

简介

在这个实验中,你将学习如何有效使用 docker service ls 命令来管理和检查在 Docker Swarm 中运行的服务。你将从列出 Swarm 中的所有服务开始,确保你对该命令的输出以及它所提供的信息有基本的了解。

在基本列表的基础上,你将探索强大的过滤选项。这包括按服务名称过滤,让你能够快速定位特定的服务。你还将学习如何按服务模式(例如,副本模式或全局模式)和标签进行过滤,标签是用于组织和识别服务的键值对。最后,你将了解如何格式化 docker service ls 命令的输出,以便以最适合你需求的方式显示信息,从而更轻松地解析和分析服务细节。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker(("Docker")) -.-> docker/SystemManagementGroup(["System Management"]) docker/ContainerOperationsGroup -.-> docker/ls("List Containers") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") docker/SystemManagementGroup -.-> docker/info("Display System-Wide Information") subgraph Lab Skills docker/ls -.-> lab-555227{{"如何使用 docker service ls 命令列出服务"}} docker/pull -.-> lab-555227{{"如何使用 docker service ls 命令列出服务"}} docker/info -.-> lab-555227{{"如何使用 docker service ls 命令列出服务"}} end

列出 Swarm 中的所有服务

在这一步中,你将学习如何列出在 Docker Swarm 中运行的所有服务。在列出服务之前,你需要先初始化一个 Docker Swarm 并至少运行一个服务。

首先,如果 Docker Swarm 尚未初始化,我们来对其进行初始化。你可以使用 docker info 命令检查 Swarm 的状态。如果输出中包含 "Swarm: active",则表示 Swarm 已经初始化;否则,你需要对其进行初始化。

docker info

如果 Swarm 未处于活动状态,请对其进行初始化:

docker swarm init

现在,让我们创建一个简单的服务以便进行列出操作。我们将使用 nginx 镜像创建一个名为 my-web-service 的服务。由于我们使用的是全新的环境,因此需要先拉取 nginx 镜像。

docker pull nginx

现在,创建服务:

docker service create --name my-web-service -p 80:80 nginx

此命令使用 nginx 镜像创建了一个名为 my-web-service 的服务,并将容器的 80 端口发布到主机的 80 端口。

要列出 Swarm 中的所有服务,你可以使用 docker service ls 命令。该命令会显示服务的相关信息,包括其 ID、名称、模式、副本数量以及所使用的镜像。

docker service ls

输出将显示你刚刚创建的 my-web-service。你应该能看到它的 ID、名称、模式(副本模式)、副本数量(默认情况下通常为 1)以及镜像(nginx)。

按名称过滤服务

在这一步中,你将学习如何使用带有 --filter 标志的 docker service ls 命令按服务名称过滤服务列表。当你有许多服务在运行,而你只想查看特定服务或名称相似的一组服务的信息时,这种方法非常有用。

按名称过滤的基本语法是 docker service ls --filter name=<service_name>。你可以提供服务的完整名称或名称的一部分。

在上一步中,我们创建了一个名为 my-web-service 的服务。让我们使用过滤器仅显示此服务。

docker service ls --filter name=my-web-service

输出应该只显示与 my-web-service 对应的行。

你还可以使用部分名称进行过滤。例如,如果你有名为 my-web-service-1my-web-service-2 的服务,使用 name=my-web 进行过滤将显示这两个服务。在我们当前的设置中,使用 name=my-web 进行过滤仍将显示 my-web-service

docker service ls --filter name=my-web

此命令演示了如何使用部分名称进行过滤。输出应该仍然会列出 my-web-service

按名称过滤是一种快速缩小服务列表范围的方法,无需浏览整个列表就能找到你所需的特定服务的信息。

按模式过滤服务

在这一步中,你将学习如何使用带有 --filter 标志的 docker service ls 命令,根据服务的模式来过滤服务列表。Docker Swarm 服务可以以两种模式运行:replicated(副本模式)和 global(全局模式)。

  • 副本模式(Replicated):这是默认模式。Swarm 管理器会在可用节点上调度指定数量的服务任务副本。
  • 全局模式(Global):Swarm 会在每个可用节点上为服务运行一个任务。

按模式过滤的基本语法是 docker service ls --filter mode=<mode>。你可以使用 replicatedglobal 作为模式。

在前面的步骤中,我们创建了一个名为 my-web-service 的服务,它默认以 replicated 模式运行。让我们过滤服务列表,只显示以 replicated 模式运行的服务。

docker service ls --filter mode=replicated

输出应该会显示 my-web-service,因为它是一个副本模式的服务。

现在,让我们尝试过滤出以 global 模式运行的服务。由于我们还没有创建任何全局模式的服务,这个命令应该不会显示任何服务。

docker service ls --filter mode=global

此命令的输出应该只显示标题行,没有服务条目,因为没有正在运行的全局模式服务。

当你只想查看特定类型的服务时,按模式过滤很有帮助,例如,检查所有打算在每个节点上运行的全局模式服务的状态。

按标签过滤服务

在这一步中,你将学习如何使用带有 --filter 标志的 docker service ls 命令,根据标签来过滤服务列表。标签是可以附加到 Docker 对象(包括服务)上的键值对,用于帮助组织和识别这些对象。

按标签过滤的基本语法是 docker service ls --filter label=<key>=<value>。你可以根据特定的标签键和值进行过滤,也可以仅根据标签键的存在进行过滤。

首先,让我们更新现有的 my-web-service 以添加一个标签。我们将为该服务添加一个标签 environment=development

docker service update --label-add environment=development my-web-service

此命令更新 my-web-service 并添加指定的标签。

现在,让我们过滤服务列表,只显示带有标签 environment=development 的服务。

docker service ls --filter label=environment=development

输出应该会显示 my-web-service,因为我们刚刚为它添加了这个标签。

你还可以仅根据标签键的存在进行过滤,而不考虑其值。例如,要列出所有带有 environment 标签的服务:

docker service ls --filter label=environment

此命令将列出所有带有 environment 标签的服务,无论其值是什么。在我们的例子中,它仍然会显示 my-web-service

按标签过滤是管理和查询服务的强大方法,特别是在较大的 Swarm 集群中,你可能会使用标签按环境、团队或应用程序对服务进行分类。

格式化服务列表的输出

在这一步中,你将学习如何使用 --format 标志来格式化 docker service ls 命令的输出。这使你能够自定义显示的信息以及呈现的格式,这对于编写脚本或生成报告特别有用。

--format 标志使用 Go 的 text/template 包。你可以指定想要显示的字段以及它们的格式。服务的常见字段包括 .ID.Name.Mode.Replicas.Image

让我们先只显示服务的 ID 和名称,用制表符分隔。

docker service ls --format "{{.ID}}\t{{.Name}}"

输出将显示 my-web-service 的 ID 和名称,由制表符分隔。

现在,让我们以更易读的格式显示服务名称、镜像和模式,比如像一个没有默认表头的表格。

docker service ls --format "table {{.Name}}\t{{.Image}}\t{{.Mode}}"

在格式字符串开头使用 table 告诉 Docker 将输出格式化为表格。字段之间用制表符 (\t) 分隔。

你还可以使用 JSON 格式,这对于编程处理非常有用。

docker service ls --format json

此命令将以 JSON 格式输出服务信息。

格式化输出让你在查看和使用服务信息时拥有更多灵活性。你可以选择特定的字段、更改分隔符,并以不同的格式(如表格或 JSON)输出。

总结

在本次实验中,你学习了如何使用 docker service ls 命令列出在 Docker Swarm 中运行的服务。你首先确保 Docker Swarm 已初始化,并创建了一个示例服务。然后,你使用 docker service ls 查看所有正在运行的服务,了解了包括服务 ID、名称、模式、副本数和镜像等基本输出信息。

此外,你还探索了如何使用 --filter 标志过滤服务列表。你学会了根据服务名称进行特定过滤,这对于管理大量服务并聚焦于相关信息至关重要。