shell清理docker镜像
节点属于k8s 排除掉k8s组件镜像和正在使用的镜像 以及4周之内的镜像 其他均会删除.
日志文件生成再当前目录的log/下
#镜像清理脚本 bash imageClear.sh 即可 日志文件在当前目录的./log下
#!/bin/bash
logDir=/log/imageClear.log
function getUseImage() {
useImage=`docker ps -a |awk '{print $2}'|grep -vE 'dataset|pause|inspur|3f7a0|830a8|23c8a|ID|c1857|bf8c2ac'|sort -r|uniq`
}
function getAllImage() {
allImage=`docker images |grep -vE 'ID|hours|days|\s[1-4]+\syears|\s[1-4]+\sweeks'|awk '{print $1":"$2" ----> 创建时间:"$4" "$5" "$6}'`
}
function compare(){
#pattern='^[a-z0-9]{12}$' #舍弃
while IFS= read -r imageName ;do
tagName=`docker images |grep $imageName |awk '{print $1":"$2}'`
result=`echo $tagName |wc -l`
if [[ $result -gt 1 ]];then
conId=`docker ps -a |grep $imageName|grep UP|awk '{print $1}'`
while IFS list ;do
useImageId=`docker inspect $conId|grep -m 1 sha256|awk -F\" '{print $4}'`
tagImageId=`docker inspect $list|grep Id|awk -F\" '{print $4}'`
if [[ $useImageId -eq $tagImageId ]];then
tagName=$list
break
fi
done <<< "$tagName"
fi
allImage=`echo "$allImage"|grep -v $tagName`
delImage="$allImage"
done <<< "$useImage"
}
function clearImage (){
while IFS= read -r imageName;do
if [[ -z $imageName ]];then
echo "`date +'%Y-%m-%d %H:%M:%S'` -- ERROR -- $HOSTNAME节点无可清理镜像,请联系相关人员清理无用数据。" | tee -a $logDir
else
docker rmi `echo "$imageName" |awk -F '---->' '{print $1}'` > /dev/null
if [[ $? -eq 0 ]];then
diskOcc=`df -h |grep -m 1 docker |awk '{print $5}'`
echo "`date +'%Y-%m-%d %H:%M:%S'` -- INFO -- $HOSTNAME节点清理镜像$imageName,清理后磁盘占用百分比为: $diskOcc 。" | tee -a $logDir
else
echo "`date +'%Y-%m-%d %H:%M:%S'` -- ERROR -- $HOSTNAME节点清理镜像$imageName失败,该镜像可能被引用。" | tee -a $logDir
fi
fi
done <<< "$delImage"
}
function main (){
getUseImage
getAllImage
compare
clearImage
}
main