Docker overlay2磁盘占用过高主要有以下三个原因:
1、容器日志文件过大,未作限制
2、docker未用容器、镜像、缓存等过多
3、docker默认路径存放不合理
通过以下两条命令可以定位磁盘占用过高原因,可根据查询结果做相应处置。
[root@hostname ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 50G 50G 35M 100% /
overlay 50G 50G 35M 100% /data/docker/overlay2/770abd1b64f51f05a0f7c5c71d7349f54c9c152c8f58263ea9dda4960a722d61/merged
overlay 50G 50G 35M 100% /data/docker/overlay2/19de54ababc18c2eb4c0d011434ac785480169a4e694c736dcbe938d497b5b3f/merged
overlay 50G 50G 35M 100% /data/docker/overlay2/78f613526719dd1eabd3fe1f383ca55f065182e538f81cb719dd53d01055e849/merged
overlay 50G 50G 35M 100% /data/docker/overlay2/a18694da44feba8f8379f422fdf67c00a1ac97efb281f8578770b7da4d55ad6a/merged
#逐级排查大文件位置
[root@hostname ~]# du -sh /*
7.2G /var
[root@hostname ~]# du -sh /var/*
37G /opt/open
[root@hostname ~]# du -sh /var/lib/*
6.6G /var/lib/docker
docker容器运行时会产生大量日志,默认路径:/var/lib/docker/containers/id-json.log,随着容器运行该日志文件会占用大量磁盘空间。
[root@test ~]# echo '' > 容器id-json.log
注:不要直接删除日志文件,否则可能会影响新日志产生。
以上方法只能暂时解决日志占用空间过大问题,如果想一劳永逸可修改docker配置文件,增加日志文件大小限制。
[root@test ~]# vi /etc/docker/daemon.json
{
"log-driver":"json-file",
"log-opts":{
"max-size" :"50m",
"max-file":"1"
}
}
[root@test ~]# systemctl daemon-reload
[root@test ~]# systemctl restart docker
注:已存在的容器不会生效,需要重建该容器才可以使配置生效
Docker长时间运行,会产生大量无用的镜像、容器、网络等缓存信息,占用大量磁盘空间。此时我们可以使用prune命令清理。
[root@test ~]# docker system prune
WARNING! This will remove:
- all stopped containers //清理停止容器
- all networks not used by at least one container //清理未使用网络
- all dangling images //清理废弃镜像
- all dangling build cache //清理构建缓存
Are you sure you want to continue? [y/N] y
Deleted Containers:
7a7fdd019a89eb68325d45ee6821c3f6f9a0b68b5631a21665ec484d59c8a44a
Total reclaimed space: 202.4kB
注:数据清理前一定要检查是否还有需要使用的容器和镜像,避免误清理。
[root@test ~]# docker image prune //清理废弃镜像
[root@test ~]# docker container prune //清理停止容器
[root@test ~]# docker network prune //清理未使用网络
[root@test ~]# docker system prune //清理构建缓存
注:此方法需停止容器,迁移docker运行目录,请在业务空闲期,备份好数据后操作。
Docker运行时使用的目录默认 “/var/lib/docker”,该目录占用根目录磁盘空间,根目录磁盘容量普遍较小。日常生成环境Linux常会挂载大容量数据盘,可以将Docker默认运行目录修改到数据盘。
修改Docker运行路径有两种方法:
1、迁移/var/lib/docker数据,创建软连接。此种方法不需要改配置文件。
2、迁移/var/lib/docker数据,修改docker配置文件。
#docker运行目录在/var/lib/docker下
[root@test ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
overlay 50G 5.8G 45G 12% /var/lib/docker/overlay2/c9de256d8ded736cf99dddda4c4f68e9c5e5162e1b7e70abdb0cd3fbfbbb7a19/merged
overlay 50G 5.8G 45G 12% /var/lib/docker/overlay2/4e844541eb13d9c7af1c01f0b4681915e617c650c22a20e52f4b77e1e90dc369/merged
overlay 50G 5.8G 45G 12% /var/lib/docker/overlay2/176c72f3913eea50a7bded4ad65363280680615c083140c725cfa63e4287cc51/merged
#停止所有容器,避免迁移时影响业务
[root@test ~]# docker stop $(docker ps -a | awk '{ print $1}' | tail -n +2)
#将docker默认运行目录剪切到opt目录
[root@test ~]# mv /var/lib/docker /opt/
#查询是否已剪切完成
[root@test ~]# ls /opt/
containerd docker hio rh
#新运行目录创建软连接
[root@test ~]# ln -s /opt/docker /var/lib/docker
#重启docker服务
[root@test ~]# systemctl restart docker
#启动所有容器
[root@test ~]# docker start $(docker ps -a | awk '{ print $1}' | tail -n +2)
#检查原镜像是否存在
[root@test ~]# docker images
#检查容器是否运行正常
[root@test ~]# docker ps
#检查docker默认路径是否切换成功,已切换到/opt/docker下
[root@test ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
overlay 50G 5.8G 45G 12% /opt/docker/overlay2/176c72f3913eea50a7bded4ad65363280680615c083140c725cfa63e4287cc51/merged
overlay 50G 5.8G 45G 12% /opt/docker/overlay2/4e844541eb13d9c7af1c01f0b4681915e617c650c22a20e52f4b77e1e90dc369/merged
overlay 50G 5.8G 45G 12% /opt/docker/overlay2/c9de256d8ded736cf99dddda4c4f68e9c5e5162e1b7e70abdb0cd3fbfbbb7a19/merged
#docker运行目录在/var/lib/docker下
[root@test ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
overlay 50G 5.8G 45G 12% /var/lib/docker/overlay2/c9de256d8ded736cf99dddda4c4f68e9c5e5162e1b7e70abdb0cd3fbfbbb7a19/merged
overlay 50G 5.8G 45G 12% /var/lib/docker/overlay2/4e844541eb13d9c7af1c01f0b4681915e617c650c22a20e52f4b77e1e90dc369/merged
overlay 50G 5.8G 45G 12% /var/lib/docker/overlay2/176c72f3913eea50a7bded4ad65363280680615c083140c725cfa63e4287cc51/merged
#停止所有容器,避免迁移时影响业务
[root@test ~]# docker stop $(docker ps -a | awk '{ print $1}' | tail -n +2)
#将docker默认运行目录剪切到opt目录
[root@test ~]# mv /var/lib/docker /opt/
#查询是否已剪切完成
[root@test ~]# ls /opt/
containerd docker hio rh
#修改docker配置文件,添加 "data-root"路径
[root@test ~]# vi /etc/docker/daemon.json
{
"data-root": "/opt/docker"
}
#重启docker服务
[root@test ~]# systemctl daemon-reload
[root@test ~]# systemctl restart docker
#启动所有容器
[root@test ~]# docker start $(docker ps -a | awk '{ print $1}' | tail -n +2)
#检查原镜像是否存在
[root@test ~]# docker images
#检查容器是否运行正常
[root@test ~]# docker ps
#检查docker默认路径是否切换成功,已切换到/opt/docker下
[root@test ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
overlay 50G 5.8G 45G 12% /opt/docker/overlay2/176c72f3913eea50a7bded4ad65363280680615c083140c725cfa63e4287cc51/merged
overlay 50G 5.8G 45G 12% /opt/docker/overlay2/4e844541eb13d9c7af1c01f0b4681915e617c650c22a20e52f4b77e1e90dc369/merged
overlay 50G 5.8G 45G 12% /opt/docker/overlay2/c9de256d8ded736cf99dddda4c4f68e9c5e5162e1b7e70abdb0cd3fbfbbb7a19/merged