1. 初识docker system df -v:你的Docker存储健康检查工具
第一次看到docker system df -v这个命令时,我正面临着一个典型的生产环境问题——服务器磁盘空间莫名其妙被占满。当时我像大多数新手一样,第一反应是直接用df -h查看磁盘使用情况,结果发现是/var/lib/docker目录吃掉了80%的空间。这时候一位资深同事走过来,轻飘飘地说了句:"试试docker system df -v,比直接删文件靠谱多了。"
这个命令的输出结果让我眼前一亮。它不仅告诉我Docker占用了多少空间,更重要的是清晰地标出了哪些空间是可以安全回收的。比如那次我发现有15GB的"可回收空间"(RECLAIMABLE),而实际活跃使用的只有5GB,这意味着我不用删除任何正在运行的容器,就能释放10GB的宝贵空间。
docker system df -v的输出分为四个主要部分:
- Images:所有下载的镜像及其占用空间
- Containers:所有容器(包括已停止的)及其存储占用
- Local Volumes:本地持久化卷的使用情况
- Build Cache:构建缓存的大小(Docker 17.05+)
举个例子,这是我最近一次检查的输出:
bash复制TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 15 4 8.7GB 5.2GB (60%)
Containers 8 3 1.1GB 800MB (72%)
Local Volumes 5 2 25GB 3GB (12%)
Build Cache 0B 0B 0B 0B
从这个输出中,我一眼就能看出镜像占用了最多空间(8.7GB),而且有60%是可以回收的。而本地卷虽然总大小很大(25GB),但可回收比例很低,说明大部分数据都是活跃使用的。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 深度解析RECLAIMABLE:你的隐藏存储金矿
很多Docker用户都不知道,当你删除一个容器或镜像时,它们占用的空间并不会立即释放。这就像电脑上删除文件后需要清空回收站一样,Docker也有自己的"回收站机制"。这就是RECLAIMABLE列显示的内容——那些已经被标记删除但还未真正释放的空间。
2.1 RECLAIMABLE的来源分析
在我的实践中,发现可回收空间主要来自三个方面:
1. 悬空镜像(Dangling Images)
这些是已经没有标签的镜像,通常发生在构建新版本镜像后。比如:
bash复制# 构建新镜像后,旧镜像变成<none>
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> 1234567890ab 2 weeks ago 1.2GB
myapp latest 0987654321cd 10 minutes ago 1.1GB
2. 停止的容器
即使容器已经停止,它们仍然占用着可写层空间。我曾经遇到过一个案例:一个开发同事的测试容器占用了20GB空间,虽然容器已经停止但未被删除。
3. 构建缓存
特别是使用多阶段构建时,中间层的缓存可能占用大量空
