12345678910111213141516171819202122232425262728293031323334#!/usr/bin/env bash#删除过期镜像,保留最新${retain}个版本(需要确保版本号确实是越新的越大)retain=1cdate=$(date '+%Y-%m-%d_%H:%M:%S')# 镜像中的关键字keyword="docker.io"# 先删除异常停止的docker容器docker rm -f $(docker ps -a | grep Exited | awk '{print $1}')# 先删除名称或标签为none的镜像docker rmi -f $(docker images | grep '<none>' | awk '{print $3}')for service in $(docker images | grep "${keyword}" | awk '{print $1}')do # 查看当前服务有多少镜像 count=$(docker images | grep -c "$service") # 如果当前服务的镜像数大于保留数,则进行删除 if [[ $count -gt $retain ]];then # 当modifyCount=count-retain则停止删除镜像 modifyCount=0 # tag的分割符"v",然后取后面的数字进行正序排序(screw-db:v100) for i in $(docker images | grep "$service" | awk '{print $2}' | awk -F'v' '{print $2}' | sort -u) do # 当modifyCount=count-retain则停止删除镜像 if [ $modifyCount -eq $(( count - retain )) ]; then break fi # 拼接版本: v100 version=$(docker images | grep "$service" | awk '{print $2}' | grep "$i") docker rmi -f "$service":"${version}" echo "docker rmi $service:${version} 执行时间:$cdate" >> ~/log_delete_images.log # 自增加1 modifyCount=$((modifyCount + 1)) done fidone