shell/python 脚本。把多个docker镜像打成一个tar包

需要一个脚本,三十个左右的镜像打成一个tar包。
python / shell 脚本都可以。
我不知道说什么 了,凑字数。

docker save <myimage>:<tag> | gzip > <myimage>_<tag>.tar.gz
gunzip -c <myimage>_<tag>.tar.gz | docker load
docker save  image1:tag1 image2:tag2  ...(所有的镜像+tag) |gzip  image.tar.gz   

好家伙,回来一看,问题还没结题,那我写一个,其实就是用 python 调用 docker 命令 罢了。

#! /usr/bin/env python3
# _*_ coding: utf8 _*_

import re
from subprocess import run, PIPE


def img_tar():
    result = run('''docker images ''', shell=True, stdout=PIPE, universal_newlines=True)
    img_id = ''.join(re.findall(r' \w{12}', result.stdout))
    if run(f'''docker save -o all.tar  {img_id}''', shell=True, stdout=PIPE, universal_newlines=True):
        print('docker 镜像全部打包完毕')


if __name__ == '__main__':
    img_tar()

导入使用命令 docker load <all.tar

img

这样的运行结果,已满足题主你的问题了, 导出到一个tar 包内。

所有镜像导出到一个tar包?

为啥不先导出在一个目录,然后在将目录做成一个tar包呢?

嫌麻烦的话写个几行的shell 就解决了啊

楼上说的都可行,我猜你是不知如何动手,,

有疑问,我们可以交流


1.这个是忽略没有标签的镜像命令       忽略的是这个none             后面是控制镜像数量   全部都导出后面可以换成  xargs  -n  10 
docker image save -o 包名.tar `docker images|awk 'NR>1&&!/none/{print $1":"$2}'|head -n 30 `


2.如果你的镜像都有标签可以使用下面这个命令   后面是控制镜像数量   全部都导出后面可以换成  xargs  -n  10 
docker image save -o 包名.tar `docker images|awk 'NR>1{print $1":"$2}'|head -n 10`

希望能对你有帮助