docker save与docker export的区别

http://chy940405.blog.51cto.com/11344281/1981804 这篇文章中分享了docker 基本操作Ⅱ(关于镜像操作),其中有一个问题就是docker save和docker export都能导出镜像包,咋看起来区别似乎不大,如下就来介绍两者的区别,适用于什么场景?

- docker save

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

[[email protected] ~]# docker save --help //命令后面加--help可以查看它的命令行帮助
Usage:	docker save [OPTIONS] IMAGE [IMAGE...]

Save one or more images to a tar archive (streamed to STDOUT by default)

Options:
      --help            Print usage
  -o, --output string   Write to a file, instead of STDOUT
从命令行帮助可以看出,docker save是用来将一个或多个image(镜像)打包保存的工具
[[email protected] ~]# docker images //查看镜像
REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE
192.168.212.10:5000/centos7   latest              3e6c83d2f374        21 hours ago        435MB
centos7                       latest              3e6c83d2f374        21 hours ago        435MB
centos_with_net               latest              87dde0ff7187        43 hours ago        277MB
registry                      latest              a07e3f32a779        11 days ago         33.3MB
centos                        latest              d123f4e55e12        11 days ago         197MB
[[email protected] ~]# docker save -o centos.tar registry centos //打包后的centos.tar 包含了两个镜像,一个是registry 一个是centos
我们看到命令行帮助的参数要求指定image(镜像),实际上也可以针对container进行打包的,例如
[[email protected] ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
0db570b5560b        centos              "/bin/bash"         6 seconds ago       Up 3 seconds                            stupefied_dubinsky
6be67419cafc        centos_with_net     "bash"              18 hours ago        Up 18 hours                             centos6
针对image的centos 打包   
[[email protected] ~]# docker save -o c.tar  centos //docker save如果指定的是container,docker save将保存的是容器背后的image。
[[email protected] ~]# ls -la c.tar //打包后的大小
-rw------- 1 root root 205225472 11月 15 21:20 c.tar
将打包后的镜像载入进来使用docker load,例如:
docker load -i images.tar //如果本地镜像库已经存在这两个镜像,将会被覆盖。

- docker export

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

[[email protected] ~]# docker export --help

Usage:	docker export [OPTIONS] CONTAINER

Export a container‘s filesystem as a tar archive

Options:
      --help            Print usage
  -o, --output string   Write to a file, instead of STDOUT
从帮助可以看出,docker export是用来将container的文件系统进行打包的例如:
[[email protected] ~]# docker ps //查看容器id
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
0db570b5560b        centos              "/bin/bash"         13 minutes ago      Up 13 minutes                           stupefied_dubinsky
6be67419cafc        centos_with_net     "bash"              18 hours ago        Up 18 hours                             centos6
[[email protected] ~]# docker export -o centos-export.tar 0db570b5560b //docker export需要指定container,不能像docker save那样指定image或container都可以。
[[email protected] ~]# ls -la centos-export.tar //打包后的centos-export.tar
-rw------- 1 root root 205216256 11月 15 21:33 centos-export.tar
将打包的container载入进来使用docker import,例如:
[[email protected] ~]# docker import centos-export.tar // centos1:latest
sha256:e3a5b72ba5712840a2000ac229557c32cc656a56836120e194c9934ba392c990
[[email protected] ~]# docker images
REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE
centos1                       latest              e3a5b72ba571        4 seconds ago       197MB
centos                        latest              cc10a4837129        2 minutes ago       197MB
192.168.212.10:5000/centos7   latest              3e6c83d2f374        22 hours ago        435MB
centos7                       latest              3e6c83d2f374        22 hours ago        435MB
centos_with_net               latest              87dde0ff7187        43 hours ago        277MB
registry                      latest              a07e3f32a779        11 days ago         33.3MB
centos                        <none>              d123f4e55e12        11 days ago         197MB
[[email protected] ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
0db570b5560b        d123f4e55e12        "/bin/bash"         20 minutes ago      Up 20 minutes                           stupefied_dubinsky
6be67419cafc        centos_with_net     "bash"              18 hours ago        Up 18 hours   
从上面的案例不难看出docker import将container导入后会成为一个image,而不是恢复为一个container。

另外一点是,docker import可以指定IMAGE[:TAG],说明我们可以为镜像指定新名称。如果本地镜像库中已经存在同名的镜像,则原有镜像的名称将会被剥夺,赋给新的镜像。原有镜像将成为孤魂野鬼,只能通过IMAGE ID进行操作。

- docker save和docker export的区别

1. docker save保存的是镜像(image),docker export保存的是容器(container);

2. docker load用来载入镜像包,docker import用来载入容器包,但两者都会恢复为镜像;

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

希望看过的童鞋多多指教,谢谢!

时间: 2024-10-14 05:27:46

docker save与docker export的区别的相关文章

docker save/load、export/import 区别

区别: save的对象是image,产生的文件需要用load来生成image: export的对象是container,产生的文件需要用import来生成image. save Save one or more images to a tar archive (streamed to STDOUT by default) load Load an image from a tar archive or STDIN export Export a container's filesystem as

Docker load与Docker import

docker load与docker import ? 首先,想要清楚的了解docker load与docker import命令的区别,就必须了解镜像与容器的区别: 镜像:用来启动容器的只读模板,是容器启动所需的rootfs,类似于虚拟机所使用的镜像. 容器:Docker 容器是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化. 镜像是容器的基础,可以简单的理解为镜像是我们启动虚拟机时需要的镜像,容器时虚拟

&lt;Docker学习&gt;4. docker容器的使用

简单的说, 容器是独立运行的一个或一组应用, 以及它们的运行态环境. 对应的, 虚拟机可以理解为模拟运行的一整套操作系统( 提供了运行态环境和其他系统环境) 和跑在上面的应用.容器的运行是基于镜像的. 容器启动 docke run [选项] [镜像] 通过 docker run --help 查看 docke run 的用法 docker run -t -i ubuntu:14.04 /bin/bash -t :选项让Docker分配一个伪终端( pseudo-tty) 并绑定到容器的标准输入上

docker 四.使用docker镜像.

四.Docker镜像的使用 一.Docker 安装 1.1  查看系统版本 [[email protected] ~]# cat /etc/redhat-release CentOS release 6.6 (Final) 1.2 使用epel yum源 [[email protected]~]#rpm -ivh http://mirrors.yun-idc.com/epel/6/i386/epel-release-6-8.noarch.rpm 1.3安装docker [[email prote

docker~save与load的使用

对于没有私有仓库来说,将本地镜像放到其它服务器上执行时,我们可以使用save和load方法,前者用来把镜像保存一个tar文件,后台从一个tar文件恢复成一个镜像,这个功能对于我们开发者来说还是很方便的!下面我们就带大家来实现上面的过程. docker images  查看一下本地镜像 docker save 1316871b180b -o /root/dockerfile/loggermanager1.0.tar 将上面的loggermanager镜像保存成一个tar文件,注意如果目录没有,需要

docker run VS docker exec 的区别

“docker run”和“docker exec”都是 Docker 容器中用于执行的命令.然而,在不同的情况下,它们的使用有着本质上的区别. “docker run”命令 “docker run”通常是在新创建的容器中所使用的命令. 它适用于在没有其他容器运行的情况下,您想要创建一个容器,并且要启动它,然后在其上运行一个进程.它的格式如下所示: docker run [OPTIONS] IMAGE COMMAND [ARG...] 在“docker run”命令之后,您必须通过指定镜像来创建

Docker Machine 和 Docker Engine 的区别

Docker Engine 当人们提到 Docker,一般而言,大家说的是 Docker Engine,如下图:  它是一个 client-server application. Docker Engine 由三个部分组成: Docker 进程(Docker Daemon) REST API:指定了和进程交互的接口 CLI(command line interface):通过 REST API 和 daemon 通信,诸如:docker run <image>, docker ps... Do

docker和kubernetes docker的区别

之前公司的测试环境,刚开始自己搭建虚拟机,然后安装redis,nginx,mq,mysql,tomcat,jdk,marven,还有jekins.前面些还算好点,jekins还是比较麻烦的.然后搭完以后镜像出来,换到另外一台上,换个ip,单独做测试环境.然后每次部署,通过ssh连接到linux服务器,kill -9,然后备份,重启服务器,打war包,真心烦人.后来用了jekins,开发环境发布部署就随便发,测试.感觉非常方便.最近公司开始使用微服务,分布式,大数据等.所以使用docker把微服务

最近学习Docker,将docker所有命令实验了一番,特整理如下:

# docker --helpUsage: docker [OPTIONS] COMMAND [arg...] docker daemon [ --help | ... ] docker [ -h | --help | -v | --version ] A self-sufficient runtime for containers. Options: --config=~/.docker Location of client config files -D, --debug=false Ena