在日常使用 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 状态核查,避免误删关键数据。

Leave a Reply

Your email address will not be published. Required fields are marked *