docker - 容器磁盘空间管理
一、日志管理
删除日志
在linux上,容器日志一般存放在 /var/lib/docker/containers/container_id/ 下, 以json.log结尾,找到这些文件,删除即可,需要注意的是如果容器处在运行状态,使用 rm -rf 方式删除日志后,通过 df -h 会发现磁盘空间并没有释放,原因是在Linux或者Unix系统中,通过 rm -rf 或者文件管理器删除文件,将会从文件系统的目录结构上解除链接(unlink);如果文件此时是被打开的(有一个进程正在使用),那么进程将仍然可以读取该文件,磁盘空间也一直被占用;所以通过rm -rf删除日志时需要重启docker,以释放资源,这样非常不方便。
所以清理docker日志的正确方法是
cat /dev/null > *-json.log
脚本:
#!/bin/sh echo "======== start clean docker containers logs ========" logs=$(find /var/lib/docker/containers/ -name *-json.log) for log in $logs do echo "clean logs : $log" cat /dev/null > $log done echo "======== end clean docker containers logs ========"
从根本上解决Docker容器日志空间占用问题#
通过以上两种方式清理之后,随着时间的推移,容器日志又会逐渐增大,可谓指标不治本,要从根本上解决问题,需要限制容器服务的日志大小上限;这个通过修改docker的配置文件来实现
在docker的配置文件/etc/docker/daemon.json(默认路径)中添加以下内容即可
"log-opts": {
"max-size": "500m",
"max-file": "3"
}
max-size=500m,意味着一个容器日志大小上限是500M
max-file=3,意味着一个容器有三个日志,分别是id+.json、id+1.json、id+2.json
重启docker进程
systemctl daemon-reload
systemctl restart docker
需要注意的是在这里设置的日志大小,只对新建的容器有效,也就是我们需要重新创建容器才可以实现该配置的生效。
二、磁盘空间管理
docker system df命令,类似于Linux上的df命令,用于查看Docker的磁盘使用情况:
docker system prune命令可以用于清理磁盘,删除关闭的容器、无用的数据卷和网络,以及dangling镜像(即无tag的镜像)。docker system prune -a命令清理得更加彻底,可以将没有容器使用Docker镜像都删掉。注意,这两个命令会把你暂时关闭的容器,以及暂时没有用到的Docker镜像都删掉了……所以使用之前一定要想清楚吶。
删除所有关闭的容器:
docker ps -a | grep Exit | cut -d ' ' -f 1 | xargs docker rm
删除所有dangling镜像(即无tag的镜像):
docker rmi $(docker images | grep "^<none>" | awk "{print $3}")
删除所有dangling数据卷(即无用的Volume):
docker volume rm $(docker volume ls -qf dangling=true)
参考:
http://dockone.io/article/3056
https://www.cnblogs.com/wiseo/p/13035896.html
posted on 2021-09-08 09:34 TrustNature 阅读(410) 评论(0) 编辑 收藏 举报