docker registry私有仓库旧镜像批量清理脚本

私有仓库的数据存储可以参考这个图:
在这里插入图片描述
manifest可以理解为镜像信息,
layer(blobs)可以理解为实际存储文件
查询和删除的命令另外一篇文章记录了:https://blog.csdn.net/fly0512/article/details/98846267
这2天写了一个脚本,进行批量删除,总体思路是:调用API接口删除非当前使用的manifest信息之后,使用registry的garbage-collect (gc)功能清理无效layer,在公司测试环境中运行效果还不错,原来2800个,清理之后大约只剩下不到1800个。
清理脚本(centos7.4):

#!/bin/bash
#$1环境test $2服务名center $3版本号center2.2
#查找指定服务的所有digest文件,保留当前使用的,其余删除
HOST=192.168.111.86
PORT=5000
USER=admin
PWD=123456
#仓库存储使用了oss,脚本运行的服务器需要先将ossfs工具将oss映射到本地
#如没有使用oss,目录指向registry的存储路径,效果相同
OSS_ENV=/ossfs/docker/registry/v2/repositories/${1}
#判断传入参数
if [ -z "$1" -o -z "$2" -o -z "$3" ]
then
  echo "USAGE: test center center2.2"
  exit 1
fi
#查询当前digest
digest_current=`cat ${OSS_ENV}/${2}/_manifests/tags/${3}/current/link`
#从oss查询已有digest文件
link=`find ${OSS_ENV}/${2}/_manifests/tags/${3}/index -type f`
#不是当前digest的删除
for i in ${link}
do
digest=`cat ${i}`
	if [ "${digest}" != "${digest_current}" ]
	then
	curl -u ${USER}:${PWD} -I -X DELETE http://${HOST}:${PORT}/v2/${1}/${2}/manifests/${digest}
#删除旧digest文件夹
	digest_dir=`echo ${digest#*:}`
	mv ${OSS_ENV}/${2}/_manifests/tags/${3}/index/sha256/${digest_dir} /tmp/
	fi
done

执行脚本:

#!/bin/bash
#删除测试环境下所有服务旧digest
HOST=192.168.111.86
PORT=5000
USER=admin
PWD=123456
#查询服务名称
SERVICE=`curl -s -u ${USER}:${PWD} -X GET http://${HOST}:${PORT}/v2/_catalog|awk 'BEGIN{RS=","}{print $0}'|grep "test"|sed 's/\"\|\]\|\}\|test\///g'`
for i in ${SERVICE}
do
#查版本号
VERSION=`curl -s -u ${USER}:${PWD} -X GET http://${HOST}:${PORT}/v2/test/${i}/tags/list|awk -F "[:]" '{print $3}'|sed 's/\[\|\"\|\]\|\}//g'`
#我的测试环境中只有1个版本号,直接取出来用了,如果存在多个,这里需要增加一层循环
/bin/bash /Data/op_scripts/del_digest.sh test ${i} ${VERSION} >>/tmp/del_digest.txt 2>&1
done
#调用registry gc功能,registry_registry_1是私有仓库运行容器名称
nohup docker exec registry_registry_1 bin/registry garbage-collect /etc/docker/registry/config.yml >>/tmp/reg_gc.txt 2>&1 &
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值