介绍
Docker使得将应用程序和服务封装到容器中,以便在任何地方运行变得简单。然而,当您使用Docker时,也很容易积累过多未使用的镜像、容器和数据卷,这些会混乱输出并消耗磁盘空间。
Docker为您提供了从命令行清理系统所需的所有工具。这个速查表式指南提供了一个快速参考,介绍了一些有用的命令,可用于释放磁盘空间,并通过删除未使用的Docker镜像、容器和卷来保持系统的组织性。
如何使用本指南:
- 本指南以速查表格式提供了自包含的命令行代码片段。
- 跳转到与您要完成的任务相关的任何部分。
注意:命令替换语法,command $(command)
,在许多流行的shell中都可用,比如bash、zsh和Windows Powershell。
如果您想要一种只需点击一次即可将Docker应用程序部署到实时服务器的方法,请查看DigitalOcean App平台。
清除所有未使用的或悬空的映像、容器、卷和网络
Docker提供了一个单一命令,可以清理任何资源——映像、容器、卷和网络——这些资源是悬空的(没有标签或与容器关联):
为了进一步删除任何已停止的容器和所有未使用的映像(不仅仅是悬空映像),请在命令中添加-a
标志:
移除Docker映像
移除一个或多个特定映像
使用带有-a
标志的docker images
命令来查找您想要删除的镜像的ID。这将显示您所有的镜像,包括中间镜像层。当您找到要删除的镜像后,可以将它们的ID或标签传递给docker rmi
:
列表:
删除:
注意:在docker images
命令中,-a
或--all
标志显示所有的Docker镜像,包括中间层,这些中间层没有被任何标签引用。默认情况下,docker images
只显示至少有一个标签的镜像。然而,可能有一些没有任何标签的镜像仍然占用系统上的磁盘空间。-a
标志可以帮助识别可以修剪以节省磁盘空间的镜像。当与docker rmi
命令一起使用时,-f
或--force
标志也可以用来删除没有标签的镜像。
删除悬空Docker镜像
Docker镜像由多个层组成。悬空镜像是与任何已标记镜像没有关联的层。它们不再有任何作用,并且占用磁盘空间。可以通过在docker images
命令中添加带有dangling=true
值的过滤器标志-f
来找到它们。当您确定要删除它们时,可以使用docker image prune
命令:
注意: 如果您构建图像而没有对其进行标记,该图像将出现在悬挂图像列表中,因为它与已标记的图像没有关联。您可以在构建时通过提供标记来避免这种情况,并且可以使用docker tag
命令以后期方式为图像打标记。
列表:
移除:
按模式移除图像
您可以使用docker images
和grep
的组合找到所有与模式匹配的图像。一旦您满意,您可以使用awk
将其 ID 传递给docker rmi
来删除它们。请注意,这些实用工具不是由 Docker 提供的,并且不一定在所有系统上都可用:
列表:
移除:
删除所有图片
系统上的所有Docker镜像可以通过在docker images
命令后添加-a
来列出。一旦确定要删除它们,可以添加-q
标志将镜像ID传递给docker rmi
:
列表:
移除:
移除容器
移除一个或多个特定的容器
使用docker ps
命令和-a
标志来定位要移除的容器的名称或ID:
列表:
移除:
在退出时移除容器
如果您在创建容器时知道不想保留它,可以运行docker run --rm
来在退出时自动删除它:
运行并删除:
删除所有已退出的容器
您可以使用docker ps -a
来定位容器,并按其状态进行过滤:created
、restarting
、running
、paused
或exited
。要查看exited
容器的列表,使用-f
标志基于状态进行过滤。当您确认要删除这些容器时,使用-q
将ID传递给docker rm
命令:
列表:
删除:
使用多个过滤器删除容器
Docker 过滤器可以通过重复使用带有额外值的过滤器标志进行组合。这将导致满足任一条件的容器列表。例如,如果您想要删除所有标记为created
(当您使用无效命令运行容器时可能出现的状态)或exited
的容器,您可以使用两个过滤器:
列表:
删除:
根据模式删除容器
您可以使用docker ps
和grep
的组合来查找与模式匹配的所有容器。当您满意您要删除的列表时,您可以使用awk
和xargs
来向docker rm
提供ID。请注意,这些实用程序不由Docker提供,并且不一定在所有系统上都可用:
列表:
删除:
停止并移除所有容器
您可以使用docker ps
命令查看系统上的容器。添加-a
标志将显示所有容器。当您确定要删除它们时,可以添加-q
标志以向docker stop
和docker rm
命令提供ID:
列表:
移除:
移除卷
移除一个或多个特定卷
使用docker volume ls
命令查找要删除的卷名称或名称。然后,您可以使用docker volume rm
命令移除一个或多个卷:
列表:
移除:
删除悬挂卷
卷存在的意义在于它们与容器无关联,因此当容器被删除时,卷不会自动被删除。当一个卷存在但不再与任何容器连接时,它被称为悬挂卷。要定位它们以确认您要删除它们,您可以使用docker volume ls
命令,并使用过滤器将结果限制为悬挂卷。当您满意列表时,可以使用docker volume prune
将它们全部删除:
列表:
删除:
删除容器及其卷
如果您创建了一个未命名的卷,可以使用-v
标志将其与容器同时删除。请注意,这仅适用于未命名卷。当容器成功删除时,会显示其ID。请注意,没有提及卷的删除。如果它没有命名,它会被静默从系统中删除。如果它被命名,它会保持静默存在。
删除:
结论
本指南涵盖了一些用于使用Docker删除图像、容器和卷的常见命令。还有许多其他组合和标志可与每个命令一起使用。要获取可用内容的全面指南,请参阅Docker文档中的docker system prune
,docker rmi
,docker rm
和docker volume rm
。如果您想在指南中看到常见的清理任务,请在评论中提问或提出建议。
要详细了解Docker容器的不同组件,请查看Docker生态系统:常见组件简介。
Source:
https://www.digitalocean.com/community/tutorials/how-to-remove-docker-images-containers-and-volumes