首頁 >運維 >Docker >docker save和docker export有什麼差別

docker save和docker export有什麼差別

王林
王林轉載
2020-06-17 17:44:084239瀏覽

docker save和docker export有什麼差別

首先,我們來分別說明docker save和docker export:

docker save

docker的命令列接口設計得很優雅,很多指令的幫助直接在後面加上--help就可以查看。

docker save的幫助如下:

>docker save --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打包保存的工具。

例如我們想要將鏡像庫中的postgres和mongo打包,那麼可以執行:

docker save -o images.tar postgres:9.6 mongo:3.4

打包之後的images.tar包含postgres:9.6和mongo:3.4這兩個鏡像。

雖然命令列參數要求指定image,實際上也可以對container進行打包,例如:

>docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
3623943d369f        postgres:9.6        "docker-entrypoint..."   3 hours ago         Up 3 hours          5432/tcp            postgres
>docker save -o b.tar postgres
>docker save -o c.tar postgres:9.6
>ls -al
-rwxrwxrwx 1 root root 277886464 8月  26 14:40 b.tar
-rwxrwxrwx 1 root root 277886464 8月  26 14:41 c.tar

透過以上指令可以看到,b.tar和c.tar是完全一模一樣的。這說明,docker save如果指定的是container,docker save將保存的是容器背後的image。

將打包後的映像載入進來使用docker load,例如:

docker load -i images.tar

上述指令將會把postgres:9.6和mongo:3.4載入進來,如果本地映像庫已經存在這兩個鏡像,將會被覆蓋。

docker save的應用程式場景是,如果你的應用程式是使用docker-compose.yml編排的多個映像組合,但你要部署的客戶伺服器並不能連外網。這時,你可以使用docker save將用到的映像打個包,然後拷貝到客戶伺服器上使用docker load載入。

docker export

照例查看下docker export的幫助:

>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的文件系統進行打包的。例如:

docker export -o postgres-export.tar postgres

docker export需要指定container,不能像docker save那樣指定image或container都可以。

將打包的container載入進來使用docker import,例如:

docker import postgres-export.tar postgres:latest

從上面的命令可以看出,docker import將container導入後會變成一個image,而不是恢復為一個container。

另外一點是,docker import可以指定IMAGE[:TAG],說明我們可以為映像指定新名稱。如果本地鏡像庫中已經存在同名的鏡像,則原有鏡像的名稱將會被剝奪,並賦給新的鏡像。原有鏡像將成為孤魂野鬼,只能透過IMAGE ID進行操作。

docker export的應用場景主要用來製作基礎映像,例如你從ubuntu映像啟動一個容器,然後安裝一些軟體和進行一些設定後,使用docker export儲存為一個基礎映像。然後,把這個鏡像分發給其他人使用,例如作為基礎的開發環境。

docker save和docker export的區別

  • docker save保存的是映像(image),docker export保存的是容器(container) ;

  • docker load用來載入映像包,docker import用來載入容器包,但兩者都會恢復為映像;

  • docker load不能對載入的映像重新命名,而docker import可以為映像指定新名稱。

推薦教學:docker

以上是docker save和docker export有什麼差別的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:juejin.im。如有侵權,請聯絡admin@php.cn刪除