基于Docker API工具綜述
Docker是在虛擬容器中簡易部署應(yīng)用最前沿技術(shù)。之前我們已經(jīng)知道Docker可以減少開發(fā)維護(hù)復(fù)雜度,使得正在成長中的架構(gòu)得以實踐。這種架構(gòu)使得整個應(yīng)用以及底層操作系統(tǒng)以輕量級容器方式創(chuàng)建和部署,而不是依靠增量式的更改。
考慮到過去三年Docker取得的驕人成績以及遠(yuǎn)程API的成熟,毫無疑問,Docker會成為開發(fā)者的***平臺。
隨著Docker的發(fā)展壯大,開發(fā)者也共享了很多圍繞docker的開源項目,本文中將討論這些項目是如何使用Docker API的。
Dogfooding
DokcerAPI***的用戶就是Docker本身,Dokcer內(nèi)置了很多整合與編排容器配置的工具。Dockercompose面向多容器應(yīng)用部署,而Docker Swarm則負(fù)責(zé)Docker容器集群創(chuàng)建。
Docker自身在這一領(lǐng)域做的很好,但是仍然對其它Docker編排技術(shù)持開放態(tài)度。編排領(lǐng)域涉及面很廣泛,包括調(diào)度、集群,服務(wù)發(fā)現(xiàn)以及其它一些任務(wù)??紤]到有效性,透明性,以及依賴性,一般不希望幾個進(jìn)程運行在同一個容器內(nèi);實際使用中,每個容器只負(fù)責(zé)處理定義清楚的服務(wù)。因此一個完整的應(yīng)用一般由多個Docker容器構(gòu)成,這也是基于Docker的解決方案非常豐富的原因。
調(diào)度--Scheduling
Docker容器調(diào)度也是容器編排中重要的一環(huán),這里所說的調(diào)度是指容器如何在各個主機(jī)之間運行的規(guī)則。例如,一個調(diào)度策略可能會牽涉到運行在同一個主機(jī)中的不同容器,而其功能是互補(bǔ)的。因為有了調(diào)度策略,可以從一個應(yīng)用中抽象出兩個集群行為的容器。
除了DockerSwarm的調(diào)度功能,CoreOS的Fleet和Marathon都是Docker調(diào)度開源實現(xiàn)。
如想深入了解容器架構(gòu),可以深入閱讀API-Driven DevOps: Spotlight on Docker
集群管理 Cluster Management
集群意味著將很多主機(jī)內(nèi)的眾多Docker容器聯(lián)系起來,使它們表現(xiàn)為一個統(tǒng)一調(diào)度的系統(tǒng)。
對應(yīng)于Docker Swarm的開源項目包括 Google的Kubernetes, 通過Docker容器的pods來管理集群,其它的還包括Shipyard,CoreOS的Fleet和Marathon。
像Spotify這種公司開發(fā)并開源了自己的Docker管理系統(tǒng),而這正是每個基于Docker系統(tǒng)必需的。
服務(wù)發(fā)現(xiàn)Service Discovery
服務(wù)發(fā)現(xiàn)是在一個多主機(jī)、集群環(huán)境的網(wǎng)絡(luò)中,如何發(fā)現(xiàn)所需服務(wù)的IP地址,像GliderLabs這樣的公司利用Docker的遠(yuǎn)程API偵聽事件,創(chuàng)建基于容器的軟件應(yīng)用。Registrator,一家由Weave支持的開源項目,可以通過監(jiān)控新建Docker容器,將它們在目錄服務(wù)Consul中注冊,提供發(fā)現(xiàn)服務(wù)。
網(wǎng)絡(luò)Networking
為了鏈接構(gòu)成服務(wù)的容器,Docker也提供一些網(wǎng)絡(luò)功能。默認(rèn)地virtual bridge網(wǎng)絡(luò)被激活,同時也可以用不同的配置。提供商提供了適用于其他使用場景的網(wǎng)絡(luò)配置。
Weave使用一種稱為imicro-routers的虛擬網(wǎng)絡(luò)跨主機(jī)連接容器,使得網(wǎng)絡(luò)配置簡化,動態(tài)添加節(jié)點,通訊加密。Weave還提供一個叫Weave Scope的網(wǎng)絡(luò)監(jiān)控功能。
Flannel是CoreOS提出的overley網(wǎng)絡(luò)解決方案,使用etcd集群來存儲網(wǎng)絡(luò)配置。
Calico項目另外一個基于‘Layer3’網(wǎng)絡(luò)的開源項目,這不是一個overlay網(wǎng)絡(luò),意味著OSI模型三層以上都不會封裝包,相對于其他方案會大大提高性能。
存儲Storage
Docker在數(shù)據(jù)庫領(lǐng)域并不太成熟,這是因為按照定義數(shù)據(jù)庫是經(jīng)常變化的,因此運行數(shù)據(jù)庫的容器不能簡單被重新部署而不比較數(shù)據(jù)一致性。針對這一問題Docker內(nèi)置基于數(shù)據(jù)卷和數(shù)據(jù)卷容器的解決方案。數(shù)據(jù)卷在容器被刪除時,數(shù)據(jù)仍然是持久化的。數(shù)據(jù)卷容器可以在多個容器之間共享數(shù)據(jù)時候使用。
數(shù)據(jù)卷可以被備份和恢復(fù);像ClusterHQ的Flocker產(chǎn)品,就是一個開源的數(shù)據(jù)卷管理器,而且為了支持基于容器的數(shù)據(jù)庫,提供數(shù)據(jù)遷移功能。
持續(xù)集成Continuous Integration
為了更好管理Docker容器創(chuàng)建,測試和部署的生命周期,有很多針對持續(xù)集成(CI)領(lǐng)域的工具。例如,CodeFresh可以監(jiān)測Git庫中變化,或者持續(xù)集成服務(wù)器中變化,從而觸發(fā)創(chuàng)建和部署Docker容器,
CodeShip的Jet是面向Docker的CI平臺,可以從任何Docker注冊庫中拉images,與DockerCompose整合,便于并發(fā)創(chuàng)建和部署基于容器的應(yīng)用。
Drone是另外一個基于Docker的持續(xù)集成平臺,它在創(chuàng)建過程中使用一個短暫生成的容器。
如需了解,可以閱讀如下網(wǎng)址:Continuous Integration Tools to Spur API Development
Hosted Docker Registries
除了DockerHub之外,還有幾家公司提供Docker注冊庫服務(wù),例如Quay.io, Artifactory和Google的Container Registry。這些服務(wù)提供私有的容器注冊庫訪問,提供高級庫功能,第三方整合和***DevOps體驗。
日志整合Log Aggregation
Logspout是GliderLabs的另外一個開源項目。當(dāng)幾個Docker容器共享一個主機(jī)時,Logspout將日志路由并匯總到類似PaperTrail的日志管理系統(tǒng)。另外,F(xiàn)ilebeat可以對容器日志打上標(biāo)簽并發(fā)往logstash。
監(jiān)控Monitoring
大量第三方的,由業(yè)界云監(jiān)控大廠開發(fā)的,基于Docker的監(jiān)控工具,一般都是用Docker靜態(tài)API,并將結(jié)果顯示在動態(tài)儀表盤上。
這些監(jiān)控方案包括:
• AppDynamics的Docker擴(kuò)展 Docker extension by AppDynamics,
• DataDog agent,
• first-class citizen treatment of Docker containers in New Relic,
• Scout’s Docker agent
配置管理Configuration Management
Docker可以通過標(biāo)簽方式(labels)給圖像、容器和進(jìn)程(守護(hù)進(jìn)程)添加客制化元數(shù)據(jù)。標(biāo)簽類似于key-value對,可以被用于標(biāo)注配置信息,例如版本號和環(huán)境信息。
為了避免名字沖突,Docker鼓勵在標(biāo)簽中使用命名空間,但是并不強(qiáng)制。DockerLabelinspector是GarethRushgrove(PuppetLabs的資深工程師 )開發(fā)的應(yīng)用,可以根據(jù)發(fā)布指南或者指定JSON Schema檢查發(fā)布的Docker映像。
安全審計Security Auditing
很多問題都圍繞基于Docker應(yīng)用的安全問題,盡管過去很多年已經(jīng)補(bǔ)上了很多漏洞,但是開發(fā)商提供的Docker應(yīng)用帶來了更多安全問題。一個例子是Scalock,這是一款掃描容器發(fā)現(xiàn)安全問題的軟件,并且控制對容器訪問,監(jiān)控容器運行狀態(tài)使得不會破壞安全設(shè)置。
PaaS
越來越多的基于Docker軟件,造成了整合性的困難,同時也是一個生態(tài)系統(tǒng)發(fā)展良好的預(yù)兆。很多公司瞄準(zhǔn)了這一需求,將賭注壓在端到端類PaaS的方案,用來創(chuàng)建,部署,編排和監(jiān)控基于Docker的應(yīng)用,從而將復(fù)雜性隱藏起來。
Openshift是RedHat的PaaS方案,構(gòu)建于Docker和Kubernetes之上。Deis是EngineYard開發(fā),由Heroku驅(qū)動的PaaS方案,構(gòu)建于Docker和CoreOS之上,Paz是基于Docker、CoreOS、etcd和Fleet的開源項目,可以將容器應(yīng)用運行于PaaS之上。
***,Docker最近收購了Tutum(類似PaaS的套件,用于部署和管理Docker引擎),重新命名為Docker Cloud。
Full-blown OS
由于Docker發(fā)展太迅猛,已經(jīng)有先行者開始使用容器做整個操作系統(tǒng)。Rancher的RancherOS是一個完全基于Docker的輕量級操作系統(tǒng),它是專為運行基于容器應(yīng)用的20MB大小的Linux發(fā)行版。
HypriotOS是在樹莓派上使用的Docker實現(xiàn),允許在SD卡上運行輕量級容器應(yīng)用。
結(jié)論Conclusion
Docker的創(chuàng)生誕生了DevOps軟件生態(tài)環(huán)境,隨著Docker應(yīng)用不斷增加,看起來這個增長勢頭在未來會更加強(qiáng)勁。在下一篇文章中,我們將會深入DevOps其它領(lǐng)域,也就是持續(xù)集成和配置管理。