容器和容器映象的區別,您真的瞭解嗎
很多剛剛接觸容器技術的朋友,不容易弄清楚容器,容器映象和Docker這幾個詞的區別和聯絡。
我們首先來看容器和容器映象。舉個例子,執行命令列docker search nginx,搜尋結果的一條條記錄就是一個個容器映象。
所謂映象,就是一個靜態概念,一個映象由若干只讀層(read-only layer)構成。
上圖左邊是Docker映象的內部實現細節,我們能看到多個只讀層疊加在一起,層與層之間透過指標關聯,這些層能夠在執行Docker的宿主機的檔案系統上訪問到。
Linux的統一檔案系統(union file system)技術將這些疊加的只讀層合併成一個檔案系統,該系統為這些只讀層提供了一個統一的視角,從而為Docker的使用者隱藏了多層的存在。
從Docker使用者的視角出發,一個Docker映象只存在一個檔案系統,即上圖右邊所示。
這些檔案系統的設計是Docker實現細節,一般情況下我們不用去深究。但如果您足夠好奇,使用命令sudo tree瀏覽目錄 /var/lib/docker即可:
比如我用命令docker images瀏覽下載到本地的docker映象:
其中一個叫jerry-nginx的映象,是一個web應用,它的所有內容能在/var/lib/docker目錄下的這個目錄查到:
講完了容器映象,我們再來看容器。
容器和容器映象一樣,也是若干層的疊加,唯一區別是所有隻讀層的最上面一層,是一層可讀可寫層,如上圖綠色圖例所示。
初學者可以記住這個簡單的公式:容器 = 容器映象 + 可讀可寫層
我們如果用命令docker ps --all檢視本機所有容器列表,會發現有的容器處於執行狀態,有的處於退出狀態。
因此,一個處於執行狀態的容器(running container)包含一個可讀寫的檔案系統加上隔離的程式空間。
容器裡的程式可以對這個可讀寫檔案系統內的檔案進行修改、刪除、建立等操作。
映象裡每一層其實都能在docker資料夾的containers子目錄下找到:
上圖每一個紅色資料夾代表映象裡的一層,藍色檔案包含了該層執行時的日誌檔案,或者網路相關配置等。
做個實驗:
ubuntu這個容器執行結束後,使用find / -name i042416.txt檔案,這說明docker執行時能對宿主機的檔案系統進行寫操作。
下面分析幾個常用的易混淆的命令。
docker create <image-id>
先看它的幫助文件:
試著執行以下:
產生一個輸出id:
7ee10851c3f1e53bbd35e5f196f34de560afa1a20d9bf1ced587630dbcda877b
create建立的容器,狀態變為created:
docker create命令給透過命令列傳入的容器映象建立了一個新的可讀可寫層,從而生成了一個新的容器例項:
然後再執行docker start,輸入docker create建立的容器例項ID,就可以啟動這個容器例項了。
而docker run其實就是docker create和docker start這兩個命令合二為一的版本。
希望這篇文章能幫助大家理解容器和容器映象的區別。
要獲取更多Jerry的原創文章,請關注公眾號"汪子熙":
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24475491/viewspace-2286052/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 淺述容器和容器映象的區別
- docker容器與映象的區別Docker
- Flutter系列四:你真的瞭解StatelessWidget和StatefulWidget的區別嗎?Flutter
- 瞭解用於 Linux 和 Windows 容器的 Docker “容器LinuxWindowsDocker
- 程式猿們,容器映象瞭解一下……
- 你真的瞭解HTTP中GET與POST的區別嗎?HTTP
- 你真的瞭解HashSet 和HashMap的區別、優缺點、使用場景嗎?HashMap
- 1.03 docker的映象和容器Docker
- 詳解展示元件和容器元件的區別和應用元件
- 您真的瞭解網站必備的SSL證書嗎?網站
- 突破難關:Docker映象和容器的區別以及構建的最佳實踐Docker
- Docker--容器和映象的使用Docker
- 你真的瞭解 Cookie 和 Session 嗎CookieSession
- 你真的瞭解 Cookie 和 Session 嗎?CookieSession
- 你真的瞭解 Session 和 Cookie 嗎?SessionCookie
- 你真的知道 == 和 equals 的區別嗎?
- 你真的懂 == 和 equals 的區別嗎?
- 批量刪除容器和映象
- docker 映象和容器的基本命令Docker
- 對容器映象的思考和討論
- Docker容器和虛擬機器區別Docker虛擬機
- docker 批量刪除容器和映象Docker
- Docker 最常用的映象命令和容器命令Docker
- Docker——理解好映象和容器的關係Docker
- 您真的瞭解Java中的鎖嗎?這7種不同維度下的鎖知道嗎?Java
- 你真的瞭解@Async嗎?
- 你真的瞭解HTAP嗎
- ViewStub你真的瞭解嗎View
- 你真的瞭解 Array 嗎?
- 你真的瞭解mongoose嗎?Go
- 你真的瞭解URLEncode嗎?
- 你真的瞭解RPC嗎?RPC
- 簡述Spring容器與SpringMVC的容器的聯絡與區別SpringMVC
- 你真的瞭解 Unicode 和 UTF-8 嗎?Unicode
- docker刪除所有容器和映象命令Docker
- 關於Ae和Pr的的區別,你瞭解對了嗎?
- .NET 8 的openEuler 容器映象
- 小陳的容器映象站