docker的核心組件如下:
(推薦教程:docker教程)
1、 客戶端:dockerclient
2、 服務(wù)端:dockerserver
3、 Docker鏡像
4、 Registry
5、 Docker 容器
本文會(huì)給大家簡(jiǎn)單介紹這些組件的作用并簡(jiǎn)述他們是如何相互協(xié)作的
1、 docker客戶端與服務(wù)器
docker client向docker daemon發(fā)送請(qǐng)求,docker daemon完成相應(yīng)的任務(wù),并把結(jié)果返還給容器
docker client是一個(gè)泛稱,它可以是命令行docker,也可以是遵循了docker api規(guī)則的客戶端,簡(jiǎn)單地說(shuō)可以理解為一個(gè)用于交互/發(fā)送指令的接口。
如下圖:
2、 docker鏡像
docker鏡像是一個(gè)只讀的模板,是啟動(dòng)一個(gè)容器的基礎(chǔ)。其中包括了容器的文件系統(tǒng)結(jié)構(gòu)與內(nèi)容,它與docker的配置文件共同組成了docker容器的靜態(tài)文件系統(tǒng)環(huán)境
docker鏡像在設(shè)計(jì)上有許多特別之處:
1) 分層機(jī)制
docker的鏡像機(jī)制是有層次感的,一個(gè)鏡像可以放到另一個(gè)鏡像的頂部。位于下端的為父鏡像,以此類推;最底部的鏡像可稱為基礎(chǔ)鏡像。最后從一個(gè)鏡像啟動(dòng)容器時(shí),docker會(huì)在鏡像的最頂層加載一個(gè)讀寫的文件系統(tǒng),我們想在docker上運(yùn)行的程序就是在這個(gè)讀寫層中執(zhí)行的。
怕你沒看懂,上圖
當(dāng)我啟動(dòng)容器之后,我們接觸的是最頂層的可寫容器,最頂層的鏡像以處于他下發(fā)層的鏡像迭代構(gòu)建而成。接下來(lái)引出docker鏡像的另一個(gè)特性,寫時(shí)復(fù)制:
(2)寫時(shí)復(fù)制
還是看剛剛那張圖,剛開始運(yùn)行的時(shí)候可寫容器與頂層的鏡像內(nèi)容是完全一致的;當(dāng)我對(duì)內(nèi)容進(jìn)行修改的時(shí)候,文件會(huì)從下一層的鏡像(只讀層)復(fù)制到頂層的可寫容器(讀寫層),只讀層的文件依然存在,但是會(huì)被讀寫層的文件所隱藏;在容器中所做的所有操作,都不會(huì)影響底層的原有數(shù)據(jù),除非你把他打包成一個(gè)新的鏡像。
3、 registry
我們從何處去獲得鏡像?如果我們是第一次通過(guò)某個(gè)鏡像去啟動(dòng)容器,首先宿主機(jī)回去/var/lib/docker目錄下去找,如果沒有找到,則會(huì)去registry中去下載鏡像并且存放于虛擬機(jī),然后完成啟動(dòng)。
registry可以想象為一個(gè)鏡像的倉(cāng)庫(kù),默認(rèn)的registry是docker官方提供的registry服務(wù),名為Docker Hub。當(dāng)然,你也可以構(gòu)建自己的鏡像倉(cāng)庫(kù)。
4、 docker容器
容器就是鏡像的運(yùn)行實(shí)例。
用戶可以通過(guò)命令行或是 API 啟動(dòng)、停止、移動(dòng)或刪除容器。可以這么認(rèn)為,對(duì)于應(yīng)用軟件,鏡像是軟件生命周期的構(gòu)建和打包階段,而容器則是啟動(dòng)和運(yùn)行階段。