Docker從根本層面改變應(yīng)用程序開(kāi)發(fā)的四種方式
譯文Docker容器技術(shù)如何簡(jiǎn)化應(yīng)用程序的開(kāi)發(fā)與部署、促進(jìn)***實(shí)踐并催生新一代以應(yīng)用為基礎(chǔ)的微服務(wù)機(jī)制。
Docker技術(shù)方案的發(fā)展勢(shì)頭簡(jiǎn)直如同一場(chǎng)燎原烈火。這項(xiàng)新型Linux容器技術(shù)在不可阻擋的前進(jìn)道路上引燃了一切事物,而其進(jìn)展速度之快令很多從業(yè)人員根本無(wú)法跟上其迅猛的腳步。Docker不僅是有史以來(lái)人氣***的開(kāi)源項(xiàng)目之一,同時(shí)也已經(jīng)給人們構(gòu)建應(yīng)用程序的方式帶來(lái)了根本性變革。
基于Docker的應(yīng)用程序背后所暗含的很多解決思路從嚴(yán)格意義上講已經(jīng)與最初有所不同,但Docker確實(shí)給這些陳舊的的觀念帶來(lái)了新鮮活力。借助大量云部署實(shí)踐機(jī)制,Docker鼓勵(lì)技術(shù)人員采用像12-Factor應(yīng)用那樣的最初實(shí)踐手段——這是一套專門用于構(gòu)建基于PaaS應(yīng)用程序的方案,目前也已經(jīng)適用于基于Docker應(yīng)用的開(kāi)發(fā)工作。
我們能夠從Docker引發(fā)的時(shí)代浪潮中學(xué)到些什么?下面請(qǐng)大家隨我從四個(gè)角度加以思考。
1. 微服務(wù)架構(gòu)的崛起
大規(guī)模整體性云應(yīng)用程序開(kāi)發(fā)已經(jīng)步入絕路。如今它開(kāi)始被微服務(wù)架構(gòu)所取代,其特色在于將大型應(yīng)用程序——及其全部?jī)?nèi)置功能——拆分成更小的、目的驅(qū)動(dòng)型服務(wù),并通過(guò)通用REST API實(shí)現(xiàn)彼此之間的通信。
早在上世紀(jì)九十年代就曾經(jīng)出現(xiàn)過(guò)名為基于接口/組件架構(gòu)的類似概念。時(shí)至今日,SOA(即面向服務(wù)架構(gòu))似乎已經(jīng)獲得了相當(dāng)良好的發(fā)展勢(shì)頭。目前微服務(wù)概念已經(jīng)在Docker社區(qū)當(dāng)中成為標(biāo)準(zhǔn)性模因,其主流趨勢(shì)在于將應(yīng)用程序拆分成解耦、極簡(jiǎn)且專門針對(duì)容器機(jī)制的設(shè)計(jì)方案,且只專注于實(shí)現(xiàn)一項(xiàng)任務(wù)。
完全密閉的Docker容器機(jī)制能夠?yàn)槲⒎?wù)應(yīng)用程序創(chuàng)建出高效的分布式模型,從而順利實(shí)現(xiàn)微服務(wù)概念的現(xiàn)實(shí)轉(zhuǎn)化。這徹底改變了長(zhǎng)久以來(lái)的云開(kāi)發(fā)實(shí)踐思路,能夠?qū)⑾馞acebook及Twitter那樣的超大規(guī)模架構(gòu)加以拆分并提供給規(guī)模更小的多個(gè)開(kāi)發(fā)團(tuán)隊(duì)。
2. 讓開(kāi)發(fā)(Dev)與運(yùn)營(yíng)(Ops)聯(lián)系得更為緊密
盡管Puppet、Chef、Salt以及其它先行者已經(jīng)在DevOps的探索中作出了相當(dāng)?shù)呢暙I(xiàn),但這些工具的主要活動(dòng)舞臺(tái)仍然集中在運(yùn)營(yíng)團(tuán)隊(duì)而非開(kāi)發(fā)者群體當(dāng)中。
Docker是***款能夠在開(kāi)發(fā)人員群體中獲得與運(yùn)營(yíng)工程師同等認(rèn)可效果的DevOps工具。為什么會(huì)這樣?因?yàn)殚_(kāi)發(fā)人員可以在容器機(jī)制內(nèi)部工作,而運(yùn)營(yíng)工程師則能夠在容器外部以并行方向處理自己的任務(wù)。
當(dāng)開(kāi)發(fā)團(tuán)隊(duì)采納Docker的同時(shí),他們相當(dāng)于在軟件開(kāi)發(fā)生命周期當(dāng)中添加了新的敏捷性層。容器技術(shù)***的突破就在于其一致性?;贒ocker的應(yīng)用程序能夠在筆記本電腦與生產(chǎn)環(huán)境下獲得同樣的運(yùn)行效果。由于Docker將與應(yīng)用程序相關(guān)的所有狀態(tài)都封閉了起來(lái),因此大家根本用不著擔(dān)心底層操作系統(tǒng)的架構(gòu)差異會(huì)給應(yīng)用程序的運(yùn)行依賴性帶來(lái)影響、或是產(chǎn)生新的漏洞。
3. 保障持續(xù)集成的一致性
持續(xù)集成機(jī)制能夠自動(dòng)對(duì)代碼進(jìn)行測(cè)試,并借此成為盡可能降低最終產(chǎn)品中漏洞數(shù)量的一大理想途徑。不過(guò)持續(xù)集成仍然存在著兩大弊端。
首先,持續(xù)集成機(jī)制很難將所有依賴性加以封裝。以Jenkins以及Travis為代表的傳統(tǒng)持續(xù)集成/持續(xù)交付技術(shù)通過(guò)建立源代碼庫(kù)的方式分段實(shí)現(xiàn)應(yīng)用程序開(kāi)發(fā)。雖然這種處理方式對(duì)于很多應(yīng)用程序來(lái)說(shuō)并不是問(wèn)題,但二進(jìn)制依賴性或者操作系統(tǒng)層面的變化仍然難以避免,這就使得代碼在生產(chǎn)環(huán)境中的實(shí)際運(yùn)行效果同開(kāi)發(fā)/測(cè)試/質(zhì)量保證階段有所不同。相比之下,Docker由于可以將應(yīng)用程序的整體狀態(tài)加以封裝,因此能夠保證代碼在生產(chǎn)環(huán)境中擁有與開(kāi)發(fā)/測(cè)試/質(zhì)量保證階段相一致的實(shí)際效果。
第二,持續(xù)集成并非專為微服務(wù)架構(gòu)所構(gòu)建。持續(xù)集成的設(shè)計(jì)思路其實(shí)是假設(shè)將一款應(yīng)用程序鎖定在單一代碼庫(kù)當(dāng)中。然而Docker***實(shí)踐能夠提供大量彼此間松散耦合的Docker容器,而這對(duì)于微服務(wù)架構(gòu)來(lái)說(shuō)可謂***拍檔。由此也衍生出了一系列新一代持續(xù)集成/持續(xù)交付工具,以Drone與Shippable為代表的這些新型解決方案都在開(kāi)發(fā)之初就將Docker容器機(jī)制作為其立足根基。具體而言,這些工具允許大家對(duì)涉及多套代碼庫(kù)的多容器應(yīng)用程序加以測(cè)試。
4. 讓各類***容器機(jī)制實(shí)現(xiàn)協(xié)作
Docker并不主張大家將自己的服務(wù)容器按照Hadoop、Nginx或者M(jìn)ongoDB這樣的現(xiàn)有方案進(jìn)行調(diào)整,而是鼓勵(lì)我們通過(guò)開(kāi)源社區(qū)實(shí)現(xiàn)協(xié)作、并憑借Docker Hub這套公共庫(kù)進(jìn)行容器改進(jìn),從而讓每個(gè)人都能用到最出色的容器設(shè)計(jì)成果。由于Docker容器能夠?qū)?yīng)用狀態(tài)封裝于其中,因此大家完全能夠以更靈活的方式對(duì)軟件加以配置、保證其擁有***運(yùn)行效果。
有鑒于此,Docker憑借著這種允許每個(gè)人利用現(xiàn)成***實(shí)踐方案根據(jù)具體需求任意組合及對(duì)接的能力徹底改變了傳統(tǒng)云開(kāi)發(fā)機(jī)制。這有點(diǎn)像是將云組件當(dāng)成樂(lè)高積木,并最長(zhǎng)按照一定的標(biāo)準(zhǔn)將它們組合起來(lái)。
云計(jì)算領(lǐng)域的樂(lè)高積木
每一項(xiàng)新技術(shù)的出現(xiàn)都可能會(huì)對(duì)現(xiàn)有局面帶來(lái)顛覆性的影響。就目前而言,云一直由按需供應(yīng)、API驅(qū)動(dòng)虛擬機(jī)以及圍繞虛擬機(jī)建立服務(wù)等要素所支撐。由此帶來(lái)的弊端在于,所有針對(duì)現(xiàn)有機(jī)制打造的工具都會(huì)受到虛擬機(jī)局限性的嚴(yán)重束縛。
Docker正在迅速改變?cè)朴?jì)算領(lǐng)域的運(yùn)作規(guī)則,并徹底顛覆云技術(shù)的發(fā)展前景。從持續(xù)集成/持續(xù)交付到微服務(wù)、開(kāi)源協(xié)作乃至DevOps,Docker一路走來(lái)已經(jīng)給應(yīng)用程序開(kāi)發(fā)生命周期以及云工程技術(shù)實(shí)踐帶來(lái)了巨大變革。每一天都有成千上萬(wàn)名新的開(kāi)發(fā)者興高采烈地參與到原有應(yīng)用重構(gòu)或者全新Docker應(yīng)用開(kāi)發(fā)的相關(guān)工作中來(lái)。而了解Docker之火能夠快速呈現(xiàn)燎原之勢(shì)的理由,正是在這個(gè)不斷變化的技術(shù)世界中保持競(jìng)爭(zhēng)優(yōu)勢(shì)的關(guān)鍵所在。
【編輯推薦】
- 在Docker上建立多節(jié)點(diǎn)的Hadoop集群
- 基于 Docker 開(kāi)發(fā) NodeJS 應(yīng)用
- 使用 Docker 作為 Python 開(kāi)發(fā)環(huán)境
- 如何使用 Docker 來(lái)協(xié)助 X 系統(tǒng)上的開(kāi)發(fā)工作
- 調(diào)查顯示:OpenStack和Docker雄冠云計(jì)算項(xiàng)目之首
【責(zé)任編輯:林師授 TEL:(010)68476606】