docker镜像构建保存导入导出对比差别

docker镜像构建

构建镜像

构建镜像一般有三种情况,基于容器导入、基于本地模板导入、基于 Dockerfile 创建,本章主讲基于容器保 存镜像和本地保存镜像导入。

基于容器保存

主要格式:docker commit -a '作者' -m "描述" [container id] [输出镜像名]:[版本]

[root@chensir ~]# docker commit -m "filename" -a "chen" 820a17fe3935 mycentos:v1

主要参数

-a 作者信息

-m 提交信息(相当于描述信息)

-p 提交时, 暂停容器运行

构建镜像需要先先启动镜像, 然后通过容器id构建镜像

启动容器, 修改并保存

启动
[root@laser ~]# docker run -d -it centos /bin/bash
查看容器是否启动
[root@laser ~]# docker ps -q
820a17fe3935
给容器内添加一点内容
[root@laser ~]# docker exec 820a17fe3935 echo "chenshao" test

构建镜像
[root@laser ~]# docker commit -m "file" -a "chen" 820a17fe3935 mycentos:1.0

构建完成后查看镜像, 如果存在mycengos则完成
[root@laser ~]# docker images
保存镜像

有时我们需要将一台电脑上的镜像复制到另一台电脑上使用,除了可以借助仓库外,还可以直接将镜像保存成一 个文件,再拷贝到另一台电脑上导入使用。打包成tar包或zip包进行共享

对于镜像的导出和导入,Docker 提供了两种方案,下面分别进行介绍。

使用 export 和 import

export 和 import 的针对点是容器,将本机的容器导出为镜像包。

使用 export 保存容器为镜像

格式 : docker export 镜像id > 镜像名称.tar

查看自己生产的镜像
docker image -q
820a17fe3935

[root@laser ~]# docker export 820a17fe3935 > centos.tar

查看镜像
[root@laser ~]# ll | grep nginx.tar
-rw-r--r-- 1 root root 135117824 122 20:51 centos.tar
使用 import 导入包为镜像

格式 : docker import 本地镜像.tar 镜像名称:版本 版本是可选, 也可以不写

[root@laser ~]# docker import centos.tar centos:1.0
查看, 没抛异常都会成功
[root@laser ~]# docker images

使用 save 和 load

save 和 load 的针对的点是镜像,将本机的镜像导入、导出为镜像包。

使用 save 保存镜像

格式: docker save 镜像ID > nginx.tar

[root@laser ~]# docker save 7e4d58f0e5f3 > nginx.tar

[root@laser ~]# ls
nginx.tar
使用 save 保存多个镜像

-o参数: 保存多个镜像,指定在一个压缩包内保存多个镜像

格式: docker save -o 到处包名.tar 镜像1 镜像2 ...

[root@laser ~]# docker save -o all.tar mysql:5.7 redis:6.0

[root@laser ~]# ll
总用量 104812
-rw-------. 1 root root 489012736 122 19:27 all.tar
使用 load 导入镜像

-i 参数

格式 : docker load < 包名.tardocker load -i 包名.tar

导入后如果docker内存在导入镜像, 则会覆盖当前镜像,

[root@laser ~]# docker load < centos.tar 

导入多个, 
[root@laser ~]# docker load -i all.tar 
Loaded image: redis:6.0
Loaded image: mysql:5.7
save和load 与 export和import 区别?

1、save保存比较完整,export仅仅保存镜像。
2、save保存的体积大于export保存的体积
3、import可以重命名,load不能重命名
4、save可以保存多个镜像,export只能保存一个容器。

save和export 使用场景?

1、打包镜像一般用save, 打包容器一般用export
2、需要构建历史信息的,可以使用save。

需要注意的是

当使用export到处时, 使用load是导不进容器的, 就算导进去也使用不了, 因为export针对的是容器, 而load导入镜像, 所以会抛出异常, 为导入的不是镜像, 反之也是一样的, 当使用save导出, 使用import导入也是使用不了的, 必须要严格按照导入导出的格式进行, 否则镜像无法正常运行

两种方案的差别

  • 文件大小不同

export 导出的镜像文件体积小于 save 保存的镜像, 因为export不保存历史记录和其他信息, save保留历史记录, 后- 续使用save比较多,

  • 是否可以对镜像重命名

docker import 可以为镜像指定新名称,docker load 不能对载入的镜像重命名。

  • 是否可以同时将多个镜像打包到一个文件中

docker export 不支持,docker

  • 是否包含镜像历史

export 导出(import 导入)是根据容器拿到的镜像,再导入时会丢失镜像所有的历史记录和元数据信息(即仅 保存容器当时的快照状态),所以无法进行回滚操作。

save 保存(load 加载)的镜像,没有丢失镜像的历史,可以回滚到之前的层(layer)

使用export导出
[root@laser ~]# docker history 8652b9f0cb4c
IMAGE               CREATED             CREATED BY                                      SIZE  COMMENT
8652b9f0cb4c        2 weeks ago         from import -    不知从何而来           


使用 save导出
[root@laser ~]# docker history ae0658fdbad5
IMAGE               CREATED             CREATED BY                                      SIZE  COMMENT
ae0658fdbad5        11 days ago         /bin/sh -c #(nop)  CMD ["mysqld"]               0B                  
<missing>           11 days ago         /bin/sh -c #(nop)  EXPOSE 3306 33060            0B                  
<missing>           11 days ago         /bin/sh -c #(nop)  ENTRYPOINT ["docker-entry…   0B                  
<missing>           11 days ago         /bin/sh -c ln -s usr/local/bin/docker-entryp…   34B                 
<missing>           11 days ago         /bin/sh -c #(nop) COPY file:f9202f6b715c0e78…   13.1kB              
<missing>           11 days ago         /bin/sh -c #(nop)  VOLUME [/var/lib/mysql]      0B                  
<missing>           11 days ago         /bin/sh -c {   echo mysql-community-server m…   313MB               
<missing>           11 days ago         /bin/sh -c echo 'deb http://repo.mysql.com/a…   55B                 
<missing>           2 weeks ago         /bin/sh -c #(nop)  ENV MYSQL_VERSION=5.7.32-0B                  
<missing>           2 weeks ago         /bin/sh -c #(nop)  ENV MYSQL_MAJOR=5.7          0B                  
<missing>           2 weeks ago         /bin/sh -c set -ex;  key='A4A9406876FCBD3C45…   2.61kB              
<missing>           2 weeks ago         /bin/sh -c apt-get update && apt-get install…   52.2MB              
<missing>           2 weeks ago         /bin/sh -c mkdir /docker-entrypoint-initdb.d    0B                  
<missing>           2 weeks ago         /bin/sh -c set -eux;  savedAptMark="$(apt-ma…   4.17MB              
<missing>           2 weeks ago         /bin/sh -c #(nop)  ENV GOSU_VERSION=1.12        0B                  
<missing>           2 weeks ago         /bin/sh -c apt-get update && apt-get install…   9.34MB              
<missing>           2 weeks ago         /bin/sh -c groupadd -r mysql && useradd -r -329kB               
<missing>           2 weeks ago         /bin/sh -c #(nop)  CMD ["bash"]                 0B                  
<missing>           2 weeks ago         /bin/sh -c #(nop) ADD file:d2abb0e4e7ac17737…   69.2MB              
应用场景不同

docker export 的应用场景:主要用来制作基础镜像,比如我们从一个 ubuntu 镜像启动一个容器,然后安 装一些软件和进行一些设置后,使用 docker export 保存为一个基础镜像。然后,把这个镜像分发给其他人使用, 比如作为基础的开发环境。

docker save 的应用场景:如果我们的应用是使用 docker-compose.yml 编排的多个镜像组合,但我们要部 署的客户服务器并不能连外网。这时就可以使用 docker save 将用到的镜像打个包,然后拷贝到客户服务器上使 用 docker load 载入。

容器!

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值