目錄
- 一、使用 export 和 import
- 1,查看本機的容器
- 2,導(dǎo)出鏡像
- 3,導(dǎo)入鏡像
- 二、使用 save 和 load
- 1,查看本機的容器
- 2,保存鏡像
- 3,載入鏡像
- 附:兩種方案的差別
- 1,文件大小不同
- 2,是否可以對鏡像重命名
- 3,是否可以同時將多個鏡像打包到一個文件中
- 4,是否包含鏡像歷史
- 5,應(yīng)用場景不同
一、使用 export 和 import
1,查看本機的容器
這兩個命令是通過容器來導(dǎo)入、導(dǎo)出鏡像。首先我們使用 docker ps -a 命令查看本機所有的容器。
2,導(dǎo)出鏡像
(1)使用 docker export 命令根據(jù)容器 ID 將鏡像導(dǎo)出成一個文件。
docker export f299f501774c > hangger_server.tar
(2)上面命令執(zhí)行后,可以看到文件已經(jīng)保存到當(dāng)前的 docker 終端目錄下。
3,導(dǎo)入鏡像
(1)使用 docker import 命令則可將這個鏡像文件導(dǎo)入進來。
docker import - new_hangger_server < hangger_server.tar
(2)執(zhí)行 docker images 命令可以看到鏡像確實已經(jīng)導(dǎo)入進來了。
二、使用 save 和 load
1,查看本機的容器
這兩個命令是通過鏡像來保存、加載鏡像文件的。首先我們使用 docker images 命令查看本機所有的鏡像。
2,保存鏡像
(1)下面使用 docker save 命令根據(jù) ID 將鏡像保存成一個文件。
docker save 0fdf2b4c26d3 > hangge_server.tar
(2)我們還可以同時將多個 image 打包成一個文件,比如下面將鏡像庫中的 postgres 和 mongo 打包:
docker save -o images.tar postgres:9.6 mongo:3.4
3,載入鏡像
使用 docker load 命令則可將這個鏡像文件載入進來。
docker load < hangge_server.tar
附:兩種方案的差別
特別注意:兩種方法不可混用。
如果使用 import 導(dǎo)入 save 產(chǎn)生的文件,雖然導(dǎo)入不提示錯誤,但是啟動容器時會提示失敗,會出現(xiàn)類似"docker: Error response from daemon: Container command not found or does not exist"的錯誤。
1,文件大小不同
export 導(dǎo)出的鏡像文件體積小于 save 保存的鏡像
2,是否可以對鏡像重命名
docker import 可以為鏡像指定新名稱
docker load 不能對載入的鏡像重命名
3,是否可以同時將多個鏡像打包到一個文件中
docker export 不支持
docker save 支持
4,是否包含鏡像歷史
export 導(dǎo)出(import 導(dǎo)入)是根據(jù)容器拿到的鏡像,再導(dǎo)入時會丟失鏡像所有的歷史記錄和元數(shù)據(jù)信息(即僅保存容器當(dāng)時的快照狀態(tài)),所以無法進行回滾操作。
而 save 保存(load 加載)的鏡像,沒有丟失鏡像的歷史,可以回滾到之前的層(layer)。
5,應(yīng)用場景不同
docker export 的應(yīng)用場景:主要用來制作基礎(chǔ)鏡像,比如我們從一個 ubuntu 鏡像啟動一個容器,然后安裝一些軟件和進行一些設(shè)置后,使用 docker export 保存為一個基礎(chǔ)鏡像。然后,把這個鏡像分發(fā)給其他人使用,比如作為基礎(chǔ)的開發(fā)環(huán)境。
docker save 的應(yīng)用場景:如果我們的應(yīng)用是使用 docker-compose.yml 編排的多個鏡像組合,但我們要部署的客戶服務(wù)器并不能連外網(wǎng)。這時就可以使用 docker save 將用到的鏡像打個包,然后拷貝到客戶服務(wù)器上使用 docker load 載入。