基于Docker的應(yīng)用程序背后的許多理念從嚴(yán)格意義上講并非很新穎,但Docker給那些舊觀念帶來了全新視角。借助許多云開發(fā)實(shí)踐,Docker促進(jìn)了最佳實(shí)踐,比如12-Factor應(yīng)用程序。這些最佳實(shí)踐當(dāng)初是為了構(gòu)建基于PaaS的應(yīng)用程序而開發(fā)的,如今普遍適用于基于Docker的應(yīng)用程序。
我們能從Docker熱潮中學(xué)到什么?不妨看一看這四個(gè)方面。
1. 微服務(wù)架構(gòu)大行其道
整體式云應(yīng)用程序的程序開發(fā)已玩完了。取而代之的是微服務(wù)架構(gòu),這種架構(gòu)可以將大型應(yīng)用程序及所有內(nèi)置功能分解為更小的、目的導(dǎo)向的服務(wù),而這些服務(wù)又可以借助通用的REST API與對方進(jìn)行聯(lián)系。
上世紀(jì)90年代,有一種類似的概念,名為基于接口/組件的架構(gòu)。而最近,面向服務(wù)架構(gòu)(SOA)似乎迎來了一些發(fā)展勢頭。如今,微服務(wù)概念已成為Docker社區(qū)的一個(gè)標(biāo)準(zhǔn)文化基因,流行的趨勢是將應(yīng)用程序分解為分離的、極簡的、專門的容器,這些容器專注于只做好一件事。
完全封裝的Docker容器能夠?yàn)槲⒎?wù)應(yīng)用程序構(gòu)建一種高效的分布式模型,從而支持微服務(wù)。這讓規(guī)模較小的開發(fā)團(tuán)隊(duì)有機(jī)會(huì)得以使用較大規(guī)模的架構(gòu)(比如Facebook和推特使用的那種架構(gòu)),因而改變了云開發(fā)實(shí)踐。
2. 讓開發(fā)和運(yùn)營的關(guān)系更緊密
盡管Puppet、Chef、Salt及其他工具引領(lǐng)了開發(fā)運(yùn)營(DevOps)潮流,但這些工具在運(yùn)營團(tuán)隊(duì)當(dāng)中比在開發(fā)人員當(dāng)中更受歡迎。
Docker是第一種在開發(fā)人員當(dāng)中與在運(yùn)營工程師當(dāng)中一樣受歡迎的開發(fā)運(yùn)營工具。原因何在?因?yàn)殚_發(fā)人員可以在容器里面工作,而同時(shí)運(yùn)營工程師可以在容器外面工作。
開發(fā)團(tuán)隊(duì)采用Docker時(shí),他們?yōu)檐浖_發(fā)生命周期增添了一層新的敏捷性。一大區(qū)別在于一致性。基于Docker的應(yīng)用程序在筆記本電腦上運(yùn)行與在生產(chǎn)環(huán)境中運(yùn)行完全一模一樣。由于Docker圍繞應(yīng)用程序封裝整個(gè)狀態(tài),你沒必要因底層操作系統(tǒng)存在的架構(gòu)差異而操心失去依賴項(xiàng)或軟件缺陷。
3. 為持續(xù)集成確保一致性
持續(xù)集成能夠?qū)崿F(xiàn)代碼測試自動(dòng)化,因而一向是減少成品中軟件缺陷數(shù)量的好方法。不過持續(xù)集成存在兩大弊端。
首先,很難封裝所有依賴項(xiàng)。Jenkins和Travis等傳統(tǒng)的持續(xù)集成/持續(xù)交付(CI/CD)技術(shù)通過獲取源代碼庫,構(gòu)建應(yīng)用程序組件。雖然這種方式相對適用于許多應(yīng)用程序,不過二進(jìn)制依賴項(xiàng)或操作系統(tǒng)層面的變化會(huì)讓代碼在生產(chǎn)環(huán)境中運(yùn)行起來與在開發(fā)/測試/質(zhì)量保證環(huán)境中運(yùn)行起來略有不同。由于 Docker將應(yīng)用程序的整個(gè)狀態(tài)封裝起來,更能確保代碼在開發(fā)/測試/質(zhì)量保證環(huán)境中與在生產(chǎn)環(huán)境中運(yùn)行起來一模一樣。
其次,持續(xù)集成并不是為微服務(wù)架構(gòu)構(gòu)建的。持續(xù)集成的設(shè)計(jì)思路其實(shí)假設(shè)應(yīng)用程序位于一個(gè)代碼庫當(dāng)中。然而,Docker最佳實(shí)踐鼓勵(lì)各個(gè)Docker容器都松散耦合的微服務(wù)架構(gòu)。這帶來了新一代的持續(xù)集成/持續(xù)交付工具,比如Drone和Shippable,它們都是從頭設(shè)計(jì)的,設(shè)計(jì)當(dāng)初就著眼于Docker容器。這些工具讓你可以開始測試從多個(gè)代碼庫獲取的多容器應(yīng)用程序。
4. 確保最佳容器彼此協(xié)作
Docker 并不調(diào)整你自己的服務(wù)窗口,比如Hadoop、Nginx或MongoDB,而是鼓勵(lì)開源社區(qū)在Docker Hub中相互協(xié)作、微調(diào)容器,這個(gè)公共代碼庫讓每個(gè)人都可以使用同類中最佳容器。由于Docker容器能夠封裝狀態(tài),它們讓你可以更靈活地配置運(yùn)行起來最佳的軟件。
因此,Docker讓任何人都可以充分利用封裝方面的最佳實(shí)踐(具體表現(xiàn)為結(jié)合別人的容器),從而改變了云開發(fā)實(shí)踐。這就像云組件有一套樂高積木,它們終于有了組合起來的標(biāo)準(zhǔn)。
云計(jì)算領(lǐng)域的樂高積木
時(shí)常出現(xiàn)這一幕:一項(xiàng)新技術(shù)出現(xiàn)后,顛覆了現(xiàn)狀。就在不久前,云計(jì)算領(lǐng)域還以按需提供、API驅(qū)動(dòng)的虛擬機(jī)以及圍繞虛擬機(jī)建立的服務(wù)為主。這帶來了一系列旨在克服虛擬機(jī)局限性的工具。
Docker 在迅速改變云計(jì)算領(lǐng)域的規(guī)則,徹底顛覆云技術(shù)格局。Docker為持續(xù)集成/持續(xù)交付、微服務(wù)、開源協(xié)作和開發(fā)運(yùn)營鋪平了道路,不但改變了應(yīng)用程序開發(fā)生命周期,還改變了云工程技術(shù)實(shí)踐。每天,成千上萬新的開發(fā)人員在開心地重新設(shè)計(jì)或構(gòu)建基于Docker的新應(yīng)用程序。想在不斷變化的世界保持競爭力,關(guān)鍵是要明白Docker熱潮會(huì)涌向何方。