1. 程式人生 > >Docker之匯入匯出映象(第十二篇)

Docker之匯入匯出映象(第十二篇)

   前幾篇文章我們已經學會了怎麼使用第三方線上倉庫和docker提供的倉庫去拉取映象,也學會了自己去製作映象,那怎麼將自己製作的映象匯出來,在別的機器也能執行呢?

   首先我們還是使用前幾篇的例子繼續操作,如果還沒有看過的,這裡有一個傳送門《我的Docker

啟動jpress映象

docker run -d -p 8888:8080 jpress


第一種匯出映象方案:export

docker export 290b8d571b59e137d62be1 > update.tar

290b8d571b59e137d62be1 是指映象容器ID

檢視一下映象是否已經匯出來了

那這個匯出來的檔案放在哪兒了呢?就在當前docker終端目錄下:


第一種匯入映象方案:import

那我們再來實現把這個映象匯入到容器中,先看一下docker import --help的幫助文件


docker import - update < update.tar

看一下是否匯入成功呢?

可以看出來,確實已經匯出來了,確實已經存在,那麼我們再來看執行起來

docker run -d -p 8888:8080 update

發現出現異常,說後面沒有給出命令,可明明我的jpress也是這麼執行的啊,那到底錯在哪兒呢?於是我又去執行我的jpress看看到底有什麼問題?

一看完美執行,一下子懵逼了,到底錯在哪兒呢?

我們再來看一下程序這麼說:docker ps

一看原來jpress在執行的時候,系統預設給他加了“

catalina.sh run”命令,所以我們也要來搞一下這個命令,於是就有了下面這個命令:

docker run -d -p 8888:8080 update catalina.sh run

一執行又傻眼了,明明是根據提示來插入命令的,然後我們看下錯誤資訊,原來他是沒有找到我們的命令所在地,最後把命令的路徑寫全了,終於可以正常啟動了。

docker run -d -p 8888:8080 update /usr/local/tomcat/bin/catalina.sh run

進入容器內部檢視之前拷貝的內容是否存在

docker exec -it 容器ID/name bash


發現確實存在,完美執行起來了。


第二種匯入匯出方案:save 和 load

匯出save

jpress映象匯出為jpress1.tar 檔案中

docker save -o jpress1.tar  f0a8e3d4d65a


我們已經看到jpress檔案被匯出到jpress1.tar中了

匯入load

我們先刪除之前的jpress映象


然後再匯入load新的(jps.tar 是第二天save出來的結果,和jpress1.tar一樣

docker load -i jps.tar

這裡我們可以看到和import本質上的區別,load匯入的映象是包含之前映象的所有修改記錄,是可以追本溯源的。然後我們再來看一下本地的映象庫

docker images

又有了,我們來執行一下,看下之前的檔案是否都還在映象裡面


可以看出之前的檔案都存在,太棒了!

瀏覽器訪問一下,看看是否能正常訪問,可以正常訪問,這下我就放心了。


第一種方案和第二種方案的區別(load 和 import 區別)

1)load 是用來匯入映象儲存檔案到本地映象庫

2)import 是匯入一個容器的快照到本地映象庫

3)容器快照檔案import將丟棄所有的歷史記錄和元資料資訊(即僅儲存容器當時的快照狀態),從容器快照檔案匯入時可以重新指定標籤等元資料資訊。

4)映象儲存檔案load將儲存完整記錄,體積也要大

需要注意兩種方法不可混用。
        如果使用import匯入save產生的檔案,雖然匯入不提示錯誤,但是啟動容器時會提示失敗,會出現類似"docker: Error response from daemon: Container command not found or does not exist"的錯誤。