如何删除 Docker 镜像、容器和卷

Docker 备忘单

介绍

Docker 可以轻松地将您的应用程序和服务包装在容器中,以便您可以在任何地方运行它们。然而,当您使用 Docker 时,也很容易积累过多未使用的图像、容器和数据量,从而使输出混乱并消耗磁盘空间。

Docker 为您提供了从命令行清理系统所需的所有工具。这份备忘单样式的指南提供了对通过删除未使用的 Docker 镜像、容器和卷来释放磁盘空间和保持系统组织有用的命令的快速参考。

如何使用本指南:

  • 本指南采用备忘单格式,带有独立的命令行片段
  • 跳转到与您尝试完成的任务相关的任何部分。

命令中使用的命令替换语法可在许多流行的 shell 中使用,例如 bash、zsh 和 Windows Powershell。command $(command)

清除所有未使用或悬空的镜像、容器、卷和网络

Docker 提供了一个命令来清理任何悬空的(与容器无关的)资源——图像、容器、卷和网络:

  • docker system prune

要额外删除任何已停止的容器和所有未使用的图像(不仅仅是悬空图像),请将-a标志添加到命令中:

  • docker system prune -a

删除 Docker 镜像

删除一张或多张特定图片

使用docker images带有-a标志命令来定位要删除的图像的 ID。这将显示每个图像,包括中间图像层。找到要删除的图像后,可以将其 ID 或标签传递给docker rmi

列表:

  • docker images -a

去掉:

  • docker rmi Image Image

删除悬空图像

Docker 镜像由多个层组成。悬空图像是与任何标记图像无关的图层。它们不再有任何用途并消耗磁盘空间。它们可以通过添加过滤器标志来定位,命令-f的值为当您确定要删除它们时,可以使用以下命令:dangling=truedocker imagesdocker image prune

注意:如果你构建一个没有标记的图像,该图像将出现在悬空图像列表中,因为它与标记图像没有关联。您可以通过在构建时提供标签来避免这种情况,并且您可以使用docker tag命令追溯标记图像

列表:

  • docker images -f dangling=true

去掉:

  • docker image prune

根据模式删除图像

你可以找到所有使用相匹配的组合模式的图像docker imagesgrep满意后,您可以使用awk将 ID 传递给 来删除它们docker rmi请注意,这些实用程序不是由 Docker 提供的,也不一定在所有系统上都可用:

列表:

  • docker images -a | grep "pattern"

去掉:

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

删除所有图像

通过添加-adocker images命令中,可以列出系统上的所有 Docker 镜像一旦您确定要将它们全部删除,您可以添加-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

退出时移除容器

如果您知道在创建容器时一旦完成就不想保留它,您可以运行docker run --rm以在它退出时自动删除它。

运行和删除:

  • docker run --rm image_name

移除所有退出的容器

您可以使用容器定位docker ps -a并按其状态过滤它们:已创建、正在重新启动、正在运行、已暂停或已退出。要查看已退出容器的列表,请使用该-f标志根据状态进行过滤。当您确认要删除这些容器时,使用-q将 ID 传递给docker rm命令。

列表:

  • docker ps -a -f status=exited

去掉:

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

使用多个过滤器移除容器

Docker 过滤器可以通过使用附加值重复过滤器标志来组合。这会生成满足任一条件的容器列表。例如,如果您想删除所有标记为Created(使用无效命令运行容器时可能导致的状态)或Exited的容器,您可以使用两个过滤器:

列表:

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

去掉:

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

根据模式移除容器

您可以使用docker psgrep的组合找到与模式匹配的所有容器当您对要删除的列表感到满意时,您可以使用awkxargs将 ID 提供给docker rm请注意,这些实用程序不是由 Docker 提供的,也不一定在所有系统上都可用:

列表:

  • docker ps -a | grep "pattern

去掉:

  • docker ps -a | grep "pattern" | awk '{print $1}' | xargs docker rm

停止并移除所有容器

您可以使用 来查看系统上的容器docker ps添加-a标志将显示所有容器。当您确定要删除它们时,您可以添加-q标志以向docker stopdocker rm命令提供 ID

列表:

  • 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 volume_name

删除悬空卷 – Docker 1.9 及更高版本

由于卷的点是独立于容器而存在的,所以当一个容器被移除时,不会同时自动移除一个卷。当卷存在并且不再连接到任何容器时,它被称为悬垂卷。要找到它们以确认您要删除它们,您可以使用docker volume ls带有过滤器命令将结果限制为悬空体积。当您对列表感到满意时,您可以使用以下命令将它们全部删除docker volume prune

列表:

  • docker volume ls -f dangling=true

去掉:

  • docker volume prune

删除容器及其体积

如果您创建了一个未命名的卷,它可以与带有-v标志的容器同时删除请注意,这仅适用于未命名的卷。成功移除容器后,会显示其 ID。请注意,没有提及移除体积。如果它是未命名的,它会被悄悄地从系统中删除。如果它被命名,它会默默地保持存在。

去掉:

  • docker rm -v container_name

结论

本指南涵盖了一些用于使用 Docker 删除镜像、容器和卷的常用命令。还有许多其他组合和标志可以与每个组合和标志一起使用。对于一个全面的指南什么可用的,请参阅多克尔文件docker system prunedocker rmidocker rmdocker volume rm如果您希望在指南中看到常见的清理任务,请在评论中提问或提出建议。

觉得文章有用?

点个广告表达一下你的爱意吧 !😁