八個Docker的真實應(yīng)用場景
在這篇文章中,我想介紹并分享一些Docker的實際應(yīng)用案例。
在我們討論Docker的使用場景之前,先來看看Docker這個工具有什么特別的地方吧。
Docker提供了輕量級的虛擬化,它幾乎沒有額外開銷,這個特性非??帷?/p>
首先你可以在享有Docker帶來的虛擬化層的時候卻不用擔(dān)心因此而帶來的額外開銷。第二個優(yōu)點是比之虛擬機,你能在單一機器上啟動更多數(shù)量的容器。
另外一個強有力的影響是容器的啟與停都能在幾秒中完成。Docker公司的創(chuàng)始人, Solomon Hykes,曾經(jīng)概括過Docker在單純的LXC之上做了哪些事情。
下面這些Docker的使用場景,為你展示了如何借助Docker的強力,在非常低的額外開銷的情況下,打造一個一致性的環(huán)境。
1. 簡化配置
這是Docker公司宣傳的Docker的主要使用場景。虛擬機的一個***好處是能在你的硬件設(shè)施上運行各種配置不一樣的平臺。Docker在降低額外開銷的情況下提供了同樣的功能。它能讓你將你的運行環(huán)境和配置放在代碼里面然后部署。同一個Docker的配置可以使用在不同的環(huán)境里面。這樣就降低了硬件要求和應(yīng)用環(huán)境之間耦合度。
2. 代碼流水線管理
前一個場景對于管理代碼的流水線起到了很大的作用。代碼從開發(fā)者的機器到最終在生產(chǎn)環(huán)境上的部署,需要流過很多的中間環(huán)境。而每一個中間環(huán)境都有自己微小的差別,Docker給應(yīng)用提供了一個從開發(fā)到上線均一致的環(huán)境,讓代碼的流水線變得輕松不少。
3. 提升開發(fā)者效率
這就帶來了一些額外的好處 - Docker能提升開發(fā)者的開發(fā)效率。如果你想看一個詳細一點的例子,可以參考Aater在DevOpsDays Austin 2014 大會或者是DockerCon上的演講。
不同開發(fā)者的環(huán)境中,我們想把兩件事做好,但卻各自差別不小。我們想讓開發(fā)環(huán)境盡量貼近生產(chǎn)環(huán)境,我們想開發(fā)環(huán)境盡量的以便開發(fā)中的交互使用。
理想狀態(tài)中,要達到***個目標,我們需要將每一個服務(wù)跑在獨自的虛擬機中以便顯現(xiàn)生產(chǎn)環(huán)境中服務(wù)的運作狀態(tài)。然而,我們卻不想每次必須要需要網(wǎng)絡(luò)連接,每次重新編譯的時候遠程連接上去干事情特別麻煩。這就是Docker做的特別好的地方,開發(fā)環(huán)境通常內(nèi)存不足,沒有像虛擬機那般貪婪的占用內(nèi)存,Docker可以輕易的讓幾十個服務(wù)在Docker中跑起來。
4. 隔離應(yīng)用
有很多種原因會讓你結(jié)果選擇在一個機器上跑著不同的應(yīng)用。一個場景便是早期描述的一個便于提高開發(fā)者開發(fā)效率,但是還有其他的場景。
有兩個需要考慮的便是因為降低成本的需要而進行的服務(wù)器整合,和將一個一體化的應(yīng)用漸進式的拆分成無耦合的單塊的計劃。如果你想了解為什么無耦合的應(yīng)用十分重要,請參考這篇Steve Yege的論文。文中將Google和亞馬遜做了比較。
5. 整合服務(wù)器
正如使用虛擬機來整合多個應(yīng)用,Docker隔離應(yīng)用的能力使Docker能整合多個服務(wù)器以達到降低成本的效果。由于沒有多個操作系統(tǒng)的內(nèi)存占用,以及能在多個實例之間共享沒有使用的內(nèi)存,Docker能比虛擬機方案提供更好的服務(wù)器整合。
6. 調(diào)試能力
Docker提供了很多的工具,他們不一定只是只針對容器,但是他們針對容器這個概念卻工作的十分好。他們同時也提供了十分有效的功能,這包括可以為容器設(shè)置檢查點,設(shè)置版本,和查看兩個容器之間的差別。這些特性在于查修bug的時候會十分有效。你可以在Docker拯救世界的文章里找到這一點的例證。
7. 多租戶環(huán)境
另外一個Docker有意思的使用場景是在多租戶的應(yīng)用中,可以避免關(guān)鍵應(yīng)用的重寫。我們一個特別的關(guān)于這個場景的例子是是為IoT的應(yīng)用開發(fā)一個快速,易用的多租戶環(huán)境。這種多租戶的原代碼庫遠超人想象的復(fù)雜,邏輯寫死,接手太難。將一個應(yīng)用重新架構(gòu)不但消耗時間,也浪費金錢。
使用Docker,為每一個租戶的應(yīng)用層的多個實例創(chuàng)建隔離的環(huán)境簡單且成本低廉。這之所以可能,跟Docker環(huán)境的啟動速度和其高校的對比命令是有關(guān)的。
你可以在這里了解關(guān)于此場景的更多信息。
8. 快速開發(fā)
在虛擬機之前,引入新的硬件資源需要耗費幾天的時間。虛擬化技術(shù)將這個時間降到了幾分鐘,Docker通過只是為進程創(chuàng)建一個容器無需啟動操作系統(tǒng),將這個時間降到了幾秒鐘。這就是Google和Facebook都不得不用的黑科技。
你可以在你的數(shù)據(jù)中心創(chuàng)建銷毀資源而無需擔(dān)心重新啟動的開銷。通常數(shù)據(jù)中心的資源利用率為30%,依靠更加有效的資源分配將將這個數(shù)字提升不會很難。并且,創(chuàng)建一個新的實例能更加有效的實現(xiàn)資源分配。
還有更多的Docker的應(yīng)用場景記錄于各種文章里面。你可以在此發(fā)現(xiàn)更多的案例研究。
對于我們來說,使用Docker的動機永遠是選擇正確的工具應(yīng)用到工作中。最有意思的部分是業(yè)務(wù)場景,然后我們在業(yè)務(wù)場景上發(fā)揮工具的***效能。