docker空間管理之清理磁盤占用


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM