随着越来越多的应用部署在 Docker 容器中,可能你也和很多人一样,遇到了磁盘空间使用“高到让人绝望”的情况。明明没有太多数据,df -h 却警告你磁盘快满了?今天,我们就来揭开这一现象背后的秘密!
83% 磁盘使用率?——看似爆表的背后,究竟藏了什么猫腻?
如果你打开终端,运行了一个 df -h,看到满满的像是 overlay 和 shm 文件系统,Docker 看起来占用了无穷多的磁盘空间,但你却不知道为什么。这种现象主要有以下几个原因:
1.系统保留空间“偷偷”藏起来:
Linux 文件系统(尤其是 ext4)默认会为超级用户保留 5% 的磁盘空间。你可能没怎么使用磁盘,但 df -h 显示的 83% 已经包含了这部分“隐藏”的空间。
解决方法:
可以通过 tune2fs 命令减少保留空间的百分比。例如,将其从默认的 5% 减少到 1%,立即释放数十 GB 空间:
tune2fs -m 1 /dev/mapper/isw_dbc...Volume01
2.删除的文件仍然占用磁盘空间:
可能你删除了不需要的 Docker 容器或镜像,但磁盘空间依然没有释放!这是因为某些进程可能仍在使用已删除的文件。
解决方法:
可以通过以下命令找到那些被删除但仍在使用的文件:
lsof | grep deleted
如果有这样的文件,可能需要重启相关的进程或 Docker 服务才能释放空间。
揭秘 Docker 的“空间大胃王”——Overlay 文件系统的双面生活
Docker 的 overlay 文件系统虽然极大地方便了容器的快速启动和共享,但也悄悄吞噬了大量磁盘空间。这是由于 overlay 会为每个容器创建一个独立的分层文件系统,当这些层数增加时,就会造成磁盘占用率飙升。
怎么清理“偷吃”的磁盘空间?
1.清理无用的容器和镜像:
很多时候,旧的容器、无用的镜像、无关紧要的卷会成为磁盘的主要消耗者。你可以使用以下命令一次性清理掉所有未使用的资源:
docker system prune -a
docker volume prune
2.查看 Docker 实际占用的空间:
想知道 Docker 实际吃掉了多少空间?运行 docker system df 可以一目了然:
docker system df
让你的 Docker 更高效:限制日志和数据增长
除了清理无用的容器,Docker 容器的日志文件也会随着时间变得庞大,甚至悄悄吞噬掉你的磁盘空间。默认情况下,Docker 没有对日志大小进行限制,导致日志无限制增长。
如何限制 Docker 日志大小?
你可以通过设置 log-opt 来限制每个容器的日志大小,避免日志暴涨:
--log-opt max-size=100m
--log-opt max-file=3
这样,Docker 日志文件就不会无休止地膨胀,节省下的空间还你一片“清静”。
压榨每一块磁盘的最后一丝空间:迁移 Docker 数据目录
如果你还有额外的磁盘或者大容量分区,可以考虑将 Docker 的数据存储路径(默认在 /var/lib/docker)迁移到更大的分区上。这样即便容器大量写入数据,也不会影响系统盘的空间。
迁移步骤简单易行:
1. 停止 Docker 服务:
systemctl stop docker
2. 将 /var/lib/docker 数据目录移动到新分区:
mv /var/lib/docker /new_disk/docker
3. 修改 Docker 配置文件 /etc/docker/daemon.json,指定新的数据目录:
{
"data-root": "/new_disk/docker"
}
4.启动 Docker 服务:
systemctl start docker
结语:不要再让磁盘空间成为隐形杀手
我们常常忽略了 Docker 带来的潜在磁盘空间问题,直到空间警告“啪啪啪”地跳出来。通过本文提到的几种方法,你可以有效控制磁盘使用情况,避免系统崩溃的风险。
定期清理、控制日志、迁移数据存储路径,才能让我们的 Docker 容器跑得又稳又轻松。让你的磁盘空间回到“应有的宽敞”,不再被 83% 的使用率困扰!
小技巧:如果想彻底了解 Docker 磁盘占用情况,还可以使用 docker system df -v 查看更详细的空间使用报告,包括每个镜像、卷和容器的具体占用情况。