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)糾正,在此感激不盡似枕。