docker導(dǎo)入導(dǎo)出鏡像、容器,及啟動容器失敗的解決過程
前言
隨著容器技術(shù)的發(fā)展,現(xiàn)在很多的應(yīng)用程序系統(tǒng)都會選擇使用docker容器進(jìn)行部署,但是有時候使用docker容器進(jìn)行部署的時候會遇到問題,比如說我們的應(yīng)用程序里面需要依賴其他第三方的鏡像,如果這時候服務(wù)器是在內(nèi)網(wǎng)不能連接外網(wǎng)的情況下,那么就無法部署了。
基于這種情況,docker官方支持docker鏡像和容器的導(dǎo)入和導(dǎo)出,我們可以在一臺能夠聯(lián)網(wǎng)的機器上面編譯鏡像,然后導(dǎo)出鏡像或者容器,最后把導(dǎo)出的鏡像或者容器上傳到內(nèi)網(wǎng)服務(wù)器,然后再導(dǎo)入鏡像或者容器,這樣就可以了。
1.docker鏡像的導(dǎo)入和導(dǎo)出
1.1 docker鏡像的導(dǎo)出
- 命令:
docker save [options] images [images……]
- 使用命令:
docker save -o /home/dockeruser/lgr/epower.tar 鏡像名稱
或
docker save > /home/dockeruser/lgr/epower.tar 鏡像名稱
例子:
docker save 192.162.100.92:5000/my_pro/front_dev:1.1 > /home/dockeruser/lgr/myprofrontdev.tar
- 解釋:
-o(即output)或>表示輸出到文件;
/home/dockeruser/lgr/epower.tar指定導(dǎo)出的位置路徑,如果不指定路徑,默認(rèn)為當(dāng)前文件夾;
- 注意:
一般使用鏡像名稱來做導(dǎo)出。如果用 docker save -o /home/dockeruser/lgr/epower.tar 鏡像id 導(dǎo)出(即使用鏡像id來做導(dǎo)出),后面再導(dǎo)入此鏡像后,會發(fā)現(xiàn)鏡像的名稱和tag都是none,就還需要使用docker tag來重命名鏡像了。
1.2 docker鏡像的導(dǎo)入
首先需要使用xftp或其他工具將上面的.tar文件上傳到需要導(dǎo)入鏡像的服務(wù)器中。
- 命令:
docker load [options]
- 使用命令:
docker load -i epower.tar
或
docker load < epower.tar
例子:
docker load < /usr/local/epower/lgr/myprofrontdev.tar
- 解釋:
-i(即input)或<表示從文件輸入;
使用docker images命令可以查看是否導(dǎo)入成功,導(dǎo)入成功就可以根據(jù)鏡像運行容器;
由于load命令不能對鏡像重命名,我們可以使用docker tag 鏡像id 鏡像新名稱:新tag 命令給鏡像重命名;
2.docker容器的導(dǎo)入和導(dǎo)出
2.1 docker容器的導(dǎo)出
- 命令:
docker export [options] container
- 使用命令:
docker export -o /home/dockeruser/lgr/econtainer.tar 0a64dafa5db9
解釋:
- -o表示輸出到文件;
- /home/dockeruser/lgr/econtainer.tar指定導(dǎo)出的位置路徑;
- 0a64dafa5db9為容器id;
2.2 docker容器的導(dǎo)入
首先需要使用xftp或其他工具將上面的.tar文件上傳到需要導(dǎo)入鏡像的服務(wù)器中。
- 命令:
docker import [options] file|url| -[repository[:tag]]
- 使用命令:
docker import econtainer.tar epower:latest
解釋:
- econtainer.tar表示導(dǎo)入的容器;
- epower:latest表示給導(dǎo)入后的鏡像進(jìn)行重命名,latest表示給導(dǎo)入的鏡像打tag;
使用docker images命令可以查看是否導(dǎo)入成功,導(dǎo)入成功就可以根據(jù)鏡像運行容器;
3.總結(jié)
- 鏡像導(dǎo)入是一個復(fù)制的過程;容器的導(dǎo)入是將當(dāng)前容器變成一個新的鏡像;
- docker save命令保存的是鏡像;docker export命令保存的是容器;
- export命令導(dǎo)出的tar文件略小于save命令導(dǎo)出的;
- export命令導(dǎo)出的是容器,export導(dǎo)出的文件在import導(dǎo)入時,無法保留鏡像的所有歷史(即每一層layer信息),也就不能進(jìn)行回滾操作。而save命令導(dǎo)出的是鏡像,所以導(dǎo)入時可以完整保留每一層layer信息。docker history 鏡像id命令可以查詢每一層layer信息。
- load命令不能對鏡像重命名;import命令可以對鏡像重命名;
4.使用建議
如果只是為了備份鏡像,則使用save和load命令;
如果在啟動容器后,容器內(nèi)容有變化之后需要備用,則使用export和import命令;
5.遇到問題
- 問題:
在使用export命令導(dǎo)出容器,import導(dǎo)入為鏡像后,使用命令
docker run -p 8812:8889 --name xxx -d 753 啟動容器失敗,
報錯如下:
docker: Error response from daemon: No command specified.
See 'docker run --help'.
錯誤提示缺少明確的命令;
- 解決方法:
在導(dǎo)出容器的服務(wù)器使用docker ps --no-trunc命令查看具體的command,然后將command加入到啟動命令最后即可。
docker run -p 8812:8889 --name xxx -d 753 /bin/sh -c 'java -Duser.timezone=Asia/Shanghai -cp /app/resources:/app/classes:/app/libs/* com.fp.epower.EpowerApplication'
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
如何解決docker logs無法實時輸出腳本打印的內(nèi)容
這篇文章主要介紹了如何解決docker logs無法實時輸出腳本打印的內(nèi)容問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-07-07Docker 網(wǎng)絡(luò)模式(四種)詳細(xì)介紹
這篇文章主要介紹了Docker 網(wǎng)絡(luò)模式詳細(xì)介紹的相關(guān)資料,這里提供了四種網(wǎng)絡(luò)模式的介紹,Docker 作為輕量級容器技術(shù),很多比較不錯的功能,網(wǎng)絡(luò)不是多好,這里就整理下,需要的朋友可以參考下2016-11-11docker環(huán)境下數(shù)據(jù)庫的備份(postgresql, mysql) 實例代碼
這篇文章主要介紹了docker環(huán)境下數(shù)據(jù)庫的備份(postgresql, mysql) ,需要的朋友可以參考下2019-05-05