docker容器的遷移
阿新 • • 發佈:2018-11-12
0.背景
需要把雲伺服器上用docker搭建的大資料叢集遷移到本地的主機上。大資料叢集有一個master主節點和slave01、slave02兩個計算節點。
- 雲上伺服器和本地的主機的數量都只有一臺,是採用docker虛擬化的方式搭建大資料叢集。
- 要求遷移後資料不會丟失。
1.用export&import 還是 save & load ?
export&import 和 save & load 是docker中的兩組命令,我們先主要看看他們的區別:
型別 | 作用 | 作用物件 | 能否保留資料 | 匯出的內容 | 主要的應用場景 |
---|---|---|---|---|---|
export & import | 用來將container的檔案系統進行打包的 | container | 不可以 | 一個Linux系統的檔案目錄 | 製作基礎映象 |
save & load | 用來將一個或者多個image打包 | image(container實際上也可以,但其實際上作用的是container下的image) | 可以 | 一個分層的檔案系統(相對於前者比較大,因為多層檔案系統中可能有東西是重合的) | 打包多個映象 |
具體的區別可以檢視這篇部落格docker save與docker export的區別,寫得很清晰。
基於以上對比,save&load 方式可以保留資料,所以使用save&load這種方式。
2.定製映象
由於save&load實際操作的是image,所以匯出之前,要先使用commit命令把容器中相對於其底層映象的修改,提交為一層檔案系統,與原有的image結合構成一個新的image。新的image中會包含所有修改的內容。
(ps:這種製作映象的方式不被提倡,因為這樣做會保留一些元資料資訊,導致image過大,如果想用於製作一個簡潔的映象,需使用DockerFile的方式定製映象,這裡不做詳述)
這樣以一個容器salve02為例,將它提交到一個叫做theslave02的映象上,再打上標籤
提交完成後我們可以看到這麼一個image:
3.匯出映象
把映象匯出為一個輸出檔案:
檢視匯出的檔案:
4.傳輸檔案
將匯出的輸出檔案通過scp
的方式傳送到本地的主機上:
5.匯入映象
在本地主機上,將受到的檔案匯入為映象檔案:
檢視映象檔案:
6.使用映象執行容器
使用剛剛匯入的映象,執行為一個容器:
檢視容器執行狀況:
進入容器: