python docker registry 历史镜像批量删除

思路

  • 主要思路就是先拿到数据,通过执行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[i],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[i], 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()

原文地址:http://blog.51cto.com/11008164/2322644

时间: 2024-08-30 12:23:52

python docker registry 历史镜像批量删除的相关文章

企业自用docker registry v2 镜像仓库

1. 安装docker引擎并启动docker服务 2. 生成自签证书,脚本如下crt.sh:     #!/bin/bash     # 生成自签证书脚本          #common name默认是主机名     #CN=`hostname`     CN='docker.repo'     #证书名     CrtName='registry'          mkdir certs;cd certs          openssl req -x509 -days 3650 -sub

Docker学习笔记(3) — docker仓库的镜像怎么删除

docker越来越炙手可热,如果你的团队已经准备开始使用docker,那么私有仓库是必不可少的东西,首先是可以帮助你加快从服务器pull镜像的速度,其次也可以帮助你存放私有的镜像,本文主要为大家介绍如何从公用服务器上讲开放的images备份到本地私有服务器上.docker images往往不知不觉就占满了硬盘空间,为了清理冗余的image,可采用以下方法: 1.进入root权限 sudo su 2.停止所有的container,这样才能够删除其中的images: docker stop $(do

可能是最详细的部署:Docker Registry企业级私有镜像仓库Harbor管理WEB UI

上一篇文章搭建了一个具有基础功能,权限认证.TLS 的私有仓库,但是Docker Registry 作为镜像仓库,连管理界面都没有,甚至连一些运维必备的功能都是缺失的,还有什么 Docker 镜像仓库管理工具呢?这里有一个简单好用的企业级 Registry 服务器 - Harbor,推荐在生产环境上使用. Harbor 简介 Harbor是VMware公司开源的企业级Docker Registry项目,其目标是帮助用户迅速搭建一个企业级的Docker registry服务. 它以Docker公司

简单搭建docker registry

已知信息: 服务端IP:192.168.7.2xx 客户端IP:192.168.7.1xx 服务端: docker registry中镜像本地映射地址:/Users/dockergit/private_registry(可自定义) docker registry容器中镜像存储地址:/var/lib/registry 客户端: 已创建image:test_agent:latest 环境为Linux OS,服务端和客户端都安装好docker,能使用docker命令. 简单搭建docker regis

docker快速批量删除容器或镜像

前言 在使用docker 容器一段时间后,系统就堆积了比较多的镜像和容器.如果我们手动一个个删除,将会很耗费时间.那么有没有什么办法是可以减轻工作量,使我们能够把活干完,早点下班的呢? 普通删除的方法 先来看看如何删除 docker 容器: 删除容器的命令: docker container rm [OPTIONS] CONTAINER [CONTAINER...] help 文档解释: Remove one or more containers Options: -f, --force For

docker常用脚本执行命令(批量删除所有镜像容器,)

批量删除所有镜像(none表示镜像的关键字) docker rmi $(docker images | grep "none" | awk '{print $3}') docker 批量删除所有容器 docker ps //查看所有正在运行容器 docker stop containerId //containerId 是容器的ID docker ps -a //查看所有容器 docker ps -a -q //查看所有容器ID docker stop $(docker ps -a -

docker 批量删除 镜像 容器

我们在docker构建和测试时,经常会产生很多无用的镜像或者容器,我们可用如下两条命令一个一个删除. docker container rm 容器id #删除容器 docker image rm 镜像ID #删除镜像 但是,还可以借助这两个获取容器ID和镜像ID的命令实现批量删除 获取容器ID列表: docker container ls -a -q 获取镜像ID列表: docker image ls -a -q 最终实现批量删除命令 批量删除容器: docker container rm $(

docker批量删除容器、镜像

docker rm `docker ps -a -q` docker rm $(docker ps -aq) 2.删除所有镜像 docker rmi `docker images -q` docker rmi $(docker images -q) 3.按条件删除镜像 没有打标签 docker rmi `docker images -q | awk '/^<none>/ { print $3 }'` 镜像名包含关键字 docker rmi --force `docker images | gr

使用docker Registry快速搭建私有镜像仓库

当我们执行docker pull xxx的时候,docker默认是从registry.docker.com这个地址上去查找我们所需要的镜像文件,然后执行下载操作.这类的镜像仓库就是docker默认的公共仓库,所有人都可以直接查看或下载.使用,但是呢,基于网络原因,下载速度有限制比较慢.因此,我们在公司内部内网环境中使用dokcer,一般不会将镜像文件上传到公网公共库中.但内部共享使用就是个问题,所以,私有仓库就由此产生了. 什么是私有仓库? 私有仓库,就是本地(内网环境)组建的一个与公网公共库功