一、日志管理

删除日志
在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

从根本上解决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 内存 容器限制cpu docker 内存管理_java

 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