
Docker删除容器简介
Docker rm是Docker的一条命令,用于删除或移除一个或多个容器。为了删除容器,它应该处于停止状态;然而,我们可以使用'-f'标志强行删除一个正在运行的容器。我们需要一个容器ID或容器名称来删除容器。当我们删除容器时,容器的所有数据都会被销毁,所以建议使用卷来进行持久性存储。在本专题中,我们将学习Docker删除容器。
语法
$docker rm --help
选项
-f, -force:该选项用于删除一个正在运行的容器。它将使用SIGKILL来杀死运行该容器的进程。
-l, -link:它被用来删除链接
-v, -volumes:它用于删除连接到容器的匿名卷。

如何在Docker中删除容器?
为了在Docker中删除一个或多个容器,我们在Docker CLI中运行'docker rm'命令,Docker客户端会对docker守护进程进行API调用以删除该容器。接下来,Docker守护进程会检查该容器并检查其状态;如果状态是运行的,Docker守护进程会抛出一个错误,即该容器正在运行,并建议使用'-f'标志来强制删除该容器。如果容器被成功删除,docker守护进程将在STDOUT上输出指定的容器名称或容器ID。
Docker删除容器的例子
下面提到了不同的例子。
例子#1
我们将创建一个nginx和一个ubuntu容器,并尝试将其删除。
- 用下面的命令创建一个nginx容器:
$docker run -d nginx
- 创建一个ubuntu容器,如下所示。
$docker run -d ubuntu
- 列出所有的容器:
$docker ps –a

解释一下: 在上面的例子中,第一个名为 "modest_khorana "的容器处于退出状态,而第二个名为 "serene_hodgkin "的容器处于上升状态,这意味着它处于运行状态。让我们试着用'docker rm'命令来删除这些容器。
- 首先删除或移除停止的容器,如下所示。
语法
$docker rm <container_ID>
$docker rm <container_name>
例子
$docker rm d077d5f4873e

我们可以看到容器被成功地删除了。
- 现在,让我们试着用同样的命令rm运行中的容器:
$docker rm 980c7d53a4e1

解释一下: 在上面的快照中,我们可以看到我们得到了一个错误,即Docker守护进程不能删除一个正在运行的容器;我们需要停止该容器或者强制删除它。
- 在这里,我们将使用"-f "标志来强制删除容器,如下所示。
$docker rm -f

解释一下: 在上面的快照中,我们可以看到容器已经被成功地删除了,没有任何错误,而且现在没有容器存在。
下面是上述所有命令的单一快照。

例子 #2
我们将创建一个链接容器,并将删除链接容器。
- 使用 "mysql "Docker镜像创建一个名为 "my-db "的源容器,如下所示。
$docker run -d --name my-db mysql sleep 3600
- 现在,用别名'db'将'my-db'容器链接到名为'my-web'的新容器,如下所示。
$docker run -d -P --name my-web --link my-db:db nginx
- 我们现在将删除这个链接下的容器,如下所示。
$docker rm -f /my-web
$docker rm -f /my-db

- 如果我们只需要删除这些链接的容器之间的链接,我们可以使用'-link'或者'-l'标志来删除默认桥接网络上的链接,如下所示。-
$docker rm -l /my-web/db

解释一下: 在上面的快照中,我们可以看到容器已经被重新创建,因为在最后一步中删除了容器,然后删除了容器之间的链接;但是,它并没有删除容器,因为你可以在快照中看到,容器仍然在运行。
例子 #3
我们将运行一个带有匿名卷的容器,并使用'-v'标志删除带有匿名卷的容器。
- 创建一个带有匿名卷的alpine容器,如下所示。
$docker run -d -v /root alpine
- 让我们删除这个没有任何标志的容器,如下所示。
$docker rm 3f04

解释: 在上面的例子中,如果我们不带任何标志地删除容器,我们可以看到匿名卷仍然存在。让我们使用"-v "标志,用下面的命令将匿名卷和容器一起删除。
$docker rm -v 39b7

解释: 在上面的快照中,我们重新创建了带有匿名卷的容器;然而,我们在删除容器时使用了'-v'标志,这也删除了连接到这个容器的匿名卷。
注意: '-v'标志只删除了附属于容器的匿名卷,而不是命名的卷。例如,我们有一个命名的卷 "my-vol "并附在容器上,那么它将保持原样,如下所示。
$ docker run -d -v my-vol:/etc -v /root alpine

解释一下: 在上面的快照中,我们可以看到,除了使用'-v'标志之外,卷'my-vol'仍然存在。
例子 #4
假设我们有多个处于停止状态或兴奋状态的容器,我们想摆脱它,想一次性删除所有的容器。
- 让我们创建3个Alpine容器和一个nginx容器,如下所示。
$docker run -d alpine
注意: 运行上述命令3次以创建3个容器
$docker run -d alpine

- 让我们用下面的命令检查容器的状态:
$docker ps –a

- 下面的命令是用来删除所有停止的容器:
$docker rm $(docker ps -a -q)
注意: 如果我们想删除所有的容器,请使用"-f "标志。

解释一下: 在上面的快照中,我们看到$(docker ps -a -q)命令查询了所有的容器,并将其发送给remove命令进行删除;但是它对运行中的容器抛出了一个错误。所以我们还有一条命令来删除所有的容器,除了正在运行的那个。
- 让我们再一次像上面那样创建一些容器,然后用下面的命令删除停止的容器:-
$docker container prune

在上面的快照中,我们有3个处于退出状态的容器和1个处于运行状态的容器,在使用'prune'命令后,除了运行中的容器外,所有停止的容器都被删除了,而且它没有为运行中的容器抛出任何错误。
结论
我们使用'docker rm'命令来删除或移除不再需要的容器;然而,我们有一个替代命令,'docker container rm',其工作原理与'docker rm'命令类似。它也有同样的标志。我们可以根据自己的舒适度来使用任何一个命令。