4.3 删除本地镜像
当不再需要某个镜像时,我们可以将其删除以释放存储空间。本节介绍删除镜像的常用方法。
4.3.1 基本用法
使用 docker image rm 删除本地镜像:
$ docker image rm [选项] <镜像1> [<镜像2> ...]💡
docker rmi是docker image rm的简写,两者等效。
4.3.2 镜像标识方式
删除镜像时,可以使用多种方式指定镜像:
短 ID
ID 的前几位(通常 3-4 位)
docker rmi 501
长 ID
完整的镜像 ID
docker rmi 501ad78535f0...
镜像名:标签
仓库名和标签
docker rmi redis:7.0
镜像摘要
精确的内容摘要
docker rmi nginx@sha256:...
版本提示:建议使用 镜像名:标签 的方式删除,特别是当需要明确清理特定版本的镜像时。例如
docker rmi redis:7.0比docker rmi redis:latest更清晰且安全。
使用短 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 场景:
4.3.3 理解输出信息
执行删除命令后,Docker 会输出一系列的操作记录,理解这些信息有助于我们掌握镜像删除的机制。
删除镜像时会看到两类信息:Untagged 和 Deleted
Untagged vs Deleted
Untagged
移除镜像的标签
Deleted
删除镜像的存储层
删除流程
Docker 会检测镜像是否有容器依赖或其他标签指向,只有在确认为无用资源时才会真正删除存储层。
4.3.4 批量删除
手动一个一个删除镜像非常繁琐,Docker 提供了 image prune 命令和 shell 组合命令来实现批量清理。
删除所有虚悬镜像
虚悬镜像 (dangling):没有标签的镜像,通常是旧版本被新版本覆盖后产生的
删除所有未使用的镜像
按条件删除
4.3.5 删除失败的常见原因
在删除镜像时,Docker 可能会提示错误并拒绝执行。这通常是为了防止误删正在使用的资源。
原因一:有容器依赖
解决方案:
原因二:多个标签指向同一镜像
当同一个镜像有多个标签时,docker rmi 只是删除指定的标签,不会删除镜像本身。
原因三:被其他镜像依赖:中间层
中间层镜像被其他镜像依赖,无法删除。需要先删除依赖它的镜像。
4.3.6 常用过滤条件
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'
4.3.7 清理策略
针对不同的环境(开发环境 vs 生产环境),我们应该采用不同的镜像清理策略。
开发环境
CI/CD 环境
查看空间占用
最后更新于