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