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.使用鏡像運行容器
使用剛剛導入的鏡像,運行為一個容器:
查看容器運行狀況:
進入容器:
參考文章: https://blog.csdn.net/weixin_36343850/article/details/80553680