```bash
retain_images_tag=6
function main(){
_init_
gave_all_images
gave_file
delete_images_tag_file
delete_file_images
}
function _init_(){
rm -fr $PWD/docker-images
mkdir -p $PWD/docker-images
rm -fr $PWD/delete_images_name.txt
rm -fr $PWD/name_images.txt
rm -fr array_name_images.txt
rm -fr array_detele_tag.txt
rm -fr all_delete_images.txt
}
function gave_all_images(){
echo "$(docker images|grep 192.168.200.17/ |grep -v rancher|grep -v software|grep -v zhms )" > $PWD/docker-images/images.txt
sed -n '2,$p' $PWD/docker-images/images.txt | awk '{print $1}' > $PWD/docker-images/name_images.txt
sort $PWD/docker-images/name_images.txt > $PWD/docker-images/array_name_images.txt
sed -n '2,$p' $PWD/docker-images/images.txt | awk '{print $1 $2}' > $PWD/docker-images/tag_name_images.txt
sed -n '2,$p' $PWD/docker-images/images.txt | awk '{print $1 $2 $3}' > $PWD/docker-images/time_tag_name_images.txt
}
function gave_file(){
test_flag=0
for images_name in $(cat $PWD/docker-images/array_name_images.txt); do
mkdir -p $PWD/docker-images/${images_name}/
touch $PWD/docker-images/${images_name}/tag.txt
echo "==============start当前镜像名 $images_name=============="
if [[ $test_flag -gt 0 ]]; then
if [[ ${images_name_array[$(($test_flag-1))]} != $images_name ]]; then
images_name_array[$test_flag]=$images_name
echo "========== test_flag=$test_flag 存入镜像 images_name_array=${images_name_array[$test_flag]} ============"
echo "$images_name" >> $PWD/delete_images_name.txt
test_flag=$[$test_flag+1]
docker images |grep $images_name | awk '{print $2}' > $PWD/docker-images/${images_name}/tag.txt
sort $PWD/docker-images/${images_name}/tag.txt > $PWD/docker-images/${images_name}/array_tag.txt
fi
else
images_name_array[$test_flag]=$images_name
echo "==========第一次存入镜像 images_name_array=${images_name_array[$test_flag]} ============"
echo "$images_name" >> $PWD/delete_images_name.txt
test_flag=$[$test_flag+1]
docker images |grep $images_name | awk '{print $2}' > $PWD/docker-images/${images_name}/tag.txt
sort $PWD/docker-images/${images_name}/tag.txt > $PWD/docker-images/${images_name}/array_tag.txt
fi
done
}
function delete_images_tag_file(){
for array_images in $(cat $PWD/delete_images_name.txt); do
num_all_row=$( sed -n '$=' $PWD/docker-images/${array_images}/array_tag.txt)
array_images_flag=0
echo -e "\n\n\n"
for array_detele_tag in $(cat $PWD/docker-images/${array_images}/array_tag.txt); do
echo "===需要删除的镜像: $array_images:$array_detele_tag"
if [[ $num_all_row -le $retain_images_tag ]]; then
echo "=========镜像$array_images:tag数目小于设定值,不需要删除======="
break
fi
if [[ $[$num_all_row - $array_images_flag ] -le $retain_images_tag ]]; then
echo "=========镜像删除到预定值不需要继续删除,不在删除======="
break
fi
echo "$array_images:$array_detele_tag" >> $PWD/all_delete_images.txt
array_images_flag=$[$array_images_flag+1]
done
done
}
function delete_file_images()
{
detele_images_row=$( sed -n '$=' $PWD/all_delete_images.txt)
if [[ $detele_images_row -le 0 ]]; then
echo "=================没有需要删除的镜像==================="
exit 0
fi
sed -i '/^ *$/d' $PWD/all_delete_images.txt
for delete_tag_file in $(cat $PWD/all_delete_images.txt); do
echo "====删除镜像 $delete_tag_file==== "
echo " $(docker rmi $delete_tag_file)"
done
}
main
exit 0