简介
在这个实验中,你将学习如何使用 docker volume rm
命令管理 Docker 卷。你将先创建一个卷,然后练习删除它。
此外,你将探索容器正在使用卷的场景,并尝试删除该卷,了解默认行为以及如何强制删除当前已挂载到正在运行的容器上的卷。
在这个实验中,你将学习如何使用 docker volume rm
命令管理 Docker 卷。你将先创建一个卷,然后练习删除它。
此外,你将探索容器正在使用卷的场景,并尝试删除该卷,了解默认行为以及如何强制删除当前已挂载到正在运行的容器上的卷。
在这一步中,你将学习如何创建一个 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
标志来强制移除正在被使用的卷。