使用Shell脚本自动清理Docker镜像

简介:本文介绍了如何使用Shell脚本自动清理Docker镜像,以保持镜像库的整洁和有效利用存储空间。通过获取所有镜像列表并按照创建时间排序,我们可以删除旧的镜像,只保留最近的两个。

#!/bin/bash

# 获取所有镜像列表,并按照创建时间排序
image_list=$(docker image ls --format "{{.Repository}}:{{.Tag}}|{{.CreatedAt}}" | sort -t "|" -k2,2)

# 获取所有镜像名
image_names=$(echo "$image_list" | awk -F ':' '{print $1}' | uniq)

# 遍历每个镜像名
for image_name in $image_names; do
    # 获取特定镜像名的镜像列表
    filtered_images=$(echo "$image_list" | awk -F ':' -v name="$image_name" '$1 == name')

    # 获取镜像数量
    image_count=$(echo "$filtered_images" | wc -l)

    # 如果镜像数量超过3个,则删除旧的镜像,只保留最近的两个
    if [ $image_count -gt 3 ]; then
        images_to_delete=$((image_count - 2))
        images_to_delete_list=$(echo "$filtered_images" | head -n $images_to_delete | cut -d "|" -f 1)

        for image in $images_to_delete_list; do
            docker image rm $image
        done

    fi
done

脚本解释:

  1. 首先,我们使用以下命令获取所有镜像列表,并按照创建时间排序:image_list=$(docker image ls --format "{{.Repository}}:{{.Tag}}|{{.CreatedAt}}" | sort -t "|" -k2,2)
  2. 接下来,我们从这个镜像列表中提取出所有的镜像名,并去重:image_names=$(echo "$image_list" | awk -F ':' '{print $1}' | uniq)
  3. 然后,我们遍历每个镜像名,并对每个镜像名的镜像列表进行处理:for image_name in $image_names; do
        filtered_images=$(echo "$image_list" | awk -F ':' -v name="$image_name" '$1 == name')
        image_count=$(echo "$filtered_images" | wc -l)
  4. 如果某个镜像名对应的镜像数量超过3个,我们需要删除旧的镜像,只保留最近的两个。为了实现这一点,我们首先计算出需要删除的镜像数量:if [ $image_count -gt 3 ]; then
        images_to_delete=$((image_count - 2))
  5. 然后,我们获取需要删除的镜像列表,并逐个执行删除操作:

    images_to_delete_list=$(echo "$filtered_images" | head -n $images_to_delete | cut -d "|" -f 1)

    for image in $images_to_delete_list; do
        docker image rm $image
    done

这样,我们就可以通过这个脚本自动清理旧的Docker镜像,只保留最近的两个镜像,以节省存储空间并保持镜像库的整洁。

现在,我们可以设置一个定时任务,以确保备份脚本每天晚上2点自动执行。运行以下命令:

crontab -e

# 路径根据自己实际情况填写
0 2 * * * /bin/bash /opt/script/imagetag.sh >> /opt/script/outlog/imagetag.out 2>&1

总结:本文介绍了如何使用Shell脚本自动清理Docker镜像。通过获取所有镜像列表并按照创建时间排序,我们可以删除旧的镜像,只保留最近的两个。这样可以有效利用存储空间并保持镜像库的整洁。

希望这篇博客能对你有所帮助!若有其他问题,欢迎继续咨询,祝您生活愉快。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值