導入與導出
首先明確的是建議優先使用Docker倉庫,特別是對於Docker集羣而言 Docker倉庫非常重要,但是某些應用場景下比如單機環境下使用docker-compse編排應用,如果沒有鏡像倉庫是不是就不能把docker鏡像分發給其它的主機了呢?
答案是否定的,對於這種單機或者小規模環境,我們可以使用 docker save 與 docker load 命令來完成鏡像的分發,甚至通過Linux SSH與管道技術相結合,只需要一條命令可以直接把鏡像分發給目標主機。
總而言之當遇到上述環境而且沒有鏡像倉庫時,需要把一臺機器上的鏡像拷貝到另一臺機器,試試 docker save 與 docker load 命令吧。
舉個栗子
-
HOST A 導出並壓縮docker 鏡像
docker save centos | gzip > img-centos.tar.gz scp img-centos.tar.gz root@hostb:/root/
-
HOST B 導入鏡像
gzip -dc img-centos.tar.gz | docker load
-
批量操作
如果你需要批量導出/導入鏡像,可以結合shell 命令與管道完成。批量導出
for i in `docker images | awk '/irm/ {print $3}'`;do echo $i ; docker save $i | gzip > ${i}.gz ;sleep 2 ;done
其中awk 匹配鏡像名稱的關鍵字,print $3 輸出第三個字段也就是鏡像ID。
批量導入
for i in `ls`; do echo $i; gzip -dc $i | docker load ; sleep 5;done
命令幫助
-
save 命令
- load命令
擴展
結合 ssh 與 pv 命令的話,利用 Linux強大的管道,只用一個命令完成從一個機器將鏡像分發到另一臺機器。
注意 pv 命令用於顯示進度條,你可能需要單獨安裝這個命令。