在今年6月份,Docker剛爆出了一個(gè)容器逸出的漏洞注 19。不管是Hypervisor技術(shù)還是容器技術(shù),安全問(wèn)題始終都是一個(gè)不可避免的話題,雖然它們出問(wèn)題的幾率要比中間件軟件(Apache,Nginx、Tomcat)和軟件框架(Struts、Rails)等的概率要小很多。
注 19 http://blog.docker.com/category/security-2/
事后Docker, Inc.還是比較積極的面對(duì)了這件事,除了及時(shí)披露詳細(xì)情況之外,還著重強(qiáng)調(diào)了他們的安全政策。
5.2.5. 有狀態(tài)和無(wú)狀態(tài)容器
在不可變基礎(chǔ)設(shè)施(Immutable Infrastructure)里,一切都可以分為有狀態(tài)(stateful)的和無(wú)狀態(tài)(stateless)的,容器也不例外。容器似乎更適合跑無(wú)狀態(tài)的服務(wù),然而業(yè)內(nèi)對(duì)如何分別對(duì)待這兩種服務(wù)還沒有太好的最佳實(shí)踐。
5.3. 對(duì)Docker展望
最后再容筆者斗膽對(duì)Docker的將來(lái)做一些展望。除了Docker本身自己會(huì)蓬勃發(fā)展之外,圍繞Docker的生態(tài)圈必將更加成熟和強(qiáng)大。
5.3.1. 集群管理(Orchestration)和服務(wù)發(fā)現(xiàn)(Service Discovery)
相對(duì)于對(duì)單臺(tái)機(jī)器進(jìn)行Provisioning而言,云環(huán)境下則需要對(duì)多臺(tái)機(jī)器進(jìn)行Orchestration。Orchestration這個(gè)詞翻譯過(guò)來(lái)就是編排、編配的意思,我們也可以理解為集群管理。它主要由兩部分工作組成:
- 監(jiān)控服務(wù)器,發(fā)現(xiàn)變化(軟硬件異常、網(wǎng)絡(luò)異常、正常變更等)
- 根據(jù)監(jiān)視事件采取相應(yīng)的行動(dòng)。
服務(wù)發(fā)現(xiàn)
在松耦合的分布式環(huán)境下,應(yīng)用程序不一定跑在同一臺(tái)機(jī)上,甚至是跨越數(shù)據(jù)中心的。這時(shí)候服務(wù)發(fā)現(xiàn)就顯得格外重要了。
- Zookeeper
Chubby注 20可以稱得上是很多服務(wù)發(fā)現(xiàn)、集群管理軟件的鼻祖了,比如Zookeeper注 21,這些軟件都提供數(shù)據(jù)存儲(chǔ)、leader選舉、元數(shù)據(jù)存儲(chǔ)、分布式鎖、事件監(jiān)聽(或watch,監(jiān)視)等功能。
注 20 http://research.google.com/archive/chubby.html
注 21 http://zookeeper.apache.org/
- etcd
etcd注 22很新也很輕量,安裝很簡(jiǎn)單,配置也不復(fù)雜,所以非常適合入門。etcd存儲(chǔ)的是key-value格式的數(shù)據(jù)。
etcd是CoreOS的一個(gè)組件。同時(shí)CoreOS提供了一個(gè)基于公有云的服務(wù)發(fā)現(xiàn)服務(wù)discovery.etcd.io。
注 22 https://github.com/coreos/etcd
此外,我們還可以有Skydns/Skydock注 23、Discoverd注 24等選擇。
注 23 基于DNS的服務(wù)發(fā)現(xiàn)。https://github.com/crosbymichael/skydock
注 24 Flynn的一個(gè)組件,它目前是基于etcd的,但是也可以擴(kuò)展諸如Zookeeper等分布式存儲(chǔ)機(jī)制。https://github.com/flynn/discoverd
集群管理
圍繞Docker使用場(chǎng)景的開源集群管理軟件有很多,比如Geard、Fleet、Consul及Serf等,這些軟件都是隨著Docker應(yīng)運(yùn)而生的;此外還有很多老牌的集群管理軟件,比如Mesos等也可以很好的結(jié)合Docker使用。
- Serf和Consul
Serf注 25是一個(gè)基于Gossip協(xié)議去中心的服務(wù)器發(fā)現(xiàn)和集群管理工具,它非常輕量,高可用并具備容錯(cuò)機(jī)制。
Consul注 26是一個(gè)服務(wù)發(fā)現(xiàn)和集群配置共享的軟件,除了K/V store功能之外,它還支持跨數(shù)據(jù)中心及容錯(cuò)功能,并能進(jìn)行服務(wù)健康監(jiān)測(cè)。
這兩個(gè)軟件都Vagrant作者所在公司HashiCorp注 27發(fā)布的產(chǎn)品,這個(gè)公司也值得大家關(guān)注。
注 27 http://www.hashicorp.com/products
- Apache Mesos & Marathon & deimos & etc.
Mesos用于對(duì)多個(gè)節(jié)點(diǎn)的資源進(jìn)行管理,它將多臺(tái)服務(wù)器作為一臺(tái)“虛擬機(jī)”看待,并在這臺(tái)虛擬機(jī)上分配資源,用戶通過(guò)使用framework進(jìn)行資源管理。Marathon是一個(gè)Mesos的framework,用來(lái)啟動(dòng)、管理需要長(zhǎng)時(shí)間運(yùn)行的任務(wù)。deimos則是一個(gè)為Mesos準(zhǔn)備的Docker插件。
其它工具
Cloud Foundry在5月份發(fā)布的Docker版的BOSH工具,有興趣的讀者可以參考一下Decker注 28項(xiàng)目。
注 28 Decker = Docker + Cloud Foundry. http://www.cloudcredo.com/decker-docker-cloud-foundry/
另外Clocker注 29這個(gè)項(xiàng)目也比較有意思,它基于Apache Brooklyn(目前還在孵化器中),能在多云環(huán)境下基于Docker容器進(jìn)行應(yīng)用部署。這個(gè)項(xiàng)目的擴(kuò)展性很好,非常方便自己定制。不過(guò)項(xiàng)目還太年輕,要想使用的話恐怕還需要些時(shí)日。
注 29 https://github.com/brooklyncentral/clocker
5.3.2. 和OS的深度結(jié)合
在Fedora上使用的systemd注 30就已經(jīng)提供了集成容器和虛擬機(jī)的功能。
注 30 systemd是用來(lái)替代Linux中init系統(tǒng)的系統(tǒng)軟件,目前已經(jīng)在Fedora/RHEL等中采用
Docker除了能在各種主流Linux上使用之外,還出現(xiàn)了有專為運(yùn)行Docker容器而定制的OS了,比如CoreOS注 31,RedHat的Atomic注 32。
注 31 https://coreos.com/ ,在6月末剛剛宣布獲得了八百萬(wàn)美元的A輪融資
注 32 http://www.projectatomic.io/
CoreOS
CoreOS是一個(gè)精簡(jiǎn)版的Linux,可以運(yùn)行在既有硬件或者云上,它也是一個(gè)最近備受關(guān)注的項(xiàng)目。CoreOS不提供類似yum或者apt類似的包管理工具,你不需要在CoreOS中安裝軟件,而是讓程序都在Docker容器中去運(yùn)行。CoreOS使用systemd和fleet來(lái)對(duì)容器進(jìn)行管理,通過(guò)etcd進(jìn)行服務(wù)發(fā)現(xiàn)和配置信息共享。
Atomic
Project Atomic是最近才發(fā)布的一個(gè)項(xiàng)目,它也是一個(gè)瘦身版的Linux,只包含systemd/geard注 33/rpm-OSTree以及Docker組件,專門用來(lái)部署和管理Docker容器。它能在接近硬件裸機(jī)級(jí)別上高性能的運(yùn)行大量容器,而且它還是基于SELinux的,在安全上也有保障。
注 33 http://openshift.github.io/geard/
5.3.3. Container技術(shù)規(guī)范化和兼容性
就在DockerCon14開始的前一天,F(xiàn)lynn發(fā)布了Pinkerton,一個(gè)支持在其它容器中使用Docker鏡像的技術(shù)。
而另一方面,我們知道除了LXC,Docker之外,還有很多其它容器技術(shù),比如Zones,jail和LMCTFY等,那么試想這么多的容器之上,是否有統(tǒng)一接口、互相兼容或者在容器上加一層封裝的可能性呢?比如讓一種容器的鏡像,能運(yùn)行到其它容器中?Docker容器已經(jīng)能互相連接了,會(huì)不會(huì)異構(gòu)的容器之間也能進(jìn)行某種交互呢?
6. 總結(jié)
Docker雖然入門和使用起來(lái)非常簡(jiǎn)單,但整個(gè)生態(tài)系統(tǒng)還是挺龐大的,而且其底層技術(shù)也都很復(fù)雜,由于篇幅有限及筆者學(xué)識(shí)不精,也只能說(shuō)一些皮毛之事,最多只能算是拋塊磚而已;而且筆者也有一種意猶未盡的感覺,但是由于篇幅所限,不能說(shuō)到面面俱到,更多的內(nèi)容,還請(qǐng)各位讀者自己去深入挖掘。
總之筆者認(rèn)為Docker還是非常有趣的一個(gè)東西,值得大家花些時(shí)間體驗(yàn)一下,相信在各位的工作中多多少少都能用的上Docker