「Docker」- 清理镜像(Prune images)

更新日期:2019年08月08日

内容简介

本文将简单介绍如何“清理”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」文档。

参考文献


ToC

内容简介

什么是「清理镜像」?

两个词语

# 什么是「未用镜像」?

# 什么是「悬空镜像」?

清理镜像

相关链接

参考文献