github编辑

删除本地镜像

当不再需要某个镜像时,我们可以将其删除以释放存储空间。本节介绍删除镜像的常用方法。

基本用法

使用 docker image rm 删除本地镜像:

$ docker image rm [选项] <镜像1> [<镜像2> ...]

💡 docker rmidocker image rm 的简写,两者等效。


镜像标识方式

删除镜像时,可以使用多种方式指定镜像:

方式
说明
示例

短 ID

ID 的前几位(通常 3-4 位)

docker rmi 501

长 ID

完整的镜像 ID

docker rmi 501ad78535f0...

镜像名:标签

仓库名和标签

docker rmi redis:alpine

镜像摘要

精确的内容摘要

docker rmi nginx@sha256:...

使用短 ID 删除

运行以下命令:

$ docker image ls
REPOSITORY   TAG     IMAGE ID       SIZE
redis        alpine  501ad78535f0   30MB
nginx        latest  e43d811ce2f4   142MB

## 只需输入足够区分的前几位

$ docker rmi 501
Untagged: redis:alpine
Deleted: sha256:501ad78535f0...

使用镜像名删除

运行以下命令:

使用摘要删除

摘要删除最精确,适用于 CI/CD 场景:


理解输出信息

执行删除命令后,Docker 会输出一系列的操作记录,理解这些信息有助于我们掌握镜像删除的机制。

删除镜像时会看到两类信息:UntaggedDeleted

Untagged vs Deleted

操作
含义

Untagged

移除镜像的标签

Deleted

删除镜像的存储层

删除流程

删除流程

Docker 会检测镜像是否有容器依赖或其他标签指向,只有在确认为无用资源时才会真正删除存储层。


批量删除

手动一个一个删除镜像非常繁琐,Docker 提供了 image prune 命令和 shell 组合命令来实现批量清理。

删除所有虚悬镜像

虚悬镜像(dangling):没有标签的镜像,通常是旧版本被新版本覆盖后产生的

删除所有未使用的镜像

运行以下命令:

按条件删除

运行以下命令:


删除失败的常见原因

在删除镜像时,Docker 可能会提示错误并拒绝执行。这通常是为了防止误删正在使用的资源。

原因一:有容器依赖

运行以下命令:

解决方案

原因二:多个标签指向同一镜像

运行以下命令:

原因三:被其他镜像依赖(中间层)

运行以下命令:

中间层镜像被其他镜像依赖,无法删除。需要先删除依赖它的镜像。


常用过滤条件

过滤条件
说明
示例

dangling=true

虚悬镜像

-f dangling=true

before=镜像

在某镜像之前

-f before=mongo:3.2

since=镜像

在某镜像之后

-f since=mongo:3.2

label=key=value

按标签过滤

-f label=version=1.0

reference=pattern

按名称模式

-f reference='*:latest'


清理策略

针对不同的环境(开发环境 vs 生产环境),我们应该采用不同的镜像清理策略。

开发环境

运行以下命令:

CI/CD 环境

运行以下命令:

查看空间占用

运行以下命令:


本章小结

操作
命令

删除指定镜像

docker rmi 镜像名:标签

强制删除

docker rmi -f 镜像名

删除虚悬镜像

docker image prune

删除未使用镜像

docker image prune -a

批量删除

docker rmi $(docker images -q -f ...)

查看空间占用

docker system df

延伸阅读

最后更新于