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個鏡像,其他的都刪掉。
