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