在日常使用 Docker 的过程中,随着容器的频繁构建与销毁,系统中往往会积累大量未使用的镜像和卷,占据宝贵的磁盘空间。为了保持系统的整洁和高效运行,有必要定期清理这些无用资源。文章基于一次实际操作,系统地介绍了如何安全识别并清理未使用的 Docker 镜像与卷。
一、环境信息
- 操作系统:Ubuntu
- Docker CLI:原生命令行工具
- 管理界面:Docker Web UI
二、目标
只清理未被任何容器使用的镜像和卷,避免影响正在运行的服务或数据。
三、查看资源使用情况
使用以下命令快速掌握当前 Docker 系统资源分布:
docker system df
示例输出:
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 43 31 24.48GB 11.41GB (46%)
Containers 31 31 1.665GB 0B (0%)
Local Volumes 57 21 12.84GB 2.025GB (15%)
Build Cache 22 0 344.4MB 344.4MB
该输出显示存在大量未使用镜像和卷,具有明显的清理空间。
四、查找未使用的镜像和卷
1. 未使用镜像
利用命令查看未被任何容器使用的镜像:
docker image ls -a --filter dangling=true
或查看可以清除的镜像:
docker image prune -a
基于实际运行,当前环境中存在与容器无关的镜像,总共见于 11 GB左右,经确认后可以使用以下命令完成清除:
docker image prune -a -f
此操作将删除全部未被容器使用的镜像,安全无影响环境中正在运行的服务。
2. 未使用卷
查看未被挂载的 volume:
docker volume ls -f "dangling=true"
执行清理:
docker volume prune -f
五、清理结果对比与核查
执行清理命令后,再次查看资源状态:
docker system df
清理前:
- 未使用卷:36 个(约2 GB)
- 未使用镜像:12 个(约11 GB)
清理后:
- 实际删除卷数:30 个
- 实际删除镜像:12 个
- 剩余未删卷:6 个
选中的卷由 Docker 输出为 “dangling=true”,但部分卷属于 Docker Stack 管理或被隐性引用,因此被留下。
六、构建缓存清理(可选)
Docker 构建过程会产生中间层缓存,占用磁盘。如果不再重构已有镜像,可安全删除:
docker builder prune -f
七、安全注意事项
volume prune:不会删除被任何容器使用的 volume- 命名 volume 与服务数据库等关联系统或服务时,删除前必须核查是否已弃用
- Web UI 状态只作参考,以 CLI 输出或
docker inspect为准
八、最终系统状态示例
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 31 31 13.73GB 656.5MB (4%)
Containers 31 31 1.665GB 0B (0%)
Local Volumes 21 21 10.81GB 0B (0%)
Build Cache 22 0 344.4MB 344.4MB
九、总结
通过定期清理 Docker 环境中未使用的镜像和卷,可以释放大量磁盘空间,保持系统高效运行。建议将以下命令放入脚本,配合 cron 实现定期维护:
docker image prune -a -f
docker volume prune -f
docker builder prune -f
确保清理前做好 volume 状态核查,避免误删关键数据。