前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。
介绍
Docker 可以轻松地将应用程序和服务封装在容器中,以便在任何地方运行。然而,在使用 Docker 的过程中,很容易积累大量未使用的镜像、容器和数据卷,这些会使输出杂乱,并占用磁盘空间。
Docker 提供了所有必要的工具,可以通过命令行清理系统。这个速查表样式的指南提供了一个快速参考,列出了一些有用的命令,用于释放磁盘空间,并通过删除未使用的 Docker 镜像、容器和卷来保持系统的组织。
如何使用本指南:
- 本指南采用速查表格式,包含独立的命令行片段。
- 可直接跳转到与您要完成的任务相关的任何部分。
注意
如果您希望一键部署 Docker 应用程序到实时服务器,请查看 DigitalOcean App Platform。
清理所有未使用或悬空的镜像、容器、卷和网络
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 镜像由多个层组成。悬空镜像是指与任何已标记镜像没有关联的层。它们不再起作用,并占用磁盘空间。可以通过向 docker images
命令添加过滤标志 -f
,值为 dangling=true
来定位它们。当您确定要删除它们时,可以使用 docker image prune
命令:
列表:
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)
删除容器
删除一个或多个特定的容器
使用 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
定位容器,并根据它们的状态进行过滤:created
、restarting
、running
、paused
或 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
和 grep
的组合来查找与模式匹配的所有容器。当您确定要删除的列表时,您可以使用 awk
和 xargs
将 ID 提供给 docker rm
。请注意,这些实用程序不是由 Docker 提供的,并且不一定在所有系统上都可用:
列表:
docker ps -a | grep "pattern”
删除:
docker ps -a | grep "pattern" | awk '{print $1}' | xargs docker rm
停止并删除所有容器
您可以使用 docker ps
来查看系统上的容器。添加 -a
标志将显示所有容器。当您确定要删除它们时,您可以添加 -q
标志将 ID 提供给 docker stop
和 docker 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 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 生态系统:常见组件简介》。