
类型:虚拟化技术
简介:基于操作系统层级的虚拟化技术,将软件与其依赖项打包为容器。
随着Docker使用时间增长,服务器中会不断积累大量无用资源,包括停止的容器、未使用镜像、构建缓存以及无效数据卷等。这些资源长期占用磁盘空间,可能导致服务器存储不足,甚至影响正在运行的业务。
Docker虽然提供了资源管理命令,但默认不会自动删除历史镜像和缓存。如果服务器长期运行多个项目,尤其是频繁构建镜像的开发环境,磁盘占用增长会更加明显。
本文将介绍Docker磁盘空间占用原因,以及如何使用docker system prune、定时任务等方式安全清理无用资源,帮助管理员维护Docker服务器存储空间。
Docker为什么会占用大量磁盘空间?
Docker运行过程中会产生多种资源:
| 类型 | 说明 |
|---|---|
| 镜像(Images) | 用于创建容器的模板文件 |
| 容器(Containers) | 已停止但未删除的容器 |
| 数据卷(Volumes) | 保存应用数据 |
| 构建缓存(Build Cache) | Docker Build产生的缓存 |
| 网络(Networks) | 创建但未使用的网络 |
查看Docker整体空间占用:
docker system df
输出示例:
TYPE TOTAL ACTIVE SIZE
Images 15 5 8GB
Containers 20 3 2GB
Local Volumes 10 6 5GB
Build Cache 3GB
可以看到不同Docker资源占用的磁盘空间。
查看Docker详细占用情况
查看镜像占用
docker images
查看所有镜像:
docker images -a
删除无用镜像:
docker rmi 镜像ID
查看所有容器
查看运行中的容器:
docker ps
查看所有容器:
docker ps -a
删除停止状态容器:
docker rm 容器ID
查看数据卷
查看所有数据卷:
docker volume ls
查看未使用的数据卷:
docker volume ls -f dangling=true
删除无用数据卷:
docker volume prune
注意:
数据卷可能保存数据库、上传文件等重要数据,删除前需要确认。
使用docker system prune清理无用资源
Docker提供了统一清理命令:
docker system prune
执行后会清理:
- 已停止容器;
- 未使用网络;
- 悬空镜像;
- 构建缓存。
执行过程中会提示确认:
WARNING! This will remove:
- stopped containers
- networks not used by at least one container
- dangling images
- build cache
输入:
y
即可执行。
深度清理Docker资源
如果服务器空间不足,可以使用:
docker system prune -a
相比普通清理:
docker system prune
增加:
- 删除所有未使用镜像;
- 删除没有被容器引用的镜像版本。
执行前建议确认:
docker images
避免删除后续还需要使用的镜像。
清理Docker构建缓存
频繁执行:
docker build
会产生大量Build Cache。
查看缓存:
docker builder prune
清理缓存:
docker builder prune -a
适用于:
- CI/CD服务器;
- 测试环境;
- 频繁构建镜像的开发服务器。
清理Docker日志文件
Docker容器日志也可能占用大量空间。
查看日志目录:
du -sh /var/lib/docker/containers/*
如果发现单个日志文件过大,可以限制日志大小。
编辑Docker配置:
vim /etc/docker/daemon.json
添加:
{
"log-driver": "json-file",
"log-opts": {
"max-size": "100m",
"max-file": "3"
}
}
参数说明:
| 参数 | 说明 |
|---|---|
| max-size | 单个日志最大大小 |
| max-file | 保留日志文件数量 |
重启Docker:
systemctl restart docker
设置Docker自动清理任务
对于长期运行的服务器,可以使用定时任务自动清理。
编辑:
crontab -e
添加:
0 3 * * 0 docker system prune -f
表示:
每周日凌晨3点自动清理无用Docker资源。
如果需要清理更多内容:
0 3 * * 0 docker system prune -af
注意:
生产服务器不建议直接自动执行深度清理,需要提前确认镜像管理策略。
Docker清理注意事项
不要随意删除数据卷
数据卷可能包含:
- MySQL数据库;
- Redis持久化数据;
- 用户上传文件。
删除前检查:
docker volume inspect 数据卷名称
生产环境建议保留镜像版本
例如:
不要:
mysql:latest
建议:
mysql:8.0
固定版本方便:
- 回滚;
- 排查问题;
- 环境一致。
清理前先查看空间
执行:
docker system df
确认:
- 哪些资源占用空间;
- 是否存在大量无用镜像。
Docker磁盘空间优化建议
生产环境建议:
- 定期查看Docker空间:
docker system df
- 开启日志轮转;
- 删除长期不用镜像;
- 固定镜像版本;
- 定期备份数据卷;
- 使用监控工具观察磁盘变化。

