Docker容器和映象的區別

2022-09-07 05:09:16 字數 2153 閱讀 3301

在學習使用docker過程中會遇到映象和容器,兩者之間的區別是什麼?有什麼關聯?本文將用**並茂的方式介紹容器、映象的區別,能夠很好的幫助各位深入理解docker。

映象可以看成是由多個映象層疊加起來的乙個檔案系統(通過unionfs與aufs檔案聯合系統實現),映象層也可以簡單理解為乙個基本的映象,而每個映象層之間通過指標的形式進行疊加。

根據上圖,映象層的主要組成部分包括映象層 id、映象層指標 「指向父層」、元資料「 layer metadata,包含了 docker 構建和執行的資訊和父層的層次資訊」。唯讀層和讀寫層「top layer」的組成部分基本一致,同時讀寫層可以轉換成唯讀層「 通過docker commit操作實現」。

元資料(metadata)就是關於這個層的額外資訊,它不僅能夠讓docker獲取執行和構建時的資訊,還包括父層的層次資訊。需要注意,唯讀層和讀寫層都包含元資料。

每一層都包括了乙個指向父層的指標。如果乙個層沒有這個指標,說明它處於最底層。

metadata location:

在docker主機中映象層(image layer)的元資料被儲存在名為」json」的檔案中,比如說:

/var/lib/docker/graph/e809f156dc985.../json             ##e809f156dc985...就是這層的id
乙個容器的元資料好像是被分成了很多檔案,但或多或少能夠在/var/lib/docker/containers/目錄下找到,就是乙個可讀層的id。這個目錄下的檔案大多是執行時的資料,比如說網路,日誌等等。

映象是一堆唯讀層的統一視角,除了最底層沒有指向外,每一層都指向它的父層。統一檔案系統( union file system)技術能夠將不同的層整合成乙個檔案系統,為這些層提供了乙個統一的視角,這樣就隱藏了多層的存在。在使用者的角度看來,只存在乙個檔案系統。映象每一層都是不可寫的,都是唯讀層。

我們可以看到映象包含多個唯讀層,它們重疊在一起。除了最下面一層,其它層都會有乙個指標指向下一層。這些層是docker內部的實現細節,並且能夠在docker主機的檔案系統上訪問到。統一檔案系統(union file system,公升級版為aufs)技術能夠將不同的層整合成乙個檔案系統,為這些層提供了乙個統一的視角,這樣就隱藏了多層的存在,在使用者的角度看來,只存在乙個檔案系統。我們可以在的右邊看到這個視角的形式。

你可以在你的主機檔案系統上找到有關這些層的檔案。需要注意的是,在乙個執行中的容器內部,這些層是不可見的。在我的主機上,我發現它們存在於/var/lib/docker/aufs目錄下。

sudo tree -l 1 /var/lib/docker/

/var/lib/docker/

├── aufs

├── containers

├── graph

├── init

├── linkgraph.db

├── repositories-aufs

├── tmp

├── trust

└── volumes

7 directories, 2 files

容器(container)的定義和映象(image)幾乎一模一樣,也是一堆層的統一視角,唯一區別在於容器的最上面那一層是可讀可寫的。要點:容器 = 映象 + 讀寫層,並且容器的定義並沒有提及是否要執行容器。

執行狀態的容器「running container」是由乙個可讀寫的檔案系統「靜態容器」+ 隔離的程序空間和其中的程序構成的。下面這張展示了乙個執行中的容器。

正是檔案系統隔離技術使得docker成為了乙個前途無量的技術。乙個容器中的程序可能會對檔案進行修改、刪除、建立,這些改變都將作用於可讀寫層(read-write layer)。下面這張圖展示了這個行為。

我們可以通過執行以下命令來驗證我們上面所說的:

即便是這個ubuntu容器不再執行,我們依舊能夠在主機的檔案系統上找到這個新檔案。

通過上述內容,我們已經詳細介紹了映象與容器的區別,映象由一層層唯讀層堆在一起,容器為映象唯讀層+讀寫層,執行態容器為由乙個可讀寫的檔案系統「靜態容器」+ 隔離的程序空間和其中的程序構成。

Docker容器和映象的區別

在學習使用docker過程中會遇到映象和容器,兩者之間的區別是什麼?有什麼關聯?本文將用 並茂的方式介紹容器 映象的區別,能夠很好的幫助各位深入理解docker。映象可以看成是由多個映象層疊加起來的乙個檔案系統 通過unionfs與aufs檔案聯合系統實現 映象層也可以簡單理解為乙個基本的映象,而每...

docker容器和映象的區別

此內容有些偏底層,程式設計師看了會沉默,運維狗看了會流淚 在學習使用docker過程中會遇到映象和容器,兩者之間的區別是什麼?有什麼關聯?本文將用 並茂的方式介紹容器 映象的區別,能夠很好的幫助各位深入理解docker。映象可以看成是由多個映象層疊加起來的乙個檔案系統 通過unionfs與aufs檔...

Docker的映象和容器的區別

要理解docker映象和docker容器之間的區別,確實不容易。假設linux核心是第0層,那麼無論怎麼執行docker,它都是執行於核心層之上的。這個docker映象,是乙個唯讀的映象,位於第1層,它不能被修改或不能儲存狀態。乙個docker映象可以構建於另乙個docker映象之上,這種層疊關係可...