• 18.镜像的导入和导出


    Docker镜像的导入和导出

    1.save / load   保存/加载

    2.export / import  导出/导入

    批量打包镜像

    Docker镜像的导入和导出

    BY 赫墨拉 · PUBLISHED 2018年7月17日 · UPDATED 2018年8月3日

    相关阅读:

    Docker容器时间与宿主机同步

    使用Docker搭建WordPress博客

    Docker私有仓库搭建及镜像删除

    Docker容器与宿主机同网段互相通信

    在Docker上部署Ambari


    场景描述:

    需要在客户现场快速部署应用,东西多,时间短

    场景分析:

    为了节省时间,使用docker进行快速部署,由于不是内部环境,无法使用内部私有库,于是构建镜像,将镜像导出

    解决办法:

    使用dockerfile构建应用镜像,将镜像导出,在部署的节点上将镜像导入,启动容器即可

    镜像导入和导出:

    docker提供了把镜像导出为文件的机制,有两种方式:

    1.save / load   保存/加载

    save有两种

    第一种:

    docker save 镜像id > 目录/XXX.tar

    第二种(推荐):

    docker save repository:tag > 目录/XXX.tar

    load命令如下:

    docker load < XXX.tar

    2.export / import  导出/导入

    export命令如下:

    docker export 容器名 > XXX.tar

    import命令:

    docker import XXX.tar REPOSITORY:TAG


    这两种方式都能都导出,但是细节不同,先进行对比,后通过实例演示

    导出的对象

    导出文件大小

    是否可回滚到历史层

    save / load

    将镜像导出

    export / import

    将容器导出

    从本质上来说,save/load导出的是镜像,export/import导出的是容器,大家不要弄混

    相对于文件大小来说,save方式导出的文件比export方式导出的文件大

    正是因为save方式保存了镜像的历史和层(layer),使其可以层回滚,即回滚到之前的历史层,所以save方式导出的文件稍微大一些

    反观export方式,在导出过程中丢失所有的历史,导致其不可以层回滚,导出的文件会小一些

    演示:

    下面通过实例,对这两种方式进行演示和对比

    save / load 方式

    1.save 保存镜像

    这里有一个构建好的镜像

    [root@uat-app01 /]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE centos_ssh latest ae0548244885 10 days ago 285 MB

    先查看该镜像的历史层

    注意:

    docker images –tree命令已被弃用,现已用docker history +镜像id 命令

    [root@uat-app01 /]# docker history ae0548244885 IMAGE CREATED CREATED BY SIZE COMMENT ae0548244885 10 days ago /bin/sh -c ln -snf /usr/share/zoneinfo/$TZ... 14 B de38162f94f6 10 days ago /bin/sh -c #(nop) ENV TZ=Asia/Shanghai 0 B 64c78cfdb6d2 10 days ago /bin/sh -c #(nop) MAINTAINER yanwei <yanw... 0 B 7a9653034358 2 weeks ago /bin/bash 81.1 MB 3fa822599e10 7 months ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0 B <missing> 7 months ago /bin/sh -c #(nop) LABEL name=CentOS Base ... 0 B <missing> 7 months ago /bin/sh -c #(nop) ADD file:7441d818786942a... 204 MB

    导出该镜像,导出的镜像文件为280M

    注意:

    如果使用docker save + 镜像id 方式导出,导入的镜像的REPOSITORY和TAG会显示为

    方法1:

    [root@uat-app01 /]# docker save ae0548244885 > /centos_ssh.tar [root@uat-app01 /]# ll -sh /centos_ssh.tar 280M -rw-r--r-- 1 root root 280M Jul 17 11:20 /centos_ssh.tar

    方法2:

    [root@uat-app01 /]# docker save centos_ssh:latest > /centos_ssh2.tar [root@uat-app01 /]# ll -sh /centos_ssh.tar 280M -rw-r--r-- 1 root root 280M Jul 17 11:31 /centos_ssh2.tar

    2.load 加载镜像

    将镜像导入到其他环境,加载镜像文件

    先来加载方法1导出的镜像文件

    [root@uat-ucs01 /]# docker load < /centos_ssh.tar d1be66a59bc5: Loading layer [==================================================>] 212.1 MB/212.1 MB 610610a96352: Loading layer [==================================================>] 81.43 MB/81.43 MB e5dab0be5e57: Loading layer [==================================================>] 3.072 kB/3.072 kB Loaded image ID: sha256:ae0548244885ae05a4d8a3deab32bfeb0518697986586c3a1023579c8dc2d21c B/3.072 kB

    查看该镜像,REPOSITORY和TAG都为

    解决这种情况,使用docker tag添加标签,这里就不做演示了,多一步显得很冗余,推荐大家使用save的第二种方法导出

    [root@uat-ucs01 /]# docker images -a REPOSITORY TAG IMAGE ID CREATED SIZE <none> <none> ae0548244885 10 days ago 284.7 MB

    删除该镜像

    再来加载方法2导出的镜像文件

    [root@uat-ucs01 /]# docker load < /centos_ssh2.tar d1be66a59bc5: Loading layer [==================================================>] 212.1 MB/212.1 MB 610610a96352: Loading layer [==================================================>] 81.43 MB/81.43 MB e5dab0be5e57: Loading layer [==================================================>] 3.072 kB/3.072 kB Loaded image: centos_ssh:latest

    查看该镜像,REPOSITORY和TAG显示都正常

    [root@uat-ucs01 /]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE centos_ssh latest ae0548244885 10 days ago 284.7 MB

    export / import 方式

    1.export 导出

    这里有一个正在运行的容器,基础镜像也是centos_ssh

    [root@uat-app01 /]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2cc200d98a54 centos_ssh "/bin/bash" 14 seconds ago Up 10 seconds wizardly_babbage

    将该容器导出,export方式导出的文件大小为258M,比save方式导出的文件小了22M

    [root@uat-app01 /]# docker export 2cc200d98a54 > /centos_ssh.tar [root@uat-app01 /]# ll -sh /centos_ssh.tar 258M -rw-r--r-- 1 root root 258M Jul 17 14:06 /centos_ssh.tar

    2.import导入

    在其他环境,将文件导入

    [root@uat-ucs01 /]# docker import /centos_ssh.tar centos_ssh:latest sha256:d1e984b716211a3b29b39f75d6c31a132844f9307d87e81c540364162e311074

    查看导入的镜像

    [root@uat-ucs01 /]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE centos_ssh latest d1e984b71621 4 seconds ago 261.2 MB

    查看镜像的历史层,没有之前的历史层,只有从导入开始的历史层

    [root@uat-ucs01 /]# docker history d1e984b71621 IMAGE CREATED CREATED BY SIZE COMMENT d1e984b71621 21 seconds ago 261.2 MB Imported from -

    至此,docker的导入和导出介绍完了,我们下篇文章见

    docker save nginx:latest |gzip > nginx.tar -----| 管道符指定压缩方式

    [esopadm@bbosstest9 os-web]$ du -sh ng.tar

    108M ng.tar

    [esopadm@bbosstest9 os-web]$ rm -rf ng.tar

    [esopadm@bbosstest9 os-web]$ docker save nginx:latest |gzip > nginx.tar

    [esopadm@bbosstest9 os-web]$ sz nginx.tar

    批量打包镜像

    docker save $(docker images | grep -v REPOSITORY | awk 'BEGIN{OFS=":";ORS=" "}{print $1,$2}') -o alll.tar

  • 相关阅读:
    图论04-【无权无向】-图的广度优先遍历
    Day06:运算符详解
    【八股】Java基础、集合、JVM
    STM32滴答定时器SysTick精准延时,兼容HAL库和标准库
    Ubuntu18.04 ros 安装ZED SDK---基于x86架构
    pygame制作游戏全套的
    黑客技术(网络安全)——自学思路
    LangChain(2):基于自己的文档构建一个问答系统
    Kotlin - 协程调度器 CoroutineDispatcher
    《TCP/IP网络编程》阅读笔记--Socket类型及协议设置
  • 原文地址:https://blog.csdn.net/ATYtian/article/details/125475450