Docker 占用空间监控
1. 概述
Docker 在长期使用过程中会积累大量的镜像、容器、数据卷和构建缓存,占用大量磁盘空间。定期监控和清理 Docker 磁盘占用是系统维护的重要工作。
主要占用来源
- 镜像(Images):下载的 Docker 镜像文件
- 容器(Containers):运行或已停止的容器及其读写层
- 数据卷(Volumes):持久化存储的数据
- 构建缓存(Build Cache):构建镜像时产生的缓存文件
2. 查看磁盘使用情况
2.1 查看整体磁盘使用
docker system df
输出示例:
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 10 5 2.5GB 1.2GB (48%)
Containers 15 3 150MB 100MB (66%)
Local Volumes 5 2 500MB 200MB (40%)
Build Cache 20 0 300MB 300MB
2.2 查看详细信息
docker system df -v
此命令会显示镜像、容器和数据卷的详细占用信息。
2.3 查看容器大小
# 查看所有容器及其大小
docker container ls -s# 查看特定容器大小
docker container ls -s <container_id>
3. 空间清理命令
3.1 清理停止的容器
docker container prune
作用: 删除所有处于 stopped 状态的容器。
3.2 清理悬空镜像
docker image prune
作用: 删除 dangling 镜像(没有被任何容器引用的镜像)。
3.3 清理所有未使用的镜像
docker image prune -a
作用: 删除所有未被容器使用的镜像(包括悬空镜像)。
3.4 清理数据卷
docker volume prune
作用: 删除所有未被使用的本地数据卷。
3.5 清理构建缓存
docker builder prune
作用: 删除构建缓存。
3.6 一键清理所有无用数据
docker system prune
作用: 同时清理:
- 停止的容器
- 悬空镜像
- 未使用的网络
- 构建缓存
带数据卷清理:
docker system prune --volumes
注意: 此命令会删除数据卷,请谨慎使用!
4. 自动化监控方案
4.1 脚本监控
创建 Shell 脚本定期检查磁盘使用情况:
#!/bin/bash
# docker_monitor.shTHRESHOLD=80 # 阈值 80%USAGE=$(docker system df | grep Images | awk '{print $5}' | sed 's/%//')if [ "$USAGE" -gt "$THRESHOLD" ]; thenecho "警告:Docker 磁盘使用率超过 ${THRESHOLD}%"# 可添加邮件通知或其他告警方式
fi
4.2 定时任务
设置 cron 定时任务每天检查:
# 编辑 crontab
crontab -e# 添加每日早上 8 点检查
0 8 * * * /path/to/docker_monitor.sh
5. 日志管理
5.1 查看容器日志大小
# 查找日志文件最大的前 10 个容器
for i in $(docker ps -q); dosize=$(du -sh $(docker inspect --format='{{.LogPath}}' $i 2>/dev/null) 2>/dev/null | cut -f1)name=$(docker inspect --format='{{.Name}}' $i 2>/dev/null | sed 's/\///')echo "$size $name"
done | sort -hr | head -10
5.2 配置日志轮转
编辑 Docker 守护进程配置文件 /etc/docker/daemon.json:
{"log-driver": "json-file","log-opts": {"max-size": "10m","max-file": "3"}
}
参数说明:
max-size: 单个日志文件最大 10MBmax-file: 最多保留 3 个日志文件
重启 Docker 使配置生效:
systemctl daemon-reload
systemctl restart docker
6. 最佳实践
6.1 镜像优化
- 使用多阶段构建减小镜像体积
- 定期清理不常用的镜像
- 选择合适的基础镜像(如 alpine)
6.2 容器管理
- 及时清理不再使用的容器
- 使用临时容器进行测试
- 避免在容器层写入大量数据
6.3 数据存储
- 使用挂载卷存储持久化数据
- 定期备份重要数据卷
- 清理无用的数据卷
6.4 构建优化
- 及时清理构建缓存
- 合理使用 .dockerignore 文件
- 优化 Dockerfile 减少层数
7. 注意事项
警告: 执行清理操作前请务必:
- 确认要清理的资源是否重要
- 备份需要的数据和镜像
- 确保不会影响正在运行的服务
建议: 在生产环境执行清理操作前,先在测试环境验证。
8. 常用命令速查表
| 命令 | 说明 | 危险程度 |
|---|---|---|
docker system df |
查看磁盘使用 | 安全 |
docker container prune |
清理停止的容器 | 低 |
docker image prune |
清理悬空镜像 | 低 |
docker image prune -a |
清理所有未使用镜像 | 中 |
docker volume prune |
清理未使用的卷 | 高 |
docker system prune |
一键清理 | 中 |
docker system prune --volumes |
一键清理(含卷) | 非常高 |
9. 参考资料
- Docker 官方文档 - 清理 Docker
- Docker system df 命令详解
