docker多个容器一起打包_docker容器打包、镜像文件导入与导出 , 支持批量

1. 查看镜像id

sudo docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

quay.io/calico/node v1.0.1 c70511a49fa1 6 weeks ago 257 MB

hello-world latest 48b5124b2768 2 months ago 1.84 kB

quay.io/coreos/flannel v0.7.0 63cee19df39c 2 months ago 73.8 MB

quay.io/calico/cni v1.5.5 ada87b3276f3 2 months ago 67.1 MB

2. 选择要打包的镜像,执行打包命令

sudo docker save -o quay.io-calico-node-1.tar quay.io/calico/node

docker save REPOSITORY:TAG | gzip > REPOSITORY:TAG.tar.gz

会在当前目录下生成导出文件xxx.tar,然后将此文件下载到本地

3. 在开发环境导入上述打包的镜像

docker load -i quay.io-calico-node-1.tar

0a43edc59c00: Loading layer 27.59 MB/27.59 MB

69a5574b2581: Loading layer 3.636 MB/3.636 MB

fb0933709f36: Loading layer 3.913 MB/3.913 MB

7384abd120f5: Loading layer 3.859 MB/3.859 MB

e34911610de0: Loading layer 27.06 MB/27.06 MB

d6ec327c8cbe: Loading layer 6.656 kB/6.656 kB

Loaded image ID: sha256:ada87b3276f307a6b1b1ada15820b6c9842fd839fe5cc46ad5db8af81f7fd271

至此,可以使用本地镜像了!

4. 批量导入导出镜像工具

①导出镜像:

import re

import os

import subprocess

if __name__ == "__main__":

os.system('rm -rf /tmp/xfleet')

os.system('mkdir -p /tmp/xfleet')

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.decode("utf-8"))

if not m:

continue

# 镜像名

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

os.system(cmd)

# 将tar包放在临时目录

os.system('mv %s /tmp/xfleet/'%tarball)

retval = p.wait()

②导入镜像:

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)

容器打包成镜像:

docker commit -a "xxx" -m "xxx"容器名称或id 打包的镜像名称:标签

OPTIONS说明:-a :提交的镜像作者;-c :使用Dockerfile指令来创建镜像;-m :提交时的说明文字;-p :在commit时,将容器暂停。

小工具参考资料:http://www.cnblogs.com/ksir16/p/8865525.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值