简介
在这个实验中,你将学习如何有效地使用 docker volume ls
命令来管理你的 Docker 卷。我们将从创建示例卷开始。然后,你将了解如何列出系统上所有现有的卷。
在掌握列出卷的基础上,你将探索如何根据名称、驱动程序等条件,以及卷是否为悬空(dangling)状态来过滤卷。最后,你将学习如何格式化 docker volume ls
命令的输出,以提高可读性并提取特定信息。
在这个实验中,你将学习如何有效地使用 docker volume ls
命令来管理你的 Docker 卷。我们将从创建示例卷开始。然后,你将了解如何列出系统上所有现有的卷。
在掌握列出卷的基础上,你将探索如何根据名称、驱动程序等条件,以及卷是否为悬空(dangling)状态来过滤卷。最后,你将学习如何格式化 docker volume ls
命令的输出,以提高可读性并提取特定信息。
在这一步中,你将学习如何创建 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
你应该会在输出中看到上一步创建的卷(myvolume
和 another_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
驱动程序的卷,其中应该包括 myvolume
和 another_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
你会看到 myvolume
和 another_volume
。myvolume
当前正在被 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
myvolume
和 another_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
标志和 name
与 driver
键按名称和驱动程序过滤卷。本次实验还介绍了如何根据卷的未使用状态过滤卷,以及如何格式化 docker volume ls
命令的输出以提高可读性。