
Docker空间清理是容器化运维的基础,可以防止磁盘耗尽引发服务宕机或构建失败,同时降低存储成本、提升CLI响应与备份迁移效率,并通过移除含漏洞的废弃镜像减少安全攻击面,保障系统的稳定性、经济性与安全性。
一、查看 Docker 占用
在动手清理之前,首先要搞清楚问题的具体构成, docker system df 命令能清晰地展示 Docker 各个组件的磁盘使用情况:
docker system df
执行后,会看到类似如下的输出:
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 10 3 5.2GB 4.1GB (78%)
Containers 5 3 1.1GB 1.1GB (99%)
Local Volumes 8 2 2.3GB 2.0GB (86%)
Build Cache 15 0 800MB 800MB (100%)
关键词的含义是:
- TOTAL: 组件的总数量。
- ACTIVE: 正在被使用的数量(例如,正在运行的容器)。
- SIZE: 组件占用的总磁盘空间。
- RECLAIMABLE: 可回收的空间,也就是可以安全清理的部分 。
除了总体概览,还可以深入查看具体细节:
a. 查看所有镜像(包括悬空镜像)
docker images
b. 专门查看“悬空”(dangling)镜像(无标签,通常可删)
docker images --filter "dangling=true"
c. 查看所有容器(包括已停止的)
docker ps -a
二、清理空间
1. 一键自动清理
使用 docker system prune 命令,它能一次性清理掉所有未被使用的资源。
清理所有停止的容器、未使用的网络、悬空镜像和构建缓存:
sudo docker system prune -f
清理所有未使用的镜像(包括有标签但未被引用的)、容器、网络和数据卷:
sudo docker system prune -a -f --volumes
参数详解:
- -a (--all):不仅删除悬空镜像,还会删除所有未被任何容器引用的镜像(即使它们有标签)。
- --volumes:删除所有未被容器挂载的数据卷。数据卷用于持久化存储,删除前请确保里面没有重要数据 。
- -f (--force):强制执行,无需交互式确认。如果希望在删除前逐项确认,可以去掉这个参数。
重要提示:docker system prune 永远不会影响正在运行的容器及其使用的资源,因此在生产环境中使用也是相对安全的 。
2. 手动精准清理
如果只想清理特定类型的资源,也可以手动操作
仅清理悬空镜像:
docker image prune -f
仅清理未使用的数据卷:
docker volume prune -f
仅清理未使用的网络:
docker network prune -f