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

介绍

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

Docker为您提供您从命令行清理系统所需的所有工具. 这个骗局表风格的指南提供了一个快速参考用于释放磁盘空间和通过删除未使用的 Docker 图像,容器和卷来保持系统组织的命令。

** 如何使用此指南:**

  • 此指南是 cheat sheet 格式,包含自含的命令行片段。
  • 跳到任何与您试图完成的任务相关的部分。

<$>[注] **注: **在命令中使用的命令替代语法 command $(command)在许多流行的壳中可用,如 bash, zsh,和 Windows Powershell

清除所有未使用或危及图像、容器、卷和网络

Docker 提供了一个单一的命令,可以清除任何资源 - 图像,容器,卷和网络 - 是 dangling (不标记或与容器相关):

1docker system prune

为了进一步删除任何停止的容器和所有未使用的图像(不仅仅是悬浮图像),请在命令中添加-a旗:

1docker system prune -a

删除 Docker 图像

删除一个或多个特定图像

使用docker 图像命令与-a标志来查找想要删除的图像的 ID。这将显示每个图像,包括中间图像层。当你找到想要删除的图像时,你可以将它们的 ID 或标签传递到docker rmi:

名单:**

1docker images -a

删除: 删除:

1docker rmi Image Image

删除模糊的图片

Docker 图像由多个层组成. Dangling 图像是与任何标记的图像无关的层。它们不再为任何目的而消耗磁盘空间。它们可以通过在docker 图像命令中添加一个值为dangling=true的过滤旗来定位。

<$>[注] 注: 如果您构建图像而不标记它,图像将出现在悬浮图像列表中,因为它与标记图像无关。

名单:**

1docker images -f dangling=true

删除: 删除:

1docker image prune

根据模式删除图像

您可以使用docker 图像grep(https://andsky.com/tech/tutorials/using-grep-regular-expressions-to-search-for-text-patterns-in-linux)的组合找到所有匹配模式的图像。一旦您满意,您可以使用awk(https://andsky.com/tech/tutorials/how-to-use-the-awk-language-to-manipulate-text-in-linux)删除这些图像以将 ID 传输给docker rmi

名单:**

1docker images -a |  grep "pattern"

删除: 删除:

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

删除所有图片

系统上的所有 Docker 图像都可以通过在docker 图像命令中添加-a来列出,一旦您确定要删除它们,您可以添加-q标志来将图像 ID 传递给docker rmi:

名单:**

1docker images -a

删除: 删除:

1docker rmi $(docker images -a -q)

排除集装箱

删除一个或多个特定容器

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

名单:**

1docker ps -a

删除: 删除:

1docker rm ID_or_Name ID_or_Name

退出时移除容器

如果你知道在创建一个容器时,一旦完成,你不会想要保持它,你可以运行docker run --rm来自动删除它,当它退出时:

** 运行和删除:**

1docker run --rm image_name

清除所有外出容器

您可以使用「docker ps -a」找到容器,并按其状态过滤它们:「创建」、「重新启动」、「运行」、「暂停」或「退出」。

名单:**

1docker ps -a -f status=exited

删除: 删除:

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

使用多个过滤器删除容器

Docker 过滤器可以通过重复一个附加值的过滤器标志来组合,从而产生符合这两个条件的集装箱列表,例如,如果您想要删除所有被标记为创建的集装箱(在运行一个集装箱使用无效命令时可能出现的状态)或退出的集装箱,您可以使用两种过滤器:

名单:**

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

删除: 删除:

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

根据模式删除容器

您可以使用「docker ps」和「grep」(https://andsky.com/tech/tutorials/using-grep-regular-expressions-to-search-for-text-patterns-in-linux)的组合找到所有匹配模式的容器。当您确定您有想要删除的列表时,您可以使用「awk」(https://andsky.com/tech/tutorials/how-to-use-the-awk-language-to-manipulate-text-in-linux)和「xargs」为「docker rm」提供ID。

名单:**

1docker ps -a |  grep "pattern”

删除: 删除:

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

停止并移除所有容器

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

名单:**

1docker ps -a

删除: 删除:

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

排除量

删除一个或多个特定卷 - Docker 1.9 或更高版本

使用docker volume ls命令来查找您想要删除的卷名或名称,然后您可以使用docker volume rm命令删除一个或多个卷:

名单:**

1docker volume ls

删除: 删除:

1docker volume rm volume_name volume_name

删除悬浮卷 - Docker 1.9 或更高版本

由于卷点是独立于容器的存在,当一个容器被删除时,一个卷不会自动同时被删除。当一个卷存在并且不再连接到任何容器时,它被称为 dangling volume。 要找到它们以确认您想要删除它们,您可以使用docker volume ls命令与过滤器来限制结果到 dangling volumes。

名单:**

1docker volume ls -f dangling=true

删除: 删除:

1docker volume prune

删除一个容器及其体积

如果你创建了一个未命名的卷,它可以与带有v标志的容器同时删除。 请注意,这只适用于未命名的卷。 当容器成功删除时,其ID将显示。 请注意,没有提及删除该卷。

删除: 删除:

1docker rm -v container_name

结论

本指南涵盖了使用 Docker 删除图像、容器和卷的某些常见命令. 还有许多其他组合和旗帜可以用在每一个指南中。 有关可用内容的全面指南,请参阅 Docker 文档 docker system prune, docker rmi, docker rmdocker volume rm

若要详细了解 Docker 容器的不同组件,请参阅 The Docker Ecosystem: An Introduction to Common Components

Published At
Categories with 技术
comments powered by Disqus