1. 程式人生 > >docker save與docker export的區別

docker save與docker export的區別

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載入。

[root@chy ~]# 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(鏡像)打包保存的工具
[root@chy ~]# 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
[root@chy ~]# docker save -o centos.tar registry centos //打包後的centos.tar 包含了兩個鏡像,一個是registry 一個是centos
我們看到命令行幫助的參數要求指定image(鏡像),實際上也可以針對container進行打包的,例如
[root@chy ~]# 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 打包   
[root@chy ~]# docker save -o c.tar  centos //docker save如果指定的是container,docker save將保存的是容器背後的image。
[root@chy ~]# 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保存為一個基礎鏡像。然後,把這個鏡像分發給其他人使用,比如作為基礎的開發環境。

[root@chy ~]# 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的文件系統進行打包的例如:
[root@chy ~]# 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
[root@chy ~]# docker export -o centos-export.tar 0db570b5560b //docker export需要指定container,不能像docker save那樣指定image或container都可以。
[root@chy ~]# ls -la centos-export.tar //打包後的centos-export.tar
-rw------- 1 root root 205216256 11月 15 21:33 centos-export.tar
將打包的container載入進來使用docker import,例如:
[root@chy ~]# docker import centos-export.tar // centos1:latest
sha256:e3a5b72ba5712840a2000ac229557c32cc656a56836120e194c9934ba392c990
[root@chy ~]# 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
[root@chy ~]# 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可以為鏡像指定新名稱。

希望看過的童鞋多多指教,謝謝!技術分享技術分享

docker save與docker export的區別