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