Docker 删除命令手册:如何在 Docker 中删除镜像、容器和卷

本文档详细介绍了如何使用Docker的命令行工具有效地清理和删除无用的镜像、容器、卷和网络配置。重点讲解了`docker system prune`命令及其选项,用于一键清理未使用的资源,以及如何安全删除特定镜像、容器和卷。此外,还提供了按模式删除、使用过滤器等高级操作方法,帮助用户更好地管理和优化Docker环境。

前言

Docker 类似于虚拟机,它可以轻松安装应用程序和关联包,因此我们可以在任何地方运行它。但当我们使用 Docker 时,也很容易累积过多的无用镜像,容器和卷。他们非常占用空间和资源。

Docker 有针对此种问题的删除命令和工具。本教程就是 Docker 删除命令的参考指南。我们会在本教程里教大家如何安全且有条理清理 Docker。

如何使用本指南:

  • 本指南采用命令对应实例的方式讲解。
  • 大家可以使用 Ctrl+F 搜索跳至需要使用的删除功能并查询对应的命令。

清除所有未使用或未挂载的镜像,容器,卷和网络配置

Docker 提供了一个命令,该命令将清除未挂载(不与容器关联)的所有资源(镜像,容器,卷和网络):

docker system prune

返回内容:

WARNING! This will remove:
  - all stopped containers
  - all networks not used by at least one container
  - all dangling images
  - all dangling build cache

Are you sure you want to continue? [y/N]

要另外删除所有停止的容器和所有未使用的镜像(不仅仅是未挂在的镜像),添加命令参数-a

docker system prune -a

删除 Docker 镜像

删除一个或多个指定镜像

docker images -a,可以找到所有的镜像 ID。在列表中找到我们打算删除的镜像,复制它的ID或者名称,然后使用docker rmi+ID/名称 来删除指定镜像。

查看列表:

docker images -a

执行删除:

docker rmi Image Image

注意:如果一个镜像是另一个镜像的引用镜像,它是无法被删除的。

例如:adafef2e596e7896ef8f403f的引用镜像,adafef2e596e无法被直接删除。

REPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE
kalasearch/ubuntu-nodejs   latest              07bb1f0fbf36        2 hours ago         163MB
ubuntu                     latest              adafef2e596e        4 days ago          73.9MB
hello-world                latest              bf756fb1ae65        6 months ago        13.3kB
Error response from daemon: conflict: unable to remove repository reference "ubuntu" (must force) - container 7896ef8f403f is using its referenced image adafef2e596e

删除虚悬镜像(dangling image)

Docker 镜像由多层组成。有些镜像被命名为 <none> ,这些镜像是被新镜像覆盖后,老版本镜像会变成 <none> 。这些镜像被称之为虚悬镜像。这些镜像已经没有任何用处且占用磁盘空间。我们可以通过在命令中添加参数-f 来定位它们。确定要删除它们时,可以使用以下命令:dangling=truedocker imagesdocker images purge

注意: 如果你创建的镜像没有tag,那么这个镜像也会出现在虚悬镜像列表中。要避免这种情况发生,我们可以在创建镜像时,给他们添加上 tag ,之后也可以通过 docker tag 来查找这些镜像

查看列表:

docker images -f dangling=true

执行删除:

docker images purge

根据模式删除镜像

我们可以通过grep来按需查找到我们需要删除的镜像文件,可以查找某一类属性的镜像文件。然后我们可以通过使用awk将ID传递给docker rmi来删除它们。具体可以看接下来的实例。

查看列表:

docker images -a |  grep "pattern"

执行删除:

docker images -a | grep "pattern" | awk '{print $3}' | xargs docker rmi

实例:

docker images -a

输出结果为:

REPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE
kalasearch/ubuntu-nodejs   latest              07bb1f0fbf36        24 hours ago        163MB
ubuntu                     latest              adafef2e596e        5 days ago          73.9MB
hello-world                latest              bf756fb1ae65        6 months ago        13.3kB

docker images查询命令后添加grep

docker images -a |  grep "bf756fb1ae65"

输出结果为:

hello-world                latest              bf756fb1ae65        6 months ago        13.3kB

删除此镜像:

docker images -a | grep "bf756fb1ae65" | awk '{print $3}' | xargs docker rmi

执行结果:

Untagged: hello-world:latest
Untagged: hello-world@sha256:d58e752213a51785838f9eed2b7a498ffa1cb3aa7f946dda11af39286c3db9a9
Deleted: sha256:bf756fb1ae65adf866bd8c456593cd24beb6a0a061dedf42b26a993176745f6b
Deleted: sha256:9c27e219663c25e0f28493790cc0b88bc973ba3b1686355f221c38a36978ac63

删除所有镜像

我们用docker images -a命令来查看所有镜像。确定要全部删除后,我们添加参数-q

把需要删除的镜像ID传给docker rmi

查看列表:

docker images -a

执行删除:

docker rmi $(docker images -a -q)

删除容器

删除一个或多个指定容器

使用docker ps -a命令来查找要删除的容器名或ID:

查看列表:

docker ps -a

执行删除:

docker rm ID_or_Name ID_or_Name

退出时删除容器

如果我们在创建容器时就知道用完后不用保留这个容器,那么我们可以在运行这个容器时,添加参数rmdocker run --rm,这样在执行完成时,此容器会被自动删除。

运行并删除:

docker run --rm image_name

删除所有退出的容器

我们可以通过docker ps -a轻松查找并通过容器当前状态进行筛选:创建、重启、运行、暂停、退出。如果我们要查看已退出的容器列表,我们可以添加参数-f来查看,删除时用-q传递给删除命令docker rm

查看列表:

docker ps -a -f status=exited

执行删除:

docker rm $(docker ps -a -f status=exited -q)

使用多个过滤器筛选出指定容器

我们可以通过 Docker ps的参数赋值来进行“或”的查询和删除。只要满足任意条件,删除命令即会把它们删除掉。例如,我们想要删除容器被标记为 Created (使用无效命令运行容器时,可能导致的状态)或者 Exited 的容器,我们则可以使用两个过滤器:

查看列表:

docker ps -a -f status=exited -f status=created

执行删除:

docker rm $(docker ps -a -f status=exited -f status=created -q)

根据模式删除容器

我们可以通过grep来按需查找到我们需要删除的容器,可以查找某一类属性的容器。然后我们可以通过使用awk将ID传递给docker rmi来删除它们。

查看列表:

docker ps -a |  grep "pattern”

执行删除:

docker ps -a | grep "pattern" | awk '{print $3}' | xargs docker rmi

停止并删除所有容器

我们可以使用docker ps -a命令来查看所有容器。确定要删除这个列表中的全部容器后,我们在命令结尾添加参数-q 然后传给docker stopdocker rm命令即可

查看列表:

docker ps -a

删除命令:

docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)

删除卷

删除一个或多个指定的卷- Docker 1.9及更高版本可用

使用docker volume ls命令找到要删除的卷名。然后,我们可以用docker volume rm命令删除一个或多个卷:

查看列表:

docker volume ls

执行删除:

docker volume rm volume_name

删除虚悬卷(dangling volumes) - Docker 1.9及更高版本可用

由于卷的位置要独立于容器而存在,因此在删除容器时,不会同时自动删除卷。当一个卷存在并且不再连接到任何容器时,称为虚悬卷(dangling volumes) ****。要找到它们并删除可以用docker volume ls命令加上过滤器即可。确定列表中都是想要删除的卷后,我们可以使用docker volume prune命令将它们全部删除:

查询列表:

docker volume ls -f dangling=true

执行删除:

docker volume prune

移除容器及对应的卷

我们可以使用docker rm -v来删除指定容器并同时删除为此容器分配的卷。在执行删除命令后,当容器已经成功删除时,会显示此容器的 ID。另外要注意的是,此命令只会删除容器,和此容器对应的未命名卷。如果卷被命名了,它不会被此命令删除,仍然会保留在系统中。

执行删除:

docker rm -v container_name

总结

本指南介绍了 Docker 中删除镜像、容器及卷的常用命令。其实每个命令还可以有很多组合,更多信息大家可以参考 Docker 官方文档 docker system prunedocker rmidocker rmdocker volume rm 。如果大家还有什么不明白的地方,欢迎在留言区留言,我们会根据大家的问题,继续来丰富 Docker 指南。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值