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=true
docker images
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
删除所有图像
通过添加-a
到docker 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 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
标志以向docker stop
和docker 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 prune
,docker rmi
,docker rm
和docker volume rm
。如果您希望在指南中看到常见的清理任务,请在评论中提问或提出建议。