简介
在本实验中,你将学习如何使用 docker container rm
命令高效管理 Docker 容器。你将练习创建和删除基础容器,了解如何强制删除运行中的容器,探索删除容器时一并移除其关联匿名卷(anonymous volumes)的选项,最后学习如何高效清理所有已停止的容器。
通过动手实践,你将获得 Docker 容器生命周期管理的关键实操经验,从而能够清理 Docker 环境并有效管理资源。
在本实验中,你将学习如何使用 docker container rm
命令高效管理 Docker 容器。你将练习创建和删除基础容器,了解如何强制删除运行中的容器,探索删除容器时一并移除其关联匿名卷(anonymous volumes)的选项,最后学习如何高效清理所有已停止的容器。
通过动手实践,你将获得 Docker 容器生命周期管理的关键实操经验,从而能够清理 Docker 环境并有效管理资源。
在本步骤中,你将学习如何创建和删除 Docker 容器。容器是镜像的可运行实例,你可以通过 Docker API 或 CLI 来创建、启动、停止、移动或删除容器。
首先,让我们拉取一个简单的镜像用于创建容器。我们将使用 hello-world
镜像,这是一个极小的镜像,仅会打印 "Hello from Docker!" 后退出。
docker pull hello-world
你将看到镜像正在被拉取和下载的输出信息。
Using default tag: latest
latest: Pulling from library/hello-world
...
Status: Downloaded newer image for hello-world:latest
docker.io/library/hello-world:latest
获取镜像后,我们可以基于它创建并运行容器。使用 docker run
命令:
docker run hello-world
该命令会从 hello-world
镜像创建新容器,执行镜像中指定的命令(即打印 "Hello from Docker!"),然后容器退出。你将在终端看到 "Hello from Docker!" 消息。
Hello from Docker!
This message shows that your installation appears to be working correctly.
...
容器运行结束后会自动停止。你可以使用 docker ps -a
命令查看所有容器(包括已停止的)。
docker ps -a
输出会显示状态为 "Exited" 的 hello-world
容器,类似这样:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
<container_id> hello-world "/hello" About a minute ago Exited (0) About a minute ago <container_name>
现在我们来删除已停止的容器。使用 docker rm
命令后接容器 ID 或名称(可通过 docker ps -a
输出获取)。请将 <container_id>
替换为你的实际容器 ID。
docker rm <container_id>
删除成功后,终端会打印被删除容器的 ID:
<container_id>
执行 docker ps -a
再次验证,已删除的 hello-world
容器不应再出现在列表中。
docker ps -a
输出结果中不应包含你刚删除的 hello-world
容器。
在上一步中,我们删除了一个已停止的容器。但你不能直接使用 docker rm
删除运行中的容器。本步骤将教你如何强制删除运行中的容器。
首先,我们创建一个持续运行的容器。使用 ubuntu
镜像并执行 sleep infinity
命令保持容器运行。若尚未获取 ubuntu
镜像,请先拉取:
docker pull ubuntu
现在以分离模式(-d
)运行 ubuntu
容器,使其在后台持续运行:
docker run -d ubuntu sleep infinity
终端将输出代表容器 ID 的长字符串:
<container_id>
通过 docker ps
确认容器正在运行:
docker ps
输出应显示状态为 "Up" 的 ubuntu
容器:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
<container_id> ubuntu "sleep infinity" About a minute ago Up About a minute ago <container_name>
尝试用 docker rm
删除这个运行中的容器(请替换 <container_id>
为你的实际容器 ID):
docker rm <container_id>
此时会看到错误提示,表明无法直接删除运行中的容器:
Error response from daemon: You cannot remove a running container <container_id>. Stop the container before attempting removal or use -f
如错误信息所示,你需要先停止容器或使用 -f
(强制)参数。虽然优雅停止容器是推荐做法,但强制删除能更快速地移除运行中的容器(特别是当容器内进程无法及时响应停止信号时)。
使用 -f
参数强制删除运行中的容器(请替换 <container_id>
):
docker rm -f <container_id>
终端将打印被删除容器的 ID:
<container_id>
执行 docker ps
验证删除结果,ubuntu
容器不应再出现在列表中:
docker ps
输出中不应包含你刚删除的 ubuntu
容器。
在本步骤中,你将学习如何删除容器及其关联的匿名卷。创建容器时,Docker 会生成卷来存储数据。匿名卷是指在创建时未明确命名的卷,通常由镜像 Dockerfile 中的 VOLUME
指令自动创建。
首先运行一个会创建匿名卷的容器。我们再次使用 ubuntu
镜像,并通过 -v
参数指定挂载点(冒号前不写名称):
docker run -d -v /data ubuntu sleep infinity
该命令会创建容器和一个挂载在容器内 /data
目录的匿名卷。终端将输出容器 ID:
<container_id>
现在检查容器查看已创建的卷(请替换 <container_id>
为你的实际容器 ID):
docker inspect <container_id>
在输出的 JSON 对象中,找到 "Mounts"
部分。你会看到 /data
的挂载信息,其中 "Name"
字段是随机生成的字符串,表明这是匿名卷:
...
"Mounts": [
{
"Type": "volume",
"Source": "<volume_name>",
"Target": "/data",
"Consistency": "consistent",
"BindOptions": null,
"Mode": "",
"RW": true,
"Propagation": "rprivate"
}
],
...
也可以通过 docker volume ls
查看所有卷,匿名卷会显示在列表中:
docker volume ls
输出包含随机命名的匿名卷:
DRIVER VOLUME NAME
local <volume_name>
默认情况下,删除容器时其匿名卷会保留。先停止容器(请替换 <container_id>
):
docker stop <container_id>
终端返回容器 ID:
<container_id>
现在删除已停止的容器(不删除卷):
docker rm <container_id>
再次检查卷列表,匿名卷仍然存在:
docker volume ls
接下来演示同时删除容器及其卷。先创建新容器:
docker run -d -v /data ubuntu sleep infinity
获取新容器 ID:
<new_container_id>
停止新容器(请替换 <new_container_id>
):
docker stop <new_container_id>
使用 -v
参数删除容器及其匿名卷:
docker rm -v <new_container_id>
最后验证卷列表,新容器的匿名卷已消失,仅保留最初创建的匿名卷:
docker volume ls
在本步骤中,你将学习如何一次性删除所有已停止的容器。使用 Docker 时,可能会积累大量已停止的容器,这些容器会占用磁盘空间。Docker 提供了便捷的命令来清理这些已停止的容器。
首先创建几个会自动停止的容器。我们使用 ubuntu
镜像并执行立即退出的命令:
docker run ubuntu echo "This container will stop immediately"
你将看到输出 "This container will stop immediately",随后容器立即退出。
再次执行命令创建第二个已停止容器:
docker run ubuntu echo "Another stopped container"
通过 docker ps -a
查看所有容器(包括已停止的):
docker ps -a
输出会显示两个状态为 "Exited" 的容器(如果之前未清理,可能还会看到其他已停止容器):
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
<container_id_1> ubuntu "echo 'This containe…" About a minute ago Exited (0) About a minute ago <container_name_1>
<container_id_2> ubuntu "echo 'Another stopp…" About a minute ago Exited (0) About a minute ago <container_name_2>
...
使用 docker container prune
命令批量删除所有已停止容器:
docker container prune
Docker 会要求确认操作,输入 y
并按回车:
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
终端将列出被删除的容器 ID 和回收的磁盘空间:
Deleted Containers:
<container_id_1>
<container_id_2>
...
Total reclaimed space: ...
最后验证删除结果,再次执行:
docker ps -a
此时输出应只显示运行中的容器(如果有),不再包含已停止的容器。
在本实验中,你学习了使用 docker rm
命令管理 Docker 容器的基础流程。首先创建并运行了一个简单的 hello-world
容器,观察了从创建到退出的完整生命周期。随后练习了通过容器 ID 或名称来删除这个已停止的容器。
在此基础上,你探索了更高级的删除场景:学习了使用 -f
参数强制删除运行中的容器,并理解了这一操作的影响;掌握了通过 -v
参数连带删除关联匿名卷的方法,实现彻底清理;最后还学会了批量删除所有已停止容器的高效技巧,这对维护 Docker 环境整洁非常实用。