如何使用 docker volume rm 命令移除卷

DockerDockerBeginner
立即练习

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

简介

在这个实验中,你将学习如何使用 docker volume rm 命令管理 Docker 卷。你将先创建一个卷,然后练习删除它。

此外,你将探索容器正在使用卷的场景,并尝试删除该卷,了解默认行为以及如何强制删除当前已挂载到正在运行的容器上的卷。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/VolumeOperationsGroup(["Volume Operations"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") 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/ContainerOperationsGroup -.-> docker/create("Create Container") docker/VolumeOperationsGroup -.-> docker/volume("Manage Volumes") subgraph Lab Skills docker/run -.-> lab-555262{{"如何使用 docker volume rm 命令移除卷"}} docker/ls -.-> lab-555262{{"如何使用 docker volume rm 命令移除卷"}} docker/ps -.-> lab-555262{{"如何使用 docker volume rm 命令移除卷"}} docker/rm -.-> lab-555262{{"如何使用 docker volume rm 命令移除卷"}} docker/inspect -.-> lab-555262{{"如何使用 docker volume rm 命令移除卷"}} docker/create -.-> lab-555262{{"如何使用 docker volume rm 命令移除卷"}} docker/volume -.-> lab-555262{{"如何使用 docker volume rm 命令移除卷"}} end

创建一个卷

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

要创建一个卷,你可以使用 docker volume create 命令,后面跟上你想给卷起的名字。让我们创建一个名为 myvolume 的卷。

docker volume create myvolume

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

现在,让我们使用 docker volume ls 命令列出所有可用的卷,来验证该卷是否已创建。

docker volume ls

你应该会在输出中看到 myvolume

尝试删除卷

在这一步中,你将尝试删除上一步中创建的卷。要删除 Docker 卷,你可以使用 docker volume rm 命令,后面跟上卷的名称。

让我们尝试删除 myvolume 卷。

docker volume rm myvolume

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

现在,让我们再次列出所有可用的卷,以验证该卷是否已被删除。

docker volume ls

你应该不会再在输出中看到 myvolume

删除卷

在上一步中,你尝试删除了该卷。现在,让我们确保它已被删除。你可以使用相同的 docker volume rm 命令,后面跟上卷的名称。

docker volume rm myvolume

如果在上一步中卷已成功删除,你可能会看到一个错误,提示未找到该卷。这是预期的结果,表明该卷已被删除。如果上一步中卷未被删除,此命令将在此时删除它。

要确认该卷已被删除,请再次列出所有卷。

docker volume ls

myvolume 不应再出现在列表中。

创建一个卷并使用它创建一个容器

在这一步中,你将创建一个新的卷,然后创建一个使用该卷来持久化数据的 Docker 容器。

首先,让我们创建一个名为 mydata 的新卷。

docker volume create mydata

接下来,我们将运行一个简单的 ubuntu 容器,并将 mydata 卷挂载到容器内的 /app 目录。我们还将运行一个命令,将一些文本写入挂载卷内的一个文件中。

在运行容器之前,让我们拉取 ubuntu 镜像,以确保它在本地可用。

docker pull ubuntu

现在,运行容器并写入卷:

docker run -d --name mycontainer -v mydata:/app ubuntu bash -c "echo 'Hello from the volume!' > /app/greeting.txt && tail -f /dev/null"

让我们分解一下这个命令:

  • docker run:用于运行新容器的命令。
  • -d:以分离模式(在后台)运行容器。
  • --name mycontainer:将容器命名为 mycontainer
  • -v mydata:/app:这是卷挂载操作。它将名为 mydata 的 Docker 卷挂载到容器内的 /app 目录。
  • ubuntu:要使用的 Docker 镜像。
  • bash -c "echo 'Hello from the volume!' > /app/greeting.txt && tail -f /dev/null":在容器内运行的命令。它将“Hello from the volume!”写入 /app 目录(即挂载的卷)中名为 greeting.txt 的文件,然后运行 tail -f /dev/null 以保持容器运行。

要验证容器是否正在运行以及卷是否已挂载,你可以检查容器。

docker inspect mycontainer

在输出中查找“Mounts”部分。你应该会看到 mydata 卷挂载在 /app 的条目。

尝试移除正在使用的卷

在这一步中,你将尝试在 mydata 卷仍被 mycontainer 容器使用时将其移除。这将展示当你尝试移除一个已挂载到正在运行的容器上的卷时会发生什么。

使用 docker volume rm 命令尝试移除 mydata 卷。

docker volume rm mydata

你应该会看到一条错误消息,提示该卷正在使用中,无法移除。这是预期的行为。Docker 会阻止你移除当前已挂载到正在运行的容器上的卷,以防止数据丢失或出现意外行为。

要确认该卷未被移除,请再次列出所有卷。

docker volume ls

你应该仍然能在输出中看到 mydata

强制移除正在使用的卷

在上一步中,你了解到不能移除当前正在被运行中的容器使用的卷。然而,可能会有一些情况,你需要移除一个正在被使用的卷。Docker 提供了一种方法,通过在 docker volume rm 命令中使用 -f--force 标志来强制移除卷。

注意: 强制移除正在使用的卷可能会导致数据丢失,并使使用该卷的容器出现意外行为。请谨慎使用此选项。

让我们尝试在 mycontainer 仍在运行时强制移除 mydata 卷。

docker volume rm -f mydata

你应该会看到卷的名称被打印到控制台,这表明它已被移除。

现在,让我们通过列出所有卷来验证该卷是否已被移除。

docker volume ls

mydata 卷应该不再出现在列表中。

你还可以检查 mycontainer 的状态。

docker ps

mycontainer 可能仍会出现在正在运行的容器列表中,但由于其卷已被移除,它可能处于不健康状态或意外停止。

最后,让我们停止并移除该容器以进行清理。

docker stop mycontainer
docker rm mycontainer

总结

在这个实验中,你学习了如何使用 docker volume 命令管理 Docker 卷。你首先使用 docker volume create 创建了一个名为 myvolume 的卷,并使用 docker volume ls 验证了它的存在。然后,你练习了使用 docker volume rm 移除该卷,并通过再次列出卷来确认它已被移除。

你还探究了当卷被容器使用时 docker volume rm 的行为。你创建了一个卷和一个使用该卷的容器,并观察到直接尝试移除该卷会失败。最后,你学习了如何通过在 docker volume rm 命令中添加 -f 标志来强制移除正在被使用的卷。