1. 首先,查看所有本地镜像:
docker images
这会列出你本地所有的镜像,包括它们的 REPOSITORY(仓库名)、TAG(标签) 和 IMAGE ID(镜像ID)。
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 20.04 a2e18977a1ca 2 weeks ago 72.8MB
nginx latest 605c77e624dd 3 months ago 141MB
hello-world latest feb5d9fea6a5 12 months ago 13.3kB
2. 根据名称和标签删除:
这是最推荐的方式,因为它精确无误。
# 格式: docker rmi [REPOSITORY]:[TAG]
docker rmi hello-world:latest
3. 根据镜像ID删除:
你也可以使用镜像ID的前几位或完整ID来删除。使用ID的好处是,即使同一个镜像有多个标签,也可以一次性删除。
# 格式: docker rmi [IMAGE_ID]
docker rmi feb5d9fea6a5
注意: 如果该镜像正在被一个或多个容器(即使是停止的容器)使用,你将无法直接删除它,并会收到类似 "image is being used by container..." 的错误。你需要先删除相关的容器(使用 docker rm [CONTAINER_ID])。
方法二:删除所有未被使用的镜像(推荐)
这是一个非常实用的命令,可以安全地删除所有没有被任何容器引用的镜像。这通常能释放大量空间。
docker image prune
执行后,Docker 会列出所有将要被删除的悬空镜像(dangling images,即没有标签的镜像),并询问你是否确认删除。输入 y 并回车即可。
更激进的清理:删除所有未被容器使用的镜像
如果你想删除所有当前没有被任何正在运行或已停止的容器使用的镜像(不仅仅是悬空镜像),可以添加 -a 或 --all 参数。
docker image prune -a
警告: 这个命令会删除很多镜像,请在确认不再需要这些镜像时使用。它会询问你是否继续,输入 y 确认。
方法三:一键清理所有无用资源(终极方案)
如果你想一次性清理所有未被使用的 Docker 资源,包括:
- 停止的容器 (Stopped containers)
- 未被使用的网络 (Unused networks)
- 悬空的镜像 (Dangling images)
- 未被容器使用的构建缓存 (Build cache)
可以使用下面这个“核弹级”命令:
docker system prune
更激进的系统清理:
和 image prune 类似,你可以添加 -a 参数来删除所有未被使用的镜像,而不仅仅是悬空镜像。
docker system prune -a
强烈警告: 这是一个非常强大的清理命令,会删除大量数据。请务必在确认这些资源都不再需要时才执行。它同样会在执行前要求你确认。
总结与建议
| 命令 | 作用 | 安全性 | 推荐场景 |
|---|---|---|---|
docker rmi [镜像名/ID] |
删除指定的一个或多个镜像 | 高(精确控制) | 只删除一两个确定不用的镜像。 |
docker image prune |
删除所有悬空镜像(无标签) | 高(通常是构建过程中产生的垃圾) | 日常维护,定期清理构建残留。 |
docker image prune -a |
删除所有未被容器使用的镜像 | 中(可能误删未来有用的镜像) | 磁盘空间紧张,且确认可以重新拉取镜像。 |
docker system prune |
删除所有未被使用的容器、网络、悬空镜像和构建缓存 | 中(会删除停止的容器) | 彻底清理环境,释放大量空间。 |
docker system prune -a |
删除所有未被使用的容器、网络、所有未被使用的镜像和构建缓存 | 低(最激进的清理) | 准备放弃当前项目环境,或在测试环境中使用。 |
给初学者的建议:
-
日常清理:从
docker image prune开始,这是最安全有效的日常维护命令。 -
空间严重不足:如果
docker image prune释放的空间不够,可以尝试docker system prune。 -
删除特定镜像:如果你知道某个镜像肯定没用了,直接用
docker rmi删除它。