批量导出
因为任务需求,需要把主机上的部分镜像导出为tar文件,以便放在其他主机上使用。我使用python实现了一个批量打包脚本:
import re
import os
import subprocess
if __name__ == "__main__":
p = subprocess.Popen('docker images', shell=True, stdout=subprocess.PIPE, stderr=subprocess.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()
打包tar文件
运行上述脚本后,会在/tmp/xfleet下生成所有的tar包,之后将此目录下的tar文件打包成一个压缩包
cd /tmp/ufleet
tar -czvf ufleetImages.tar.gz ./*.tar
批量导入
将ufleetImages.tar.gz拷贝到目标主机上,就可以批量导入了。脚本如下 dockerload.py:
import os
import sys
if __name__ == "__main__":
tarball = sys.argv[1]
print(tarball)
workdir = '/tmp/xfleet-images'
os.system('rm -rf %s'%workdir)
os.system('mkdir -p %s'%workdir)
os.system('tar -zxvf %s -C %s'%(tarball, workdir))
os.chdir(workdir)
files = os.listdir(workdir)
for filename in files:
print(filename)
os.system('docker load -i %s'%filename)
使用脚本
python dockerload.py ufleetImages.tar.gz
可以使用docker images命令查看导入后结果