# 2021-01-10 #「Docker」- 清理镜像(Prune images)
内容简介
本文将简单介绍如何“清理”Docker镜像,以释放系统资源(磁盘),以及Docker镜像到底应该如何删除。
什么是「清理镜像」?
我们讨论的是“清理”,而不是“删除”。这二者有什么区别呢?
“删除”更倾向于一个特定的移除动作。比如,删除某个镜像,删除某个标签。我们通常使用docker rmi命令来删除镜像。
“清理”更加的倾向于资源的释放。比如,删除某些未使用的镜像,以释放系统存储空间。可以使用docker image prune命令来清理镜像。
两个词语
# 什么是「未用镜像」?
「未用镜像」表示尚未在容器中分配或使用它。例如,当运行docker ps -a时,该命令将列出所有已退出以及当前正在运行的容器。在任何容器中使用的任何镜像都是“使用过的镜像”,而那些从未被创建过容器的镜像就是「未用镜像」。
# 什么是「悬空镜像」?
官方并没有给出明确的定义(可能是我没找到),但是根据各路大佬的描述和各种实验,「悬空镜像」有如下特征:
- 没有被其他镜像引用
- 在docker images的输出中,列TAG为<none>值
- 在docker images的输出中,列REPOSITORY为可能有值
「悬空镜像」是与任何有标签镜像无关的层。它们不再有用,除了占用磁盘空间。
查看「悬空镜像」命令:
#!/bin/sh docker images --filter dangling=true
下面是「悬空镜像」示例:
REPOSITORY TAG IMAGE ID CREATED SIZE <none> <none> 7848fcc70e7b 4 days ago 362MB
其他镜像不会引用「悬空镜像」,因此可以安全的删除「悬空镜像」。
清理镜像
使用docker image prune命令可以清除「悬空镜像」。
使用docker image prune -a命令可以清除「悬空镜像」以及「未用镜像」。
相关链接
除了镜像需要清理之外,容器、卷、网络都需要清理,可以参考「Prune unused Docker objects」文档。
参考文献
- WikiNotes/清理镜像(Prune images)
- docker docs/Reference/docker image prune
- What is a dangling image and what is an unused image?
- docker docs/Reference/docker image prune
- Docker Tip #31: How to Remove Dangling Docker Images
- What are Docker <none>:<none> images?