如何使用 docker volume ls 命令列出和过滤卷

DockerDockerBeginner
立即练习

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

简介

在这个实验中,你将学习如何有效地使用 docker volume ls 命令来管理你的 Docker 卷。我们将从创建示例卷开始。然后,你将了解如何列出系统上所有现有的卷。

在掌握列出卷的基础上,你将探索如何根据名称、驱动程序等条件,以及卷是否为悬空(dangling)状态来过滤卷。最后,你将学习如何格式化 docker volume ls 命令的输出,以提高可读性并提取特定信息。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/VolumeOperationsGroup(["Volume Operations"]) docker/ContainerOperationsGroup -.-> docker/ls("List Containers") docker/ContainerOperationsGroup -.-> docker/rm("Remove Container") docker/ContainerOperationsGroup -.-> docker/create("Create Container") docker/VolumeOperationsGroup -.-> docker/volume("Manage Volumes") subgraph Lab Skills docker/ls -.-> lab-555260{{"如何使用 docker volume ls 命令列出和过滤卷"}} docker/rm -.-> lab-555260{{"如何使用 docker volume ls 命令列出和过滤卷"}} docker/create -.-> lab-555260{{"如何使用 docker volume ls 命令列出和过滤卷"}} docker/volume -.-> lab-555260{{"如何使用 docker volume ls 命令列出和过滤卷"}} end

创建示例卷

在这一步中,你将学习如何创建 Docker 卷。卷是持久化存储 Docker 容器生成和使用的数据的首选方式。与绑定挂载(bind mounts)依赖于主机的目录结构不同,卷完全由 Docker 管理。

要创建一个卷,你可以使用 docker volume create 命令。让我们创建一个名为 myvolume 的简单卷。

docker volume create myvolume

如果创建成功,你应该会在控制台看到卷的名称。

现在,让我们再创建一个名为 another_volume 的卷。

docker volume create another_volume

现在,你已经创建了两个卷,Docker 容器可以使用它们来存储持久化数据。

列出所有卷

在这一步中,你将学习如何列出系统上所有的 Docker 卷。这有助于你了解可用的卷并对其进行管理。

要列出所有卷,你可以使用 docker volume ls 命令。该命令会显示所有卷的列表,包括它们的驱动程序和名称。

docker volume ls

你应该会在输出中看到上一步创建的卷(myvolumeanother_volume),以及系统上可能存在的其他卷。输出通常会包含 DRIVER(驱动程序)和 VOLUME NAME(卷名称)。

卷的默认驱动程序通常是 local,这意味着卷存储在运行 Docker 的本地机器上。

按名称和驱动程序过滤卷

在这一步中,你将学习如何根据 Docker 卷的名称和驱动程序来过滤卷列表。当你有很多卷并想找到特定的卷时,这会很有帮助。

你可以在 docker volume ls 命令中使用 --filter 标志来过滤输出。过滤器采用键值对的形式。

要按名称过滤,你可以使用 name 键。让我们过滤出名为 myvolume 的卷。

docker volume ls --filter name=myvolume

你应该只会在输出中看到 myvolume

现在,让我们按驱动程序过滤。由于我们在创建卷时使用了默认驱动程序,所以驱动程序是 local。让我们过滤出使用 local 驱动程序的卷。

docker volume ls --filter driver=local

这个命令应该会列出所有使用 local 驱动程序的卷,其中应该包括 myvolumeanother_volume

你还可以组合使用过滤器。例如,要过滤出名为 myvolume 且使用 local 驱动程序的卷,你可以使用:

docker volume ls --filter name=myvolume --filter driver=local

这将再次只显示 myvolume

按未使用状态过滤卷

在这一步中,你将学习如何根据 Docker 卷的“未使用(dangling)”状态来过滤卷。未使用的卷是指当前未挂载到任何容器的卷。这些卷会不必要地占用磁盘空间。

要过滤出未使用的卷,你可以使用 --filter dangling=true 标志。

首先,让我们创建一个容器并将其中一个卷挂载到该容器上。我们将使用 ubuntu 镜像。如果你本地没有 ubuntu 镜像,Docker 会自动拉取它。

docker run -d --name mycontainer -v myvolume:/app ubuntu sleep 3600

这个命令以分离模式(-d)运行一个名为 mycontainer 的容器,将 myvolume 挂载到容器内的 /app 目录(-v myvolume:/app),使用 ubuntu 镜像,并让容器运行一个小时(sleep 3600)。

现在,让我们再次列出所有卷:

docker volume ls

你会看到 myvolumeanother_volumemyvolume 当前正在被 mycontainer 使用。another_volume 没有挂载到任何容器,因此它是一个未使用的卷。

现在,让我们过滤出未使用的卷:

docker volume ls --filter dangling=true

你应该会在输出中看到 another_volume,因为它没有挂载到任何正在运行的容器上。

要查看非未使用的卷(即已挂载到容器的卷),你可以使用 --filter dangling=false

docker volume ls --filter dangling=false

这应该会显示 myvolume

最后,让我们停止并移除我们创建的容器。

docker stop mycontainer
docker rm mycontainer

现在,如果你再次列出未使用的卷:

docker volume ls --filter dangling=true

myvolumeanother_volume 现在都应该显示为未使用的卷,因为 myvolume 不再挂载到任何容器上。

格式化卷输出

在这一步中,你将学习如何格式化 docker volume ls 命令的输出。这能让你自定义显示的信息,并以最符合自身需求的方式呈现。

你可以使用 --format 标志来指定输出格式。该标志接受 Go 模板语法。

让我们列出卷并只显示卷名。你可以使用 {{.Name}} 模板来实现这一点。

docker volume ls --format "{{.Name}}"

这个命令将输出一个卷名列表,每行一个。

现在,让我们同时显示驱动程序和名称,并用冒号分隔。你可以使用 {{.Driver}}:{{.Name}}

docker volume ls --format "{{.Driver}}:{{.Name}}"

输出将显示每个卷的驱动程序和名称,例如 local:myvolume

你还可以使用 table 格式以更易读的表格形式显示输出,类似于默认输出,但能更好地控制列。让我们在表格中显示驱动程序和名称。

docker volume ls --format "table {{.Driver}}\t{{.Name}}"

\t 用于在列之间创建制表符空格。输出将是一个以“DRIVER”和“NAME”为表头的表格。

最后,让我们清理在本次实验中创建的卷。你可以使用 docker volume rm 命令删除它们。

docker volume rm myvolume another_volume

你应该会看到卷已被删除的确认信息。

总结

在本次实验中,你学习了如何使用 docker volume ls 命令管理 Docker 卷。首先,你使用 docker volume create 创建了示例卷。接着,你探索了如何使用 docker volume ls 列出系统上的所有现有卷。

此外,你深入学习了如何过滤卷以定位特定的卷。你学会了使用 --filter 标志和 namedriver 键按名称和驱动程序过滤卷。本次实验还介绍了如何根据卷的未使用状态过滤卷,以及如何格式化 docker volume ls 命令的输出以提高可读性。