容器(container)和鏡像(image)

Image Definition

鏡像(Image)就是一堆只讀層(read-only layer)的統(tǒng)一視角,也許這個(gè)定義有些難以理解,下面的這張圖能夠幫助讀者理解鏡像的定義。

從左邊我們看到了多個(gè)只讀層,它們重疊在一起。除了最下面一層,其它層都會(huì)有一個(gè)指針指向下一層。這些層是Docker內(nèi)部的實(shí)現(xiàn)細(xì)節(jié),并且能夠 在主機(jī)(譯者注:運(yùn)行Docker的機(jī)器)的文件系統(tǒng)上訪問到。統(tǒng)一文件系統(tǒng)(union file system)技術(shù)能夠?qū)⒉煌膶诱铣梢粋€(gè)文件系統(tǒng),為這些層提供了一個(gè)統(tǒng)一的視角,這樣就隱藏了多層的存在,在用戶的角度看來,只存在一個(gè)文件系統(tǒng)。 我們可以在圖片的右邊看到這個(gè)視角的形式。

你可以在你的主機(jī)文件系統(tǒng)上找到有關(guān)這些層的文件。需要注意的是,在一個(gè)運(yùn)行中的容器內(nèi)部,這些層是不可見的。

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 Definition

容器(container)的定義和鏡像(image)幾乎一模一樣,也是一堆層的統(tǒng)一視角,唯一區(qū)別在于容器的最上面那一層是可讀可寫的。

容器的定義并沒有提及容器是否在運(yùn)行
要點(diǎn):容器 = 鏡像 + 可讀層。并且容器的定義并沒有提及是否要運(yùn)行容器

Running Container Definition

一個(gè)運(yùn)行態(tài)容器(running container)被定義為一個(gè)可讀寫的統(tǒng)一文件系統(tǒng)加上隔離的進(jìn)程空間和包含其中的進(jìn)程。下面這張圖片展示了一個(gè)運(yùn)行中的容器。

正是文件系統(tǒng)隔離技術(shù)使得Docker成為了一個(gè)前途無量的技術(shù)。一個(gè)容器中的進(jìn)程可能會(huì)對(duì)文件進(jìn)行修改、刪除、創(chuàng)建,這些改變都將作用于可讀寫層(read-write layer)。下面這張圖展示了這個(gè)行為。


通過運(yùn)行以下命令來驗(yàn)證:

docker run ubuntu touch happiness.txt

即便是這個(gè)ubuntu容器不再運(yùn)行,依舊能夠在主機(jī)的文件系統(tǒng)上找到這個(gè)新文件。

find / -name happiness.txt

/var/lib/docker/aufs/diff/860a7b...889/happiness.txt

Image Layer Definition

為了將零星的數(shù)據(jù)整合起來,我們提出了鏡像層(image layer)這個(gè)概念。下面的這張圖描述了一個(gè)鏡像層,通過圖片我們能夠發(fā)現(xiàn)一個(gè)層并不僅僅包含文件系統(tǒng)的改變,它還能包含了其他重要信息。

元數(shù)據(jù)(metadata)就是關(guān)于這個(gè)層的額外信息,它不僅能夠讓Docker獲取運(yùn)行和構(gòu)建時(shí)的信息,還包括父層的層次信息。需要注意,只讀層和讀寫層都包含元數(shù)據(jù)。

除此之外,每一層都包括了一個(gè)指向父層的指針。如果一個(gè)層沒有這個(gè)指針,說明它處于最底層。

Metadata Location:
在我自己的主機(jī)上,鏡像層(image layer)的元數(shù)據(jù)被保存在名為”json”的文件中,比如說:
/var/lib/docker/graph/e809f156dc985.../json

e809f156dc985...就是這層的id

一個(gè)容器的元數(shù)據(jù)好像是被分成了很多文件,但或多或少能夠在/var/lib/docker/containers/<id>目錄下找到,<id>就是一個(gè)可讀層的id。這個(gè)目錄下的文件大多是運(yùn)行時(shí)的數(shù)據(jù),比如說網(wǎng)絡(luò),日志等等。

參考 docker容器和鏡像區(qū)別

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容