设为首页 收藏本站
查看: 1266|回复: 0

[经验分享] python docker registry 历史镜像批量删除

[复制链接]

尚未签到

发表于 2019-2-20 10:25:54 | 显示全部楼层 |阅读模式
  思路


  • 主要思路就是先拿到数据,通过执行docker images 写入到一个文件中
  • 从文件中拿出数据,进行排序【这部分需要根据自己的需求来自定义编写,可以留言交流】
  • 删除需要删除的镜像。
  脚本内容

#coding:utf-8
def get_date_time(date_list,date_range,version_date_range):
'''
获取列表中最大的时间
date_list: 时间列表,[20181109-11,20181110-1,20181110-2,20181111-4,20181111-5]
date_range: 每个项目保留的天数,如上保留两天,[20181109-11,20181110-1,20181110-2]
version_date_range: 每个项目保留的天数,其中每天保留几个版本,如上保留两天每天保留一个版本:[20181109-11,20181110-1]
'''
new_num_dict = {}
for i in date_list:
try:
date_time = int(i.split('-')[0])
version_num = int(i.split('-')[1])
if date_time not in new_num_dict.keys():
new_num_dict[date_time] = [version_num]
else:
new_num_dict[date_time].append(version_num)
except Exception:
pass
new_date_time_list = []
for i in new_num_dict.keys():
new_date_time_list.append(i)
new_date_time_list=sorted(new_date_time_list,reverse=True)
if len(new_date_time_list) > date_range:
keep_date_time_list = new_date_time_list[0:date_range]
delete_date_time_list = new_date_time_list[-(len(new_date_time_list)-date_range):]
else:
keep_date_time_list = new_date_time_list
delete_date_time_list = []
#print "天数保留的结果: %s" % keep_date_time_list
#print "天数删除的结果: %s" % delete_date_time_list
keep_version_num_list = []
delete_version_num_list = []
result = {}
for i in keep_date_time_list:
# 降序
sort_version_num_list = sorted(new_num_dict,reverse=True)
print (i,sort_version_num_list)
if len(sort_version_num_list) > version_date_range:
for n in range(version_date_range):
keep_version_num_list.append("{}-{}".format(i,sort_version_num_list[n]))
for n in range(1,(len(sort_version_num_list)-version_date_range)):
delete_version_num_list.append("{}-{}".format(i, sort_version_num_list[-n]))
else:
for n in range(len(sort_version_num_list)):
keep_version_num_list.append("{}-{}".format(i,sort_version_num_list[n]))
for i in delete_date_time_list:
sort_version_num_list = sorted(new_num_dict, reverse=True)
for n in sort_version_num_list:
delete_version_num_list.append("{}-{}".format(i,n))
result['keep'] = keep_version_num_list
result['delete'] = delete_version_num_list
#print '保留:',keep_version_num_list
#print '删除:',delete_version_num_list
return result
def get_docker_images_info(filename,date_range,version_date_range):
'''
filename: 通过在registry服务器上执行会生成一个文本文件
date_range: 每个项目保留的天数,如上保留两天,[20181109-11,20181110-1,20181110-2]
version_date_range: 每个项目保留的天数,其中每天保留几个版本,如上保留两天每天保留一个版本:[20181109-11,20181110-1]
'''
readlines_list=[]
with open(filename,'rb+') as f:
data = f.readlines()
for line in data:
if line:
readlines_list.append(line)
f.close()
readlines_dict={}
for i in readlines_list:
readline_list = i.split()
#print (readline_list)
if readline_list[0] not in readlines_dict.keys():
readlines_dict[readline_list[0]] = [readline_list[1]]
else:
readlines_dict[readline_list[0]].append(readline_list[1])
result = {}
for k,v in readlines_dict.items():
# print "%s------------%s" % (k,v)
delete_date_list = get_date_time(v,date_range,version_date_range)
result[k] = delete_date_list
return result
if __name__ == "__main__":
import os
import datetime
home_path = '.'
#生成的文件
os.system("docker images > 1.txt")
ret=get_docker_images_info("1.txt",5,2)
#生成一个日志记录
with open("%s/logs/delete.%s.log" % (home_path,datetime.datetime.now().strftime('%Y-%m-%d')),'w+') as f:
for k,v in ret.items():
if len(v['delete']) > 0:
f.write("[%s] [%s] docker delete images:%s\n" % ((datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')),k,v['delete']))
for i in v['delete']:
delete_docker_image_tag = ("{}:{}".format(k,i))
print ('删除: %s' % delete_docker_image_tag)
os.system("docker rmi %s " % delete_docker_image_tag)
if len(v['keep']) > 0:
f.write('[%s] [%s] docker keep images: %s\n' % ((datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')), k, v['keep']))
for i in v['keep']:
keep_docker_image_tag = ("{}:{}".format(k,i))
print ('保留: %s ' % keep_docker_image_tag)
f.close()



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-674768-1-1.html 上篇帖子: docker管理应用程序数据、容器网络 下篇帖子: docker Dockerfile、构建php、java、lnmp项目
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表