• 批量导出docker镜像


     脚本比较粗糙,可根据这个思想去改写自己的脚本

    这里使用Python脚本来实现,熟悉subprocess.Popen, os.popen

    docker save 镜像名(不需要加tag) -o tarname.tar

    import re
    import os
    from subprocess import PIPE, Popen, STDOUT
    
    if __name__ == "__main__":
        p = Popen('docker images', shell=True, stdout=PIPE, stderr=STDOUT)
        for line in p.stdout.readlines():
            # 此处的正则表达式是为了匹配镜像名以ufleet为开头的镜像 # 实际使用中根据需要自行调整
            m = re.match(r'(^ufleet[^s]*s*)s([^s]*s)', line)
            # 镜像名
            iname = m.group(1).strip(' ')
            # tag
            itag = m.group(2)
            # tar包的名字
            tarname = iname.split('/')[-1]
            print(tarname)
            tarball = tarname + '.tar'
            ifull = iname + ':' + itag
            # save
            cmd = 'docker save -o ' + tarball + ' ' + ifull
            print(os.system(cmd))
    # 将tar包放在临时目录 print(os.system('mv %s /tmp/xfleet/' % tarball)) retval = p.wait()

    os.popen()用法

    返回值是文件对象,既然是文件对象,使用完就应该关闭。推荐使用with来实现

    import os

    with os.popen(command, "r") as p: r = p.read()

    read(): 读取整个文件,将文件内容放到一个字符串变量中

    readline(): 每次读取一行;返回的是一个字符串对象,保持当前行的内存

    readlines(): 一次性读取整个文件;自动将文件内容分析成一个行的列表

    实现的一个小demon

    docker images | awk '{print $1}' > images_cut.txt

    import os
    
    x=os.popen("cat ./images_cut.txt")
    for item in x:
        tarname = item.split('/')[-1].strip()
        print(tarname)
        tarfile = "{}.tar".format(tarname)
        cmd = "docker save -o " + tarfile + " " + item
        print(os.system(cmd))
  • 相关阅读:
    索引
    排序---冒泡排序、快速排序、选择排序、插入排序、希尔排序
    设计模式6大原则
    InputStream的read()读取机制
    Java中的关键字---native
    Java中的关键字---static
    Java中的关键字---transient
    负载均理解
    2020-03-29 微服务网关GateWay
    2020-03-28 微服务网关Zuul
  • 原文地址:https://www.cnblogs.com/regit/p/12788223.html
Copyright © 2020-2023  润新知