shell清理docker镜像脚本

本文介绍了一个用于清理Kubernetes节点上非K8s组件镜像、未使用及过期镜像的Bash脚本(imageClear.sh),脚本会生成日志文件,记录清理过程中的信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值