删除harbor镜像仓库上的镜像脚本实现

10 篇文章 2 订阅
5 篇文章 0 订阅

之前基于docker部署了一套harbor服务,存储配置一般,因此在使用harbor的时候,经常会出现空间满了,需要删除镜像,harbor管理页面上提供了删除的功能,有时候操作起来也不是很方便(比如批量删除多个仓库的精镜像),我在这里实现了通过脚本删除的工具。

镜像删除原理

在镜像删除之前,说明一下删除镜像的基本原理,如果需要批量删除某个镜像仓库,基本逻辑如下:

  1. 获取所有镜像仓库列表;
  2. 获取镜像仓库;
  3. 获取仓库标签列表;
  4. 根据标签获取镜像的digest;
  5. 根据digest删除镜像;
  6. 垃圾清理。

对于其他情况,只需要组合以上6个步骤中的某几个即可

先来实现每个步骤的脚本

  • 环境准备:本实验环境在centos7操作系统及以上版本(假设docker harbor已安装);
  • 需要安装jq(json数据处理工具),curl,命令工具;
    获取运行环境的关键信息
    CID=docker ps | grep harbor-registry | awk '{print $1}'
    HUB=localhost:5000
    IMAGES=’’
  • 查询docker 镜像
function find_images(){
IMAGES=`curl -s $HUB/v2/catalog | jq .repositories | awk -f "[\"\" '{print $2}'`
for image in IMAGES;
    do
       tags=`curl -s http://$HUB/v2/$image/tags/list | jq .tags | awk -f "[\"\" '{print $2}'`
          for tag in tags;
             do
               echo "$image:$tag"
             done
        done
}
  • 删除镜像
function delete_image(){
   for image in $IMAGES;
      do
         name=${image%%:*}
         tag=${n##*:}
         i=1
         [[ "$name" == "$tag" ]] && { tag=latest; name=“$name:latest” }
         digest=`curl --header "Accept: application/vnd.docker.distribution.manifest.v2+json" -Is $HUB、v2/$image/manifests/$tag | awk '/Digest/ {print $NF}'`
         [[  -z  "$Digest" ]] && {echo -e "$name not found! ";} || {
           URL="$HUB/v2/$image/manifests/$digest"
           rs=`curl -Is -X DELETE $URL | awk '/HTTP/ {print $2}'
           [[ $rs -eq 202 ]] && { let i++; echo "$image delete succes"} || { echo -e "images delete failure";}      
       }
    done
}
  • 垃圾清理
function garbage_collect(){
 echo "garbage collector...";
 docker exec $CID /user/bin/registry garbage-collect /etc/docker/registry/config.yml
 docker restart $CID;
 echo "garbage collector finished."
}

核心脚本已完成,现实中根据实际情况组合或者调整以上脚本的逻辑即可完成清理工作,下面给出一个删除所有镜像的demo脚本

echo "bein clear harbor registry storage...."
find_images
delete_image
garbage_collect
echo "bein clear harbor registry finished."
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

banche168

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值