Docker各模塊功能與實(shí)現(xiàn)分析

Docker背景:

Docker借助操作系統(tǒng)層的虛擬化實(shí)現(xiàn)資源的隔離逼友,因此Docker容器在運(yùn)行時(shí)與虛擬機(jī)(VM)的運(yùn)行有很大的區(qū)別子漩,Docker容器與宿主機(jī)共享同一個(gè)操作系統(tǒng)熙暴,不會(huì)有額外的操作系統(tǒng)開(kāi)銷(xiāo)咬腋。這樣的優(yōu)勢(shì)很明顯吸申,因而大大提高了資源利用率两嘴,并且提升了I/O等方面的性能当编。

Docker各模塊功能與實(shí)現(xiàn)分析

Docker Client

Docker Client是Docker架構(gòu)中用戶與Docker Daemon建立通信的客戶端届慈。在一臺(tái)安裝有Docker的機(jī)器上徒溪,用戶可以使用可執(zhí)行文件docker作為Docker Client,發(fā)起眾多Docker容器的管理請(qǐng)求金顿。

Docker Daemon(后臺(tái)守護(hù)進(jìn)程)

Docker Server臊泌、Engine和Job。

Docker Daemon是Docker架構(gòu)中一個(gè)常駐在后臺(tái)的系統(tǒng)進(jìn)程揍拆。

?接收并處理Docker Client發(fā)送的請(qǐng)求

?管理所有的Docker容器

運(yùn)行邏輯:

Docker Daemon運(yùn)行時(shí)渠概,會(huì)在后臺(tái)啟動(dòng)一個(gè)Server,Server負(fù)責(zé)接收Docker Client發(fā)送的請(qǐng)求嫂拴;接收請(qǐng)求后播揪,Server通過(guò)路由與分發(fā)調(diào)度,找到相應(yīng)的Handler來(lái)處理請(qǐng)求筒狠。

1.Docker Server Docker Server在Docker架構(gòu)中專門(mén)服務(wù)于Docker Client猪狈,它的功能是接收并調(diào)度分發(fā)Docker Client發(fā)送的請(qǐng)求。需要注意的是:Docker Server在Docker的啟動(dòng)過(guò)程中運(yùn)行辩恼,通過(guò)一個(gè)名為“serverapi”的Job來(lái)實(shí)現(xiàn)雇庙。

2.Engine Engine是Docker架構(gòu)中的運(yùn)行引擎,同時(shí)也是Docker運(yùn)行的核心模塊灶伊。Engine存儲(chǔ)著大量的容器信息疆前,同時(shí)管理著Docker大部分Job的執(zhí)行。換言之聘萨,Docker中大部分任務(wù)的執(zhí)行都需要Engine協(xié)助竹椒,并通過(guò)Engine匹配相應(yīng)的Job來(lái)執(zhí)行。除了管理容器之外米辐,Engine還接管Docker Daemon的某些特定任務(wù)碾牌。當(dāng)Docker Daemon遭遇到自身進(jìn)程需要退出的情況時(shí),Engine還負(fù)責(zé)完成Docker Daemon推出前的所有善后工作儡循。

3.Job Job可以認(rèn)為是Docker架構(gòu)中Engine內(nèi)部最基本的工作執(zhí)行單元舶吗。Docker Daemon可以完成的每一項(xiàng)工作都會(huì)呈現(xiàn)為一個(gè)Job。對(duì)于Job而言择膝,定義完畢之后誓琼,運(yùn)行才能完成Job自身真正的使命。Job的運(yùn)行函數(shù)Run()則用以執(zhí)行Job本身肴捉。

Docker Registry(容器鏡像)

Docker Registry是一個(gè)存儲(chǔ)容器鏡像(Docker Image)的倉(cāng)庫(kù)腹侣。容器鏡像(Docker Image)是容器創(chuàng)建時(shí)用來(lái)初始化容器rootfs的文件系統(tǒng)內(nèi)容。Docker Registry將大量的容器鏡像匯集在一起齿穗,并為分散的Docker Daemon提供鏡像服務(wù)傲隶。

Graph(容器保管者,存儲(chǔ))

Graph在Docker架構(gòu)中扮演的角色是容器鏡像的保管者窃页。

Driver(驅(qū)動(dòng)類(lèi)跺株,運(yùn)行載體)

Docker Driver的實(shí)現(xiàn)可以分為以下三類(lèi)驅(qū)動(dòng):graphdriver复濒、newworkdriver和execdriver

Driver是Docker架構(gòu)中的驅(qū)動(dòng)模塊。通過(guò)Driver驅(qū)動(dòng)乒省,Docker可以實(shí)現(xiàn)對(duì)Docker容器運(yùn)行環(huán)境的定制巧颈,定制的維度主要有網(wǎng)絡(luò)環(huán)境、存儲(chǔ)方式以及容器執(zhí)行方式袖扛。需要注意的是砸泛,Docker運(yùn)行的生命周期中,并非用戶所有的操作都是針對(duì)Docker容器的管理蛆封,同時(shí)包括用戶對(duì)Docker運(yùn)行信息的獲取唇礁,還包括Docker對(duì)Graph的存儲(chǔ)與記錄等。

libcontainer(系統(tǒng)調(diào)用的核心庫(kù))

libcontainer是Docker架構(gòu)中一個(gè)使用Go語(yǔ)言設(shè)計(jì)實(shí)現(xiàn)的庫(kù)惨篱,設(shè)計(jì)初衷是希望該庫(kù)可以不依靠任何依賴垒迂,直接訪問(wèn)內(nèi)核中與容器相關(guān)的系統(tǒng)調(diào)用。

libcontainer提供了一整套標(biāo)準(zhǔn)的接口來(lái)滿足上層對(duì)容器管理的需求妒蛇』希或者說(shuō),libcontainer屏蔽了Docker上層對(duì)容器的直接管理绣夺。又由于libcontainer使用Go這種跨平臺(tái)的語(yǔ)言開(kāi)發(fā)實(shí)現(xiàn)吏奸,且本身又可以被上層多種不同的編程語(yǔ)言訪問(wèn),因此陶耍,很難說(shuō)未來(lái)的Docker一定會(huì)與Linux平臺(tái)緊緊捆綁在一起奋蔚。

Docker Container(與用于實(shí)際打交道)

Docker Container(Docker容器)是Docker架構(gòu)中服務(wù)交付的最終體現(xiàn)形式。

1.通過(guò)指定容器鏡像烈钞,使得Docker容器可以自定義rootfs等文件系統(tǒng)泊碑。

2.通過(guò)指定物理資源的配額,如CPU毯欣、內(nèi)存等馒过,使得Docker容器使用受限的物理資源。

3.通過(guò)配置容器網(wǎng)絡(luò)及其安全策略酗钞,使得Docker容器擁有獨(dú)立且安全的網(wǎng)絡(luò)環(huán)境腹忽。

4.通過(guò)指定容器的運(yùn)行命令,使得Docker容器執(zhí)行指定的任務(wù)砚作。

Docker Hub

官方提供regestry(repo)

常用命令:

docker pull

docker run

docker search

docker ps

docker exec

docker tag

Swarm:

Docker集群管理和編排的特性是通過(guò)SwarmKit進(jìn)行構(gòu)建的窘奏, 其中Swarm mode是Docker Engine內(nèi)置支持的一種默認(rèn)實(shí)現(xiàn).

特性:

?集群管理集成進(jìn)Docker Engine

?去中心化設(shè)計(jì)

?聲明式服務(wù)模型(Declarative Service Model)

?服務(wù)擴(kuò)容縮容

?協(xié)調(diào)預(yù)期狀態(tài)與實(shí)際狀態(tài)的一致性

?多主機(jī)網(wǎng)絡(luò)

?服務(wù)發(fā)現(xiàn)

?負(fù)載均衡

?安全策略

?滾動(dòng)更新(Rolling Update)

管理Swarm Node

Swarm支持設(shè)置一組Manager Node,通過(guò)支持多Manager Node實(shí)現(xiàn)HA葫录。

通過(guò)上圖可以看到着裹,Swarm使用了Raft協(xié)議來(lái)保證多個(gè)Manager之間狀態(tài)的一致性。

(1)Node狀態(tài)變更管理

?設(shè)置Manager Node只具有管理功能

?對(duì)服務(wù)進(jìn)行停機(jī)維護(hù)米同,可以修改AVAILABILITY為Drain狀態(tài)

?暫停一個(gè)Node骇扇,然后該Node就不再接收新的Task

?恢復(fù)一個(gè)不可用或者暫停的Node

(2)給Node添加標(biāo)簽元數(shù)據(jù)

每個(gè)Node的主機(jī)配置情況可能不同摔竿,比如有的適合運(yùn)行CPU密集型應(yīng)用,有的適合運(yùn)行IO密集型應(yīng)用匠题,Swarm支持給每個(gè)Node添加標(biāo)簽元數(shù)據(jù)

(3)Node提權(quán)/降權(quán)

改變Node的角色拯坟,Worker Node可以變?yōu)镸anager Node

(4)退出Swarm集群

Service但金、Task韭山、Container(容器)

YARN:

Docker 基于 Linux Container 技術(shù)整合了一組易用的接口用于構(gòu)建非常輕量級(jí)的虛擬機(jī)。Docker Container Executor(DCE)使得 Yarn Node Manager 服務(wù)可以將其 container 進(jìn)程運(yùn)行在 Docker 容器中冷溃。

轉(zhuǎn)發(fā)+轉(zhuǎn)發(fā)+轉(zhuǎn)發(fā)+關(guān)注?

本文僅代表個(gè)人的觀點(diǎn)钱磅,如果闡述的不好歡迎大家指導(dǎo)糾正,在此感激不盡似枕。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末盖淡,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子凿歼,更是在濱河造成了極大的恐慌褪迟,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,576評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件答憔,死亡現(xiàn)場(chǎng)離奇詭異味赃,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)虐拓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)心俗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人蓉驹,你說(shuō)我怎么就攤上這事城榛。” “怎么了态兴?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,017評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵狠持,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我瞻润,道長(zhǎng)工坊,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,626評(píng)論 1 296
  • 正文 為了忘掉前任敢订,我火速辦了婚禮王污,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘楚午。我一直安慰自己昭齐,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,625評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布矾柜。 她就那樣靜靜地躺著阱驾,像睡著了一般就谜。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上里覆,一...
    開(kāi)封第一講書(shū)人閱讀 52,255評(píng)論 1 308
  • 那天丧荐,我揣著相機(jī)與錄音,去河邊找鬼喧枷。 笑死虹统,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的隧甚。 我是一名探鬼主播车荔,決...
    沈念sama閱讀 40,825評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼戚扳!你這毒婦竟也來(lái)了忧便?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,729評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤帽借,失蹤者是張志新(化名)和其女友劉穎珠增,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體砍艾,經(jīng)...
    沈念sama閱讀 46,271評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蒂教,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,363評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了辐董。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片悴品。...
    茶點(diǎn)故事閱讀 40,498評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖简烘,靈堂內(nèi)的尸體忽然破棺而出苔严,到底是詐尸還是另有隱情,我是刑警寧澤孤澎,帶...
    沈念sama閱讀 36,183評(píng)論 5 350
  • 正文 年R本政府宣布届氢,位于F島的核電站,受9級(jí)特大地震影響覆旭,放射性物質(zhì)發(fā)生泄漏退子。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,867評(píng)論 3 333
  • 文/蒙蒙 一型将、第九天 我趴在偏房一處隱蔽的房頂上張望寂祥。 院中可真熱鬧,春花似錦七兜、人聲如沸丸凭。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,338評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)惜犀。三九已至铛碑,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間虽界,已是汗流浹背汽烦。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,458評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留莉御,地道東北人撇吞。 一個(gè)月前我還...
    沈念sama閱讀 48,906評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像颈将,于是被迫代替她去往敵國(guó)和親梢夯。 傳聞我的和親對(duì)象是個(gè)殘疾皇子言疗,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,507評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容