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"的錯誤。