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

485 阅读3分钟

简介

Docker让你很容易将你的应用程序和服务包装在容器中,这样你就可以在任何地方运行它们。然而,当你使用Docker时,也很容易积累了过多的未使用的镜像、容器和数据卷,使输出混乱并消耗磁盘空间。

Docker为你提供了所有的工具,你需要从命令行中清理你的系统。这本小抄式的指南提供了一个快速参考的命令,这些命令有助于释放磁盘空间,并通过删除未使用的Docker镜像、容器和卷来保持你的系统有序。

如何使用本指南。

  • 本指南采用小抄的形式,包含独立的命令行片段。
  • 你可以跳到与你要完成的任务有关的任何章节。

**注意:**命令的替换语法。 command $(command),在许多流行的shell中都可以使用,如bashzshWindows Powershell

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

Docker提供了一个单一的命令,可以清理任何资源--镜像、容器、卷和网络--这些资源都是悬空的(没有标记或与容器相关联)。

docker system prune

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

docker system prune -a

删除Docker镜像

删除一个或多个特定的镜像

使用带有-a 标志的docker images 命令来定位你想删除的镜像的ID。这将显示每一个镜像,包括中间的镜像层。当你找到你想删除的图像时,你可以把它们的ID或标签传给docker rmi

列表。

docker images -a

删除。

docker rmi Image Image

删除悬空的镜像

Docker镜像由多个层组成。悬空的图像是与任何标记的图像没有关系的层。它们不再有任何作用,并且消耗了磁盘空间。通过在docker images 命令中添加过滤标志-f ,其值为dangling=true ,可以找到它们。当你确定要删除它们时,你可以使用docker image prune 命令。

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

列表。

docker images -f dangling=true

删除。

docker image prune

根据一个模式删除图片

你可以使用docker images 和的组合找到所有符合模式的图片。 grep.一旦你满意了,你可以通过使用 awk将ID传递给docker rmi 。 注意,这些工具不是由Docker提供的,不一定在所有系统上都可用。

列表。

docker images -a |  grep "pattern"

删除。

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

移除所有镜像

通过在docker images 命令中添加-a ,可以列出一个系统中的所有Docker镜像。一旦你确定要把它们全部删除,你可以添加-q 标志,把镜像的ID传给docker rmi

列出。

docker images -a

删除。

docker rmi $(docker images -a -q)

移除容器

移除一个或多个特定的容器

使用带有-a 标志的docker ps 命令,找到你想删除的容器的名称或ID。

列表。

docker ps -a

移除。

docker rm ID_or_Name ID_or_Name

退出时删除一个容器

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

运行并删除。

docker run --rm image_name

删除所有退出的容器

你可以使用docker ps -a 来定位容器,并通过其状态来过滤它们。created,restarting,running,paused, 或exited 。要查看exited 容器的列表,使用-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 ps 和 .NET的组合来找到所有符合模式的容器。 grep.当你确信你有你想要删除的列表时,你可以使用 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文档中的 docker system prune, docker rmi, docker rm、 、 和 docker volume rm.如果你想在指南中看到一些常见的清理任务,请在评论中提问或提出建议。

要详细了解Docker容器的不同组件,请查看《Docker生态系统》。常见组件的介绍