工作需要,將主機上的部分鏡像導出為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()
運行上述腳本后,會在/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 命令查看導入后結果