Docker容器遷移之導(dǎo)入和導(dǎo)出容器方式
Docker容器遷移導(dǎo)入和導(dǎo)出容器
因?yàn)楸镜匚锢頇C(jī)配置完了,所以要把服務(wù)器上的容器移到本機(jī)中,此時(shí)可以使用docker的導(dǎo)入導(dǎo)出功能,這也是docker自身提供的一個(gè)重要特征。
1、導(dǎo)出容器
導(dǎo)出容器可以導(dǎo)出一個(gè)已經(jīng)創(chuàng)建的容器到一個(gè)文件,不管容器處于什么狀態(tài),可以使用docker export 命令。
命令格式為:
docker export [-o|--output[=""]] CONTATINER
其中可以通過-o來指定導(dǎo)出的tar文件名,也可以直接通過重定向來實(shí)現(xiàn)。
看下我的容器列表:

這里我將ubuntu 的容器導(dǎo)出到文件ubuntu_run.tar中:

注:這里可以填容器的name ,也可以填容器id的前三位
另一種格式為:
docker export 容器id/name >文件名.tar
可以使用scp 指令將文件進(jìn)行傳送:
scp ubuntu_run.tar root@124.207.96.94:/root/
2、導(dǎo)入容器
導(dǎo)入的文件可以使用docker import 命令導(dǎo)入變成鏡像,該命令的格式為:
docker import [-c|--change[=[]]] [-m|--message[=MESSAGE]] file|URL|-[REPOSITORY[:YAG]]
其中-c 選項(xiàng)可以在導(dǎo)入的同時(shí)執(zhí)行對(duì)容器進(jìn)行修改的Dockerfile指令(網(wǎng)絡(luò)等修改)
下面將導(dǎo)出的文件導(dǎo)入到系統(tǒng)中:

導(dǎo)入成功
另外 docker load 命令也可以導(dǎo)入一個(gè)鏡像存儲(chǔ)文件,但是跟docker import 命令是有區(qū)別的:
docker import:丟棄了所有的歷史記錄和元數(shù)據(jù)信息,僅保存容器當(dāng)時(shí)的快照狀態(tài)。在導(dǎo)入的時(shí)候可以重新制定標(biāo)簽等元數(shù)據(jù)信息。docker load:將保存完整記錄,體積較大。
Docker鏡像導(dǎo)出導(dǎo)入以及和容器導(dǎo)出導(dǎo)入的區(qū)別
鏡像導(dǎo)出
命令
docker save -o output.tar ID/NAME:VERSION 或 docker save > output.tar ID/NAME:VERSION
其中-o和>表示輸出到文件,output.tar為導(dǎo)出的文件的名稱(通常導(dǎo)出為.tar文件),ID為鏡像id,NAME表示鏡像名,VERSION為版本號(hào)
注意:以ID和以NAME的方式導(dǎo)出,它們在導(dǎo)入的時(shí)候的效果是不一樣的,詳細(xì)看下面導(dǎo)入的時(shí)候的演示。
eg:
C:\Users\32631>docker images REPOSITORY TAG IMAGE ID CREATED SIZE newubuntu latest d60aa43d53cf 11 minutes ago 73.9MB <none> <none> e816e4dc14d5 12 minutes ago 73.9MB ubuntu latest 4e2eef94cd6b 10 days ago 73.9MB C:\Users\32631>docker save -o outputimage.tar 4e2eef94cd6b

鏡像導(dǎo)入
命令:
docker load -i output.tar 或 docker load < output.tar
其中-i和<表示從文件輸入。會(huì)成功導(dǎo)入鏡像及相關(guān)元數(shù)據(jù),包括tag信息
eg1 :演示了導(dǎo)入前,查看現(xiàn)存的鏡像的信息,然后刪除該鏡像,再導(dǎo)入之前該鏡像以name方式被導(dǎo)出的文件,再查看現(xiàn)存的鏡像信息。
會(huì)發(fā)現(xiàn):導(dǎo)入的鏡像ID和導(dǎo)入前的鏡像ID是一樣的。
C:\Users\32631>docker images REPOSITORY TAG IMAGE ID CREATED SIZE newubuntu latest d60aa43d53cf 21 minutes ago 73.9MB C:\Users\32631>docker image rm d60aa43d53cf Untagged: newubuntu:latest Deleted: sha256:d60aa43d53cfdd69615366b5eb9bdd88f76b78648e0ca57be8851355037f7200 Deleted: sha256:d7c2a25e228ad914795f8f4f1110dcd738819461090bdb27558fc533056a187c C:\Users\32631>docker load -i outputimage1.tar d7c2a25e228a: Loading layer [==================================================>] 76.25MB/76.25MB Loaded image: newubuntu:latest C:\Users\32631>docker images REPOSITORY TAG IMAGE ID CREATED SIZE newubuntu latest d60aa43d53cf 22 minutes ago 73.9MB
eg2 :演示了以id形式導(dǎo)出的文件被導(dǎo)入后的鏡像信息:
會(huì)發(fā)現(xiàn)鏡像信息里頭缺失了name和tag的信息。
C:\Users\32631>docker images REPOSITORY TAG IMAGE ID CREATED SIZE newubuntu latest d60aa43d53cf 22 minutes ago 73.9MB C:\Users\32631>docker load -i outputimage.tar 2ce3c188c38d: Loading layer [==================================================>] 75.23MB/75.23MB ad44aa179b33: Loading layer [==================================================>] 1.011MB/1.011MB 35a91a75d24b: Loading layer [==================================================>] 15.36kB/15.36kB a4399aeb9a0e: Loading layer [==================================================>] 3.072kB/3.072kB Loaded image ID: sha256:4e2eef94cd6b93dd4d794c18b45c763f72edc22858e0da5b6e63a4566a54c03c C:\Users\32631>docker images REPOSITORY TAG IMAGE ID CREATED SIZE newubuntu latest d60aa43d53cf 23 minutes ago 73.9MB <none> <none> 4e2eef94cd6b 10 days ago 73.9MB
容器導(dǎo)入導(dǎo)出和鏡像導(dǎo)入導(dǎo)出的區(qū)別
1、export命令導(dǎo)出的tar文件略小于save命令導(dǎo)出的
2、export命令是從容器(container)中導(dǎo)出tar文件,而save命令則是從鏡像(images)中導(dǎo)出
3、基于第二點(diǎn),export導(dǎo)出的文件再import回去時(shí),無法保留鏡像所有歷史(即每一層layer信息,這塊內(nèi)容在講解Dockerfile的時(shí)候會(huì)細(xì)說),不能進(jìn)行回滾操作;而save是依據(jù)鏡像來的,所以導(dǎo)入時(shí)可以完整保留下每一層layer信息。通過命令docker history name:tag可以查看
建議
可以依據(jù)具體使用場景來選擇命令
若是只想備份images,使用save、load即可
若是在啟動(dòng)容器后,容器內(nèi)容有變化,需要備份,則使用export、import
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Docker創(chuàng)建enrollment token錯(cuò)誤異常解析及解決方案
部署完kibana,需要通過enrollment token方式來連接elasticsearch,此時(shí)需要在elasticsearch中創(chuàng)建enrollment token,這篇文章主要介紹了Docker創(chuàng)建enrollment token錯(cuò)誤異常解析及解決方案,需要的朋友可以參考下2024-04-04
Mac下部署springBoot項(xiàng)目到Docker中(demo)
本文通過一個(gè)簡單的demo給大家分享Mac下部署springBoot項(xiàng)目到Docker的方法,感興趣的朋友一起看看吧2018-01-01
關(guān)于docker清理Overlay2占用磁盤空間的問題(親測有效)
使用Docker過程中,長時(shí)間運(yùn)行服務(wù)容器,導(dǎo)致不能進(jìn)行上傳文件等操作,今天通過本文給大家詳細(xì)介紹下docker清理Overlay2占用磁盤空間的相關(guān)知識(shí),感興趣的朋友一起看看吧2022-03-03
docker部署mysql8并設(shè)置可遠(yuǎn)程連接
本文主要介紹了docker部署mysql8并設(shè)置可遠(yuǎn)程連接,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07
解決docker安裝jenkins容器內(nèi)無法訪問外網(wǎng)
這篇文章為大家主要介紹了docker安裝jenkins容器內(nèi)無法訪問外網(wǎng)的問題解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11

