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