1、docker部署后修改数据存放目录,默认存放到/var/lib/docker下面,修改到一个大的空间目录下面。参考我的另外一篇博客:https://www.cnblogs.com/cuishuai/p/9485939.html
2、docker空间占用分析
通常使用docker部署服务,使用一段时间后发现磁盘空间占用的很快,经排查发现占用最高的就是docker,发现一些比较老的image和废弃不用的container的volume没有清理造成的。由于只关注了docker的发布,却忽略了docker清理工作。长此以往容易导致服务器磁盘被塞满,从而部署的docker服务不可用,后果非常严重。所以就需要定期的清理一些没有用的过期资源。
docker提供了一个cli命令可以方便的查看docker具体咋用磁盘情况:
#docker system df
可以看到,docker system df 命令给出了images、containers、volumes、build cache占用磁盘的大小。最后一列RECLAIMABLE,表示可回收的空间大小。
使用docker system df -v,可以显示更详细的信息:
知道空间占用情况了,结下来就是做清理工作。
docker提供了docker system prune来清理停掉的container、悬挂的image(没有tag)、没有使用的network、数据卷。
当然有个-a参数,可以清理所有的东西,包括没有使用的镜像(谨慎使用)。:
使用清理命令之前,一定要先确定container、image是否可以被删除。
参考:https://docs.docker.com/engine/reference/commandline/system_prune/
根据时间和label过滤。
3、感觉这种方式有的时候不能满足需求,不是很灵活,所以写了一个脚本用来清理镜像:
cat dockerImageClean.sh
#!/bin/bash # docker clean tp=`df -h | grep \/dev\/vdb | awk '{print $5}' | tr -d %` t1=`docker images | grep -E "10.10.*sensors-log" |awk 'NR > 4 {printf "%s\n",$3}'` t2=`docker images | grep -E "10.10.*satrun " |awk 'NR > 4 {printf "%s\n",$3}'` deleteImage() { if [ $tp -ge 50 ];then for i in $1 do docker rmi -f $i #echo $i done fi } #delete sensors-log and sensors-logagent for i in $t1 do deleteImage $i done #delete saturn for j in $t2 do deleteImage $j done
磁盘使用率超过50%后,保留最新的5个镜像,其他的都删掉。