一、磁盘空间
1.使用df -l 命令查看本地文件系统
可以看到大量磁盘空间被docker容器的日志占用
使用docker system df命令,类似于Linux上的df命令,用于查看Docker的磁盘使用情况:
docker system prune命令可以用于清理磁盘,删除关闭的容器、无用的数据卷和网络,以及dangling镜像(即无tag的镜像)。docker system prune -a命令清理得更加彻底,可以将没有容器使用Docker镜像都删掉。注意,这两个命令会把你暂时关闭的容器,以及暂时没有用到的Docker镜像都删掉了……所以使用之前一定要想清楚
执行docker system prune -a
再查看一下,可以看到清理了4G多的磁盘空间
更多有关docker system的命令讲解,详见http://dockone.io/article/2258
接下来,查看docker各个容器的日志空间占用
ls -lh $(find /var/lib/docker/containers/ -name *-json.log)
可以看到其中一个容器的日志占用达到了27G,我们要对他进行清理
清理脚本如下:
!/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 ========"
执行完清理之后,在查看日志使用情况
可以看看到都已经释放完毕。
但是,这样手动清理是治标不治本的方法,过不了几天日志又会增长到几十个G
治本方案:
全局设置
新建/etc/docker/daemon.json,若有就不用新建了。添加log-dirver和log-opts参数,样例如下:
# vim /etc/docker/daemon.json
{
"registry-mirrors": ["http://f613ce8f.m.daocloud.io"],
"log-driver":"json-file",
"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各个容器内存使用情况:docker stats
参考http://www.cnblogs.com/sparkdev/p/7821376.html
docker限制容器内存具体参考:https://www.cnblogs.com/sparkdev/p/8032330.html
具体内存的优化需要根据各个容器实例的具体情况分别,后续会对一些常见容器,如nginx,gitlab ,mysql, mongodb,redis,apollo,elk,consul,webapi,skywalking等等做具体说明。