服務(wù)項(xiàng)目:網(wǎng)站建設(shè)、仿站、程序開發(fā)、APP開發(fā)設(shè)計(jì)、移動(dòng)網(wǎng)站開發(fā)設(shè)計(jì)、企業(yè)網(wǎng)站設(shè)計(jì)、電子商務(wù)網(wǎng)站開發(fā)、網(wǎng)站維護(hù)、網(wǎng)站推廣、UX/UI 、HTML5、CSS3、JS / Jquery ...
四川???萍加邢薰?></a></div>
                    <div   id=四川???萍加邢薰? title=
四川???萍加邢薰?(開發(fā)設(shè)計(jì)官網(wǎng))TEL : 15308000360 / QQ : 38585404

您的位置:首頁(yè) > 技術(shù)經(jīng)驗(yàn) > 網(wǎng)站運(yùn)維 > 正文

漫談Docker-云時(shí)代的程序分發(fā)方式
技術(shù)支持服務(wù)電話:15308000360 【7x24提供運(yùn)維服務(wù),解決各類系統(tǒng)/軟硬件疑難技術(shù)問題】

4.1.3. 新組件

Docker Engine也有了一些新的變化,而部分功能實(shí)際上早在Docker 0.9就開始提供了。如果你還在運(yùn)行Docker 0.8及其以前的版本的話,那么還是及早升級(jí)的比較好。

libswarm

libswarm是一個(gè)"toolkit for composing network services”。它定義了標(biāo)準(zhǔn)接口用于管理和編配一個(gè)分布式系統(tǒng),并提供了一致的API。libswarm打算支持各種編配系統(tǒng),雖然它看上去更像個(gè)高層接口封裝的API而已。

libcaontainer

libcontainer是一個(gè)容器的參考實(shí)現(xiàn),它通過Go語(yǔ)言實(shí)現(xiàn)來使用Linux的命名空間等技術(shù),而不需要額外的外部依賴。

實(shí)際上在Docker 0.9的時(shí)候這個(gè)模塊就已經(jīng)分離出來了,到了1.0的時(shí)候,此模塊成為了獨(dú)立項(xiàng)目并且可以單獨(dú)使用。并且從0.9版本的時(shí)候開始Docker就已經(jīng)開始就采用libcontainer來代替LXC作為默認(rèn)的容器實(shí)現(xiàn)方式了,LXC變成了可選項(xiàng)之一。

libchan

libchan現(xiàn)在是Docker的標(biāo)準(zhǔn)通信層,被稱為網(wǎng)絡(luò)上的go channel,普通的Go channel只能運(yùn)行在單機(jī)上,而libchan可以跨Unix socket或純TCP/TLS/HTTP2/SPDY/Websocket等運(yùn)行。使用libchan,可以非常方便的進(jìn)行任意結(jié)構(gòu)的消息傳遞、實(shí)時(shí)雙工異步通信、并發(fā)編程及同步等。

最后我們?cè)購(gòu)南旅娴倪@張圖,更形象的認(rèn)識(shí)一下這三個(gè)工具的作用及關(guān)系。

libchan,libcontainer,libswarm

4.2. 大公司的熱情

如果看一下演講嘉賓列表注 13,你一定會(huì)感嘆這陣容太豪華了。不錯(cuò),很多演講嘉賓都來自大型互聯(lián)網(wǎng)公司,比如Facebook、Twitter、Google、Heroku、Yelp以及Group等,很多還都是VP、CTO等高級(jí)別的管理人員,可見這次大會(huì)規(guī)格之高,分量之重。并且他們中的很多人還都進(jìn)入到了Docker治理委員會(huì)。

注 13 http://www.dockercon.com/speakers.html

4.2.1. Google

前面我們已經(jīng)介紹了Google公司內(nèi)部的服務(wù)都是跑在容器之中的,Google對(duì)Docker也表現(xiàn)出了相當(dāng)濃厚的興趣。除了他們負(fù)責(zé)基礎(chǔ)設(shè)施的VP Eric Brewer進(jìn)行了主題為《Robust Containers》的演講之外,他們還介紹了自己開源容器管理軟件Kubernetes和對(duì)容器資源進(jìn)行監(jiān)控的cAdvisor。

4.2.2. Red Hat

Red Hat Enterprise Linux 7版將內(nèi)置Docker,雖然版本還是0.11,不過很快就會(huì)升級(jí)的。另外Atomic項(xiàng)目也是Red Hat主導(dǎo)開發(fā)的。

4.3. 其它感受

其他一些筆者認(rèn)為比較有意思的就是使用基于Mesos工具群來對(duì)容器進(jìn)行集群管理了。比如Twitter和Groupon都做了使用Mesos + Aurora/Marathon + ZooKeeper在數(shù)據(jù)中心進(jìn)行資源分配和管理的分享;甚至在Twitter看來,數(shù)據(jù)中心也可以看做是一臺(tái)計(jì)算機(jī),Mesos就是這臺(tái)計(jì)算機(jī)的OS。

另外就像我們前面在Docker使用場(chǎng)景中介紹過的那樣,很多公司都在使用Docker進(jìn)行持續(xù)集成。

5. Docker現(xiàn)狀及展望

在本節(jié)我們將會(huì)站在一個(gè)開放的角度和更高的層次來審視一下Docker的現(xiàn)狀,包括其問題點(diǎn),以及對(duì)Docker將來的可能性做一些膚淺的推測(cè)。

5.1. 生態(tài)系統(tǒng)

Docker的發(fā)展離不開其生態(tài)系統(tǒng)注 14,我們學(xué)習(xí)Docker也同樣需對(duì)其生態(tài)系統(tǒng)有所了解。我們可以從下面三點(diǎn)來審視一下Docker當(dāng)前的發(fā)展?fàn)顩r。

注 14 關(guān)于Docker的生態(tài)環(huán)境,大家也可以參考網(wǎng)上有人制作的一份思維導(dǎo)圖。http://www.mindmeister.com/389671722/docker-ecosystem

5.1.1. 廠商支持

前面我們已經(jīng)說過了,包括RedHat等在內(nèi)的Linux發(fā)行商以及Google、AWS、Rackspace等云服務(wù)提供商都表示對(duì)Docker非常濃厚的興趣,甚至已經(jīng)進(jìn)行了非常深入的實(shí)踐。從這一點(diǎn)上來說,Docker有非常好的政治背景。

5.1.2. 開源項(xiàng)目

圍繞Docker的開源項(xiàng)目就更多了,主要有以下幾類,我們將挑選出一些比較有意思且開發(fā)較活躍的項(xiàng)目進(jìn)行簡(jiǎn)單介紹。

PaaS平臺(tái)

PaaS平臺(tái)大多基于容器技術(shù),Docker天生就適合做PaaS。

  • Flynn

Flynn是一個(gè)高度模塊化的下一代開源PaaS實(shí)現(xiàn)。Flynn分為兩層,Layer 0是底層,也叫資源層,基于Google的Omega論文注 15開發(fā),這一層也包括服務(wù)發(fā)現(xiàn)。Layer 1則用來進(jìn)行部署、管理應(yīng)用程序。Flynn目前開發(fā)比較活躍,是一個(gè)值得關(guān)注的開源項(xiàng)目,而且今年夏天很可能就會(huì)發(fā)布1.0的版本了。

注 15 http://eurosys2013.tudos.org/wp-content/uploads/2013/paper/Schwarzkopf.pdf

https://flynn.io/

  • Deis

Deis是一個(gè)支持共有和私有PaaS的開源實(shí)現(xiàn)。它支持運(yùn)行使用Ruby, Python, Node.js, Java, PHP和Go等語(yǔ)言進(jìn)行應(yīng)用開發(fā),并能部署到AWS, Rackspace和DigitalOcean等云上。

http://deis.io/

CI/CD(持續(xù)集成/持續(xù)部署)

由于Docker的沙箱性、創(chuàng)建速度快等特性,它與生俱來也適合進(jìn)行CI/CD。很多基于Docker的CI/CD開源方案和服務(wù)如雨后春筍般的涌現(xiàn)出來。

  • Drone

開源的支持各種語(yǔ)言的CI工具,并且提供了CI/CD服務(wù)Drone.io

https://drone.io/

  • Strider CD

開源的CI/CD方案,集成GitHub。

http://stridercd.com/

私有倉(cāng)庫(kù)托管(Registry)/容器托管

這類服務(wù)主要進(jìn)行私有倉(cāng)庫(kù)的托管,根據(jù)用戶的托管倉(cāng)庫(kù)數(shù)量收費(fèi)。Doccker Hub也提供私有倉(cāng)庫(kù)的收費(fèi)套餐。

  • Quay

Quay除了能托管私有鏡像之外,還能和GitHub集成,使用Dockerfile進(jìn)行鏡像構(gòu)建。

https://quay.io/

  • Shippable

Shippable支持Github和Bitbucket,并且提供100%免費(fèi)的服務(wù),包括私有倉(cāng)庫(kù)。

https://www.shippable.com/

  • Orchard

Orchard也是一個(gè)和StackDock類似的Docker托管服務(wù),它提供了便捷的命令行工具來運(yùn)行各種Docker命令。同時(shí)它也提供免費(fèi)的私有Registry服務(wù),前面介紹的Fig工具就是此公司開發(fā)的。

https://www.orchardup.com/

筆者認(rèn)為傳統(tǒng)的云計(jì)算服務(wù)提供商除了在云主機(jī)上提供對(duì)容器的支持之外,說不定將來還會(huì)提供專門托管容器的服務(wù)。

開發(fā)管理工具

軟件工程師天生就是閑不住和想盡一切辦法要提高自己效率的一群人。這里我們簡(jiǎn)單介紹兩個(gè)方便進(jìn)行Docker開發(fā)的工具。

  • Shipyard

Shipyard是一個(gè)Docker鏡像和容器管理工具,除了基本的鏡像構(gòu)建,容器啟動(dòng)等功能之外,它還具有在瀏覽器中attach到容器的功能,并通過hipache16來進(jìn)行容器之間的連接。同時(shí)它也支持跨節(jié)點(diǎn)的Docker管理和容器Metrics采集。

注 16 Hipache: a distributed HTTP and websocket proxy https://github.com/dotcloud/hipache

https://github.com/shipyard/shipyard

  • Fig

Fig是一個(gè)為了提高基于Docker開發(fā)的效率而創(chuàng)建的工具,它通過一個(gè)配置文件來管理多個(gè)Docker容器,非常適合組合使用多個(gè)容器進(jìn)行開發(fā)的場(chǎng)景。

http://orchardup.github.io/fig/index.html

5.1.3. 社區(qū)

Docker開發(fā)社區(qū)非?;钴S,除了35名全職員工(外加一只烏龜)之外,還有450名左右的外部代碼貢獻(xiàn)者。到目前Docker Hub已經(jīng)擁有超過16000多個(gè)應(yīng)用,在GitHub上也有超過7000個(gè)Docker相關(guān)的項(xiàng)目,其中不乏很多受關(guān)注度非常高的項(xiàng)目。

在Twitter上,科技媒體上以及個(gè)人Blog上,每天都能看到很多關(guān)于Docker的內(nèi)容。

線下社區(qū)活動(dòng)也在蓬勃展開中。在世界范圍內(nèi)除了南極洲,Docker Meetup已經(jīng)遍布35個(gè)國(guó)家100多個(gè)城市,北京在今年3月8日舉行了國(guó)內(nèi)第一次的Docker Meetup,當(dāng)時(shí)有超過40人報(bào)名參加。而且第二次北京Docker Meetup將在七月中舉行,目前正在緊鑼密鼓的籌備之中。

5.2. 運(yùn)用中的問題點(diǎn)

雖然Docker很火,有時(shí)候我們也需要反過來看看它還有哪些不令我們滿意的地方,或者說在使用上還存有疑慮。當(dāng)然這里的問題都是筆者個(gè)人主觀看法,只是非常片面的一部分,各位讀者一定要帶著批判性的思維去理解它。

5.2.1. Debug、調(diào)優(yōu)

查看日志可能是最簡(jiǎn)單直接的方式了。當(dāng)然也有很多人都會(huì)在Docker容器中運(yùn)行一個(gè)SSHD服務(wù),然后通過SSH登錄到容器中去,不過不建議使用這種方法。

官方推薦使用nsenter注 17工具來完成類似的工作,通過它可以進(jìn)入到指定的namespace中并控制一個(gè)容器。

注 17 https://github.com/jpetazzo/nsenter

5.2.2. 數(shù)據(jù)管理

這里所說的數(shù)據(jù)包括數(shù)據(jù)庫(kù)文件,Log,用戶上傳的文件等。

在容器中要想處理數(shù)據(jù)文件,可能最簡(jiǎn)單的方式就是通過共享卷標(biāo)來實(shí)現(xiàn),即docker run -v。但是隨之帶來的問題是既然是文件,都存在備份問題,如何備份?用ftp或者在容器和宿主機(jī)之間共享文件夾的方式?而且隨著容器數(shù)量的增多,對(duì)共享卷標(biāo)的管理也勢(shì)必會(huì)更復(fù)雜。

筆者認(rèn)為理想的解決方法就是使用云服務(wù),比如數(shù)據(jù)庫(kù)使用RDS,文件使用S3。如果不想使用云服務(wù),則可以考慮自己通過FastDFS等實(shí)現(xiàn)自己的“云存儲(chǔ)”。Log則通過fluentd/logstash進(jìn)行集計(jì)再用Graphite/Kibana等進(jìn)行可視化。

5.2.3. 如何和配置管理工具配合使用

到底在容器時(shí)代,還需不需要傳統(tǒng)的Puppet或Chef這樣的配置管理工具?當(dāng)然,從配置管理工具的角度來說,他們都不會(huì)放棄對(duì)Docker的支持,比如Puppet就已經(jīng)增加了對(duì)Docker(安裝、管理鏡像和容器)的支持。

但隨著不可變基礎(chǔ)設(shè)施的普及注 18,冪等性將不再重要,因?yàn)槲覀兊娜萜髦恍枰渲靡淮?。要?duì)容器做出修改,可能只需要修改Dockerfile/manifest/recipe文件重新Provisioning即可。而且也不需要在容器內(nèi)部安裝任何agent,這樣的話類似Ansible這樣純SSH的配置管理工具比較適合對(duì)Docker進(jìn)行配置。甚至還可能出現(xiàn)專門為Docker的更簡(jiǎn)單的配置管理工具。

注 18 筆者個(gè)人偏見而已

5.2.4. 安全性

是軟件就會(huì)存在bug,包括安全漏洞,Docker也不例外。就



上一篇:億級(jí)Web系統(tǒng)搭建—單機(jī)到分布式集群
下一篇:重新思考數(shù)據(jù)中心網(wǎng)絡(luò)

相關(guān)熱詞搜索:docker 分發(fā)方式