Docker最全教程——从理论到实战(二)
容器是應用走向云端之后必然的發展趨勢,因此筆者非常樂于和大家分享我們這段時間對容器的理解、心得和實踐。
本篇教程持續編寫了2個星期左右,只是為了大家更好地了解、理解和消化這個技術,能夠搭上這波車。
你可以關注我們的公眾號“magiccodes”給我們留言,也可以加入我們的QQ群(85318032)一起討論,我們希望能夠多多交流,多多分享。
如果覺得不錯,請多多點贊或者請我們喝杯咖啡,你們的支持是我們前進的最大動力!
目
錄
目
錄
Docker的主要應用場景
簡化配置
虛擬機的最大好處是能在你的硬件設施上運行各種配置不一樣的平臺(軟件、系統),Docker在降低額外開銷的情況下提供了同樣的功能。它能讓你將運行環境和配置放在代碼中然后部署,同一個Docker的配置可以在不同的環境中使用,這樣就降低了硬件要求和應用環境之間耦合度。
簡單的來說,容器鏡像打包完成后,它就是個獨立的個體了,丟到哪里都能跑,而無需針對各個平臺去獨立配置。
代碼流水線(Code Pipeline)管理
前一個場景對于管理代碼的流水線起到了很大的幫助。代碼從開發者的機器到最終在生產環境上的部署,需要經過很多的中間環境。而每一個中間環境都有自己微小的差別,Docker給應用提供了一個從開發到上線均一致的環境,讓代碼的流水線變得簡單不少。
提高開發效率
不同的開發環境中,我們都想把兩件事做好。一是我們想讓開發環境盡量貼近生產環境,二是我們想快速搭建開發環境。
使用Docker非常簡單的就能夠實現這兩點,而且哪怕是開發環境的機器配置一般的情況下搭建多個生成服務應用。一臺一般配置服務器或開發機也能輕松的跑起多個Docker應用,而無需額外增加機器配置。因為Docker有個非常NB的特性,擁有虛擬化的特性,而幾乎沒有額外的開銷。
隔離應用
很多情況下,我們需要在一臺服務器上運行多個不同的應用,比如上面提到的提高開發效率的場景等。
我們經常需要考慮三點,一是因為要降低成本而進行服務器整合,二是將一個整體式的應用拆分成松耦合的單個服務(比如微服務架構),三是還需要考慮應用之間的兼容性。而對于Docker來說,支持起來就非常簡單了。同一臺機器,我可以同時運行N個Docker web應用,托管到不同的Web服務器(Kestrel、Ngnix、Tomcat),而無需擔心他們會搞起3Q大戰,也無需擔心我的開發機器會跑不起來。
整合服務器
正如通過虛擬機來整合多個應用,Docker隔離應用的能力使得Docker可以整合多個服務器以降低成本。由于沒有多個操作系統的內存占用,以及能在多個實例之間共享沒有使用的內存,Docker可以比虛擬機提供更好的服務器整合解決方案。
這就意味著資源得到更有效的利用——可以做更多衣服,而且還沒有邊角料,成本還更低。
調試能力
Docker提供了很多的工具,這些工具不一定只是針對容器,但是卻適用于容器。它們提供了很多的功能,包括可以為容器設置檢查點、設置版本和查看兩個容器之間的差別,這些特性可以幫助調試Bug。
多租戶環境
在多租戶的應用中,它可以避免關鍵應用的重寫。比如IoT(物聯網)的應用中,開發一個快速、易用的多租戶環境。這種多租戶的基本代碼非常復雜,很難處理,重新規劃這樣一個應用不但消耗時間,也浪費金錢。
使用Docker,可以為每一個租戶的應用層的多個實例創建隔離的環境,這不僅簡單而且成本低廉,當然這一切得益于Docker環境的啟動速度和其高效的diff命令。
就如同我們現在寫了一個不支持多租戶的業務程序,而實際的業務中經常會出現需要支持多租戶或者有新客戶需要使用的場景,這是我們通常的簡單做法是——部署一套新的代碼。當站點達到一定量的適合,要么重寫程序,要么維護人員Game over。
快速部署
在虛擬機之前,引入新的硬件資源需要消耗幾天的時間。虛擬化技術(Virtualization)將這個時間縮短到了分鐘級別。而Docker通過為進程僅僅創建一個容器而無需啟動一個操作系統,再次將這個過程縮短到了秒級。
你可以在服務器中或云端創建銷毀資源而無需擔心重新啟動帶來的開銷。通常情況下,服務器的資源利用率只有30%,而通過使用Docker并進行有效的資源分配可以提高資源的利用率。
市場實際反饋和調查
我們來看一份2016年用戶調查結果。
Docker為軟件供應鏈提供了應用程序開發的敏捷性,可控性和可移值性
- 用戶如何使用 Docker?
- 90% 的用戶使用 Docker 進行應用開發 
- 65%?的用戶使用 Docker 進行敏捷開發 
- 58%?的用戶將 Docker 用于生產 
- 48%?的用戶使用 Docker 控制應用環境 
- 41%?的用戶使用 Docker 實現應用的可移植性? 
?- Docker?的業務覆蓋:
- 78%:網頁應用 
- 75%:網頁?API 
- 70%:應用服務端 
- 42%:傳統數據庫 
- 27%:分布式數據庫 
- 13%:大數據 
Docker 帶來的敏捷性(響應速度和靈活性)吸引了越來越多的開發者。他們不僅能知道容器內部到底跑了什么,也能進一步理解 Docker 如何加速了軟件開發進程。另外,41% 的用戶表示應用的可移植性是他們決定使用 Docker 的關鍵因素。
通過?DevOps?的實踐,Docker?正在給應用交付帶來很多可以量化的提升
如圖所示:
- 93% 的?Docker 用戶已經在開發過程中獲得了益處 
- 85% 的?Docker?用戶已經在運維過程中獲得了益處 
- 57% 的 Docker 用戶見證了運維環境管理的提升 
- 45% 的?Docker 用戶已經提高了軟件發布的頻率 
大約一半的受訪者表示已經采用了持續集成(CI)和 DevOps,并且希望把這些實戰經驗應用到生產環境的持續交付中。剩下的受訪者則準備盡快跟上步伐,盡快嘗試 DevOps 和持續集成。另外,據調查顯示,用戶使用?Docker 發布應用的頻率平均提升了 13 倍。
Docker 對混合云策略至關重要,它使得用戶可以根據需求自由選擇私有和公有環境
如圖所示:
- 80%?的用戶表示?Docker 已經是云策略的一部分 
- 60%?的用戶則正在計劃使用?Docker?將業務遷移到云端。 
- 41%?的用戶希望實現跨環境的應用移植 
- 35+%?的用戶希望避免被云供應商綁定 
通過容器來交付的應用可以在任何基礎設施之上靈活遷移,同時這些基礎設施又可以提供不同層次的應用管理方式,而當業務在多個服務供應商之中尋求混合云或全云模式時,又可以完美避免被平臺捆綁。
對于按需部署或部署到云環境,Docker 提供了獨一無二的選擇。 80% 的用戶表示 Docker 已經成為他們云策略的一部分,超過 35% 的用戶使用 Docker 來避免被云服務供應商綁定。
Docker 實現了微服務架構,也讓遺留的單體應用轉變為現代應用
如圖所示:
- 65%?的組織面對遺留應用這一難題 
- 59%?的組織受到遺留應用和基礎設施僵化的影響 
- 44%?的組織正在使用微服務架構 
- 39%?的組織讓遺留應用煥發新生 
Docker 使得微服務架構的快速發展成為可能,同時它也將傳統的業務遷移到容器環境中,以此使得應用程序變得更加可移植。使用微服務架構進行交付是 Docker 的關鍵優勢!
Docker改變了什么?
綜上所述,Docker到底改變了什么?筆者是這么理解的:
- Docker改變了云服務,使云服務的共融共通的理想逐步成為了可能。并且Docker 已經是云策略的一部分,許多開發者正在計劃使用 Docker 將業務遷移到云端。另外,為了避免被云服務供應商綁定,Docker成為很多開發者的首選。 
- Docker改變了產品交付,為產品的整個生命周期提供了一整套的解決方案和流程。 
- Docker改變了開發方式,提供了簡化的環境配置、封裝的運行環境以及統一的環境。并且提供了快速部署的方式。 
- Docker改變了測試,多版本測試變得極為方便,快速構建測試環境也變得更加簡單并且無需開發人員干預或者搭建。 
- Docker改變了運維,環境的一致性讓運維變得更加簡單,同時熱更新的支持讓運維不再需要半夜加班部署更新,更新可以隨時進行。當出現重大問題時,還能快速回滾到指定版本。 
- Docker改變了架構,自動化擴容支持讓架構變得更加簡單,分布式系統也更加易于搭建和支持。同時遺留的單體應用也很易于轉變為現代應用。 
總之,在某種程度上,Docker改變了產品開發中的一些游戲規則。雖然Docker是一項技術,但是它也帶來了新的思維,新的流程和工作方法,Docker在推動行業的發展,Docker已經在改變世界,并且在逐步的變為事實……
上期內容
Docker最全教程——從理論到實戰(一)
長按識別二維碼,了解更多精彩內容
如果喜歡作者的文章,請關注“magiccodes”訂閱號以便第一時間獲得最新內容。本文版權歸作者和湖南心萊信息科技有限公司共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。
QQ群:
編程交流群<85318032>?
產品交流群<897857351>?
總結
以上是生活随笔為你收集整理的Docker最全教程——从理论到实战(二)的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 领域驱动设计,让程序员心中有码
- 下一篇: eShopOnContainers 知多
