溫馨提示×

溫馨提示×

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

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

Docker和容器鏡像的區(qū)別是什么

發(fā)布時間:2021-12-31 09:09:20 來源:億速云 閱讀:116 作者:柒染 欄目:云計算

本篇文章為大家展示了Docker和容器鏡像的區(qū)別是什么,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

很多剛剛接觸容器技術(shù)的朋友,不容易弄清楚容器,容器鏡像和Docker這幾個詞的區(qū)別和聯(lián)系。

Docker和容器鏡像的區(qū)別是什么

我們首先來看容器和容器鏡像。舉個例子,執(zhí)行命令行docker search nginx,搜索結(jié)果的一條條記錄就是一個個容器鏡像。

Docker和容器鏡像的區(qū)別是什么

所謂鏡像,就是一個靜態(tài)概念,一個鏡像由若干只讀層(read-only layer)構(gòu)成。

Docker和容器鏡像的區(qū)別是什么

上圖左邊是Docker鏡像的內(nèi)部實現(xiàn)細(xì)節(jié),我們能看到多個只讀層疊加在一起,層與層之間通過指針關(guān)聯(lián),這些層能夠在運行Docker的宿主機(jī)的文件系統(tǒng)上訪問到。

Linux的統(tǒng)一文件系統(tǒng)(union file system)技術(shù)將這些疊加的只讀層合并成一個文件系統(tǒng),該系統(tǒng)為這些只讀層提供了一個統(tǒng)一的視角,從而為Docker的用戶隱藏了多層的存在。

從Docker用戶的視角出發(fā),一個Docker鏡像只存在一個文件系統(tǒng),即上圖右邊所示。

這些文件系統(tǒng)的設(shè)計是Docker實現(xiàn)細(xì)節(jié),一般情況下我們不用去深究。但如果您足夠好奇,使用命令sudo tree瀏覽目錄 /var/lib/docker即可:

Docker和容器鏡像的區(qū)別是什么

比如我用命令docker images瀏覽下載到本地的docker鏡像:

Docker和容器鏡像的區(qū)別是什么

其中一個叫jerry-nginx的鏡像,是一個web應(yīng)用,它的所有內(nèi)容能在/var/lib/docker目錄下的這個目錄查到:

Docker和容器鏡像的區(qū)別是什么

講完了容器鏡像,我們再來看容器。

Docker和容器鏡像的區(qū)別是什么

容器和容器鏡像一樣,也是若干層的疊加,唯一區(qū)別是所有只讀層的最上面一層,是一層可讀可寫層,如上圖綠色圖例所示。

初學(xué)者可以記住這個簡單的公式:容器 = 容器鏡像 + 可讀可寫層

Docker和容器鏡像的區(qū)別是什么

我們?nèi)绻妹頳ocker ps --all查看本機(jī)所有容器列表,會發(fā)現(xiàn)有的容器處于運行狀態(tài),有的處于退出狀態(tài)。

因此,一個處于運行狀態(tài)的容器(running container)包含一個可讀寫的文件系統(tǒng)加上隔離的進(jìn)程空間。

容器里的進(jìn)程可以對這個可讀寫文件系統(tǒng)內(nèi)的文件進(jìn)行修改、刪除、創(chuàng)建等操作。

鏡像里每一層其實都能在docker文件夾的containers子目錄下找到:

Docker和容器鏡像的區(qū)別是什么

上圖每一個紅色文件夾代表鏡像里的一層,藍(lán)色文件包含了該層運行時的日志文件,或者網(wǎng)絡(luò)相關(guān)配置等。

做個實驗:

Docker和容器鏡像的區(qū)別是什么

ubuntu這個容器執(zhí)行結(jié)束后,使用find / -name i042416.txt文件,這說明docker運行時能對宿主機(jī)的文件系統(tǒng)進(jìn)行寫操作。

Docker和容器鏡像的區(qū)別是什么

下面分析幾個常用的易混淆的命令。

docker create <image-id>

先看它的幫助文檔:

Docker和容器鏡像的區(qū)別是什么

試著執(zhí)行以下:

Docker和容器鏡像的區(qū)別是什么

產(chǎn)生一個輸出id:

7ee10851c3f1e53bbd35e5f196f34de560afa1a20d9bf1ced587630dbcda877b

create創(chuàng)建的容器,狀態(tài)變?yōu)閏reated:

Docker和容器鏡像的區(qū)別是什么

docker create命令給通過命令行傳入的容器鏡像創(chuàng)建了一個新的可讀可寫層,從而生成了一個新的容器實例:

Docker和容器鏡像的區(qū)別是什么

然后再執(zhí)行docker start,輸入docker create創(chuàng)建的容器實例ID,就可以啟動這個容器實例了。

而docker run其實就是docker create和docker start這兩個命令合二為一的版本。

上述內(nèi)容就是Docker和容器鏡像的區(qū)別是什么,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注億速云行業(yè)資訊頻道。

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

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

AI