溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Docker鏡像與容器的導(dǎo)入導(dǎo)出方法

發(fā)布時(shí)間:2022-03-28 09:18:38 來源:億速云 閱讀:206 作者:iii 欄目:開發(fā)技術(shù)

這篇文章主要介紹“Docker鏡像與容器的導(dǎo)入導(dǎo)出方法”,在日常操作中,相信很多人在Docker鏡像與容器的導(dǎo)入導(dǎo)出方法問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對(duì)大家解答”Docker鏡像與容器的導(dǎo)入導(dǎo)出方法”的疑惑有所幫助!接下來,請(qǐng)跟著小編一起來學(xué)習(xí)吧!

    一、前言

    隨著容器技術(shù)的發(fā)展,現(xiàn)在很多的應(yīng)用程序系統(tǒng)都會(huì)選擇使用docker容器進(jìn)行部署,但是有時(shí)候使用docker容器進(jìn)行部署的時(shí)候會(huì)遇到問題,比如說我們的應(yīng)用程序里面需要依賴其他第三方的鏡像,如果這時(shí)候服務(wù)器是在內(nèi)網(wǎng)不能連接外網(wǎng)的情況下,那么就無法部署了。基于這種情況,docker官方支持docker鏡像和容器的導(dǎo)入和導(dǎo)出,我們可以在一臺(tái)能夠聯(lián)網(wǎng)的機(jī)器上面編譯鏡像,然后導(dǎo)出鏡像或者容器,最后把導(dǎo)出的鏡像或者容器上傳到內(nèi)網(wǎng)服務(wù)器,然后在導(dǎo)入鏡像或者容器,這樣就可以了。

    鏡像和容器的導(dǎo)入、導(dǎo)出操作主要涉及到下面的幾個(gè)命令:save、load、export、import。

    演示過程中我們是在本地生成鏡像或者容器,然后把鏡像或者容器導(dǎo)出,最后上傳到阿里云服務(wù)器演示導(dǎo)入功能。

    我們使用VS 2019創(chuàng)建一個(gè)ASP.NET Core MVC的項(xiàng)目,添加Dockerfile文件:

    # 使用運(yùn)行時(shí)鏡像
    FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim
    # 設(shè)置工作目錄
    WORKDIR /app
    # 把目錄下的內(nèi)容都復(fù)制到當(dāng)前目錄下
    COPY . .
    # 暴露80端口
    EXPOSE 80
    # 運(yùn)行鏡像入口命令和可執(zhí)行文件名稱
    ENTRYPOINT ["dotnet", "DockerDemo.dll"]

    然后發(fā)布項(xiàng)目。我們查看現(xiàn)有的docker鏡像

    Docker鏡像與容器的導(dǎo)入導(dǎo)出方法

    可以看到:現(xiàn)在只有兩個(gè).net core的鏡像。我們生成鏡像:

    docker build -t dockerdemo .

    如下圖所示:

    Docker鏡像與容器的導(dǎo)入導(dǎo)出方法

    查看生成后的鏡像

    Docker鏡像與容器的導(dǎo)入導(dǎo)出方法

    然后我們根據(jù)生成的鏡像來運(yùn)行容器,首先查看現(xiàn)有的容器:

    Docker鏡像與容器的導(dǎo)入導(dǎo)出方法

    可以看到這時(shí)沒有任何容器。我們運(yùn)行容器:

    Docker鏡像與容器的導(dǎo)入導(dǎo)出方法

    可以看到:容器已經(jīng)運(yùn)行成功了。

    二、docker鏡像的導(dǎo)入和導(dǎo)出

    1、docker鏡像的導(dǎo)出

    涉及到的命令:

    docker save [options]  images [images...]

    我們使用上面的鏡像來演示鏡像的導(dǎo)出:

    docker save -o dockerdemo.tar  dockerdemo

    如下圖所示:

    Docker鏡像與容器的導(dǎo)入導(dǎo)出方法

    這里導(dǎo)出的時(shí)候指定了導(dǎo)出后文件的路徑,如果不指定路徑,默認(rèn)是當(dāng)前文件夾。

    或者也可以使用下面的命令導(dǎo)出:

    docker save > dockerdemo.tar dockerdemo

    其中-o和>表示輸出到文件,dockerdemo.tar為導(dǎo)出的目標(biāo)文件,dockerdemo為源鏡像名。

    我們查看本地是否有了導(dǎo)出后的文件:

    Docker鏡像與容器的導(dǎo)入導(dǎo)出方法

    可以看到目錄下面已經(jīng)有了剛才導(dǎo)出的文件。

    2、docker鏡像的導(dǎo)入

    我們首先使用XFtp把上面導(dǎo)出的鏡像文件上傳到阿里云服務(wù)器

    Docker鏡像與容器的導(dǎo)入導(dǎo)出方法

    然后進(jìn)入文件所在的目錄

    Docker鏡像與容器的導(dǎo)入導(dǎo)出方法

    我們查看阿里云服務(wù)器上面有哪些鏡像:

    Docker鏡像與容器的導(dǎo)入導(dǎo)出方法

    從上圖中看出:現(xiàn)在阿里云服務(wù)器上面沒有任何的鏡像。

    涉及到的導(dǎo)入命令load

    docker load [options]

    接下來我們導(dǎo)入剛才上傳的鏡像。

    docker load -i dockerdemo.tar

    如下圖所示:

    Docker鏡像與容器的導(dǎo)入導(dǎo)出方法

    或者也可以使用下面的命令

    docker load < dockerdemo.tar

    其中-i(i即imput)和<表示從文件輸入。上面的兩個(gè)命令都會(huì)成功導(dǎo)入鏡像以及相關(guān)元數(shù)據(jù),包括tag信息。

    導(dǎo)入后查看鏡像:

    Docker鏡像與容器的導(dǎo)入導(dǎo)出方法

    可以看到有了我們剛才導(dǎo)入的鏡像。導(dǎo)入了鏡像以后就可以根據(jù)鏡像運(yùn)行容器,最后運(yùn)行應(yīng)用程序。

    三、docker容器的導(dǎo)入和導(dǎo)出

    接下來我們演示容器的導(dǎo)入和導(dǎo)出。

    1、docker容器的導(dǎo)出

    涉及到的命令export。

    docker export [options]  container

    我們把上面生成的容器導(dǎo)出:

    docker export -o D:\containers\dockerdemocontainer.tar dockerdemo

    如下圖所示:

    Docker鏡像與容器的導(dǎo)入導(dǎo)出方法

    其中,-o表示輸出的文件,這里指定了輸出的路徑,如果沒有指定路徑,則默認(rèn)生成到當(dāng)前文件夾。dockerdemocontainer.tar為目標(biāo)文件,dockerdemo為源容器名。

    我們查看目錄下面是否生成了導(dǎo)出的容器:

    Docker鏡像與容器的導(dǎo)入導(dǎo)出方法

    2、docker容器的導(dǎo)入

    我們首先把導(dǎo)出的容器使用XFTP上傳到阿里云服務(wù)器。

    Docker鏡像與容器的導(dǎo)入導(dǎo)出方法

    涉及到的導(dǎo)入命令import。

    docker import [options] file|URL|- [REPOSITORY[:TAG]]

    如下圖所示

    Docker鏡像與容器的導(dǎo)入導(dǎo)出方法

    我們導(dǎo)入剛才上傳的容器

    docker import [options] file|URL|- [REPOSITORY[:TAG]]

    dockerdemocontainer.tar表示要導(dǎo)入的容器,dockerdemo:imp表示導(dǎo)入后的鏡像名稱,imp表示給導(dǎo)入的鏡像打tag。

    如下圖所示

    Docker鏡像與容器的導(dǎo)入導(dǎo)出方法

    然后我們查看鏡像:

    Docker鏡像與容器的導(dǎo)入導(dǎo)出方法

    可以看到這時(shí)有我們剛才導(dǎo)入的鏡像了,導(dǎo)入的鏡像tag為imp。

    四、總結(jié)

    下面我們來總結(jié)一下鏡像和容器導(dǎo)入導(dǎo)出的區(qū)別:

    • 鏡像導(dǎo)入是一個(gè)復(fù)制的過程,容器導(dǎo)入是將當(dāng)前容器變成一個(gè)新的鏡像。

    • docker save命令保存的是鏡像(image),docker export命令保存的是容器(container)。

    • export命令導(dǎo)出的tar文件略小于save命令導(dǎo)出的。

    • 因?yàn)閑xport導(dǎo)出的是容器,export導(dǎo)出的文件在import導(dǎo)入時(shí),無法保留鏡像所有的歷史(即每一層layer信息),不能進(jìn)行回滾操作。而save是根據(jù)鏡像來的,所以導(dǎo)入時(shí)可以完整保留下每一層layer信息。如下圖所示:dockerdemo:latest是save導(dǎo)出load導(dǎo)入的,dockerdemo:imp是export導(dǎo)出import導(dǎo)入的。

    Docker鏡像與容器的導(dǎo)入導(dǎo)出方法

    • docker load不能對(duì)導(dǎo)入的鏡像重命名,而docker import導(dǎo)入可以為鏡像指定新名稱。例如,上面導(dǎo)入的時(shí)候指定dockerdeom:imp。

    對(duì)于是使用鏡像導(dǎo)入導(dǎo)出還是使用容器導(dǎo)入導(dǎo)出該如何選擇呢?有下面兩點(diǎn)建議:

    • 若是只想備份image,使用save和load。

    • 若是在啟動(dòng)容器后,容器內(nèi)容有變化,需要備份,則使用export和import。 

    到此,關(guān)于“Docker鏡像與容器的導(dǎo)入導(dǎo)出方法”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!

    向AI問一下細(xì)節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI