1. 程式人生 > >Docker應用場景以及開發流程

Docker應用場景以及開發流程

這裡寫圖片描述

1. 簡化配置

這是Docker公司宣傳的Docker的主要使用場景。虛擬機器的最大好處是能在你的硬體設施上執行各種配置不一樣的平臺(軟體、系統),Docker在降低額外開銷的情況下提供了同樣的功能。它能讓你將執行環境和配置放在程式碼中然後部署,同一個Docker的配置可以在不同的環境中使用,這樣就降低了硬體要求和應用環境之間耦合度。

2. 程式碼流水線(Code Pipeline)管理

前一個場景對於管理程式碼的流水線起到了很大的幫助。程式碼從開發者的機器到最終在生產環境上的部署,需要經過很多的中間環境。而每一箇中間環境都有自己微小的差別,Docker給應用提供了一個從開發到上線均一致的環境,讓程式碼的流水線變得簡單不少。

3. 提高開發效率

不同的開發環境中,我們都想把兩件事做好。一是我們想讓開發環境儘量貼近生產環境,二是我們想快速搭建開發環境。

理想狀態中,要達到第一個目標,我們需要將每一個服務都跑在獨立的虛擬機器中以便監控生產環境中服務的執行狀態。然而,我們卻不想每次都需要網路連線,每次重新編譯的時候遠端連線上去特別麻煩。這就是Docker做的特別好的地方,開發環境的機器通常記憶體比較小,之前使用虛擬的時候,我們經常需要為開發環境的機器加記憶體,而現在Docker可以輕易的讓幾十個服務在Docker中跑起來。

4. 隔離應用

有很多種原因會讓你選擇在一個機器上執行不同的應用,比如之前提到的提高開發效率的場景等。

我們經常需要考慮兩點,一是因為要降低成本而進行伺服器整合,二是將一個整體式的應用拆分成鬆耦合的單個服務(譯者注:微服務架構)。如果你想了解為什麼鬆耦合的應用這麼重要,請參考Steve Yege的這篇論文,文中將Google和亞馬遜做了比較。

5. 整合伺服器

正如通過虛擬機器來整合多個應用,Docker隔離應用的能力使得Docker可以整合多個伺服器以降低成本。由於沒有多個作業系統的記憶體佔用,以及能在多個例項之間共享沒有使用的記憶體,Docker可以比虛擬機器提供更好的伺服器整合解決方案。

6. 除錯能力

Docker提供了很多的工具,這些工具不一定只是針對容器,但是卻適用於容器。它們提供了很多的功能,包括可以為容器設定檢查點、設定版本和檢視兩個容器之間的差別,這些特性可以幫助除錯Bug。

7. 多租戶環境

另外一個Docker有意思的使用場景是在多租戶的應用中,它可以避免關鍵應用的重寫。我們一個特別的關於這個場景的例子是為IoT(譯者注:物聯網)的應用開發一個快速、易用的多租戶環境。這種多租戶的基本程式碼非常複雜,很難處理,重新規劃這樣一個應用不但消耗時間,也浪費金錢。

使用Docker,可以為每一個租戶的應用層的多個例項建立隔離的環境,這不僅簡單而且成本低廉,當然這一切得益於Docker環境的啟動速度和其高效的diff命令。

8. 快速部署

在虛擬機器之前,引入新的硬體資源需要消耗幾天的時間。虛擬化技術(Virtualization)將這個時間縮短到了分鐘級別。而Docker通過為程序僅僅建立一個容器而無需啟動一個作業系統,再次將這個過程縮短到了秒級。這正是Google和Facebook都看重的特性。

你可以在資料中心建立銷燬資源而無需擔心重新啟動帶來的開銷。通常資料中心的資源利用率只有30%,通過使用Docker並進行有效的資源分配可以提高資源的利用率。

容器化開發模式

       傳統模式中,開發團隊在開發環境中完成軟體開發,本地完成單元測試,測試通過,則可提交到程式碼版本管理庫;測試團隊打包進行進一步測試。運維團隊把應用部署到測試環境,開發團隊或測試團隊在冊進行測試,沒問題後通知佈署人員釋出到生產環境。
       上述過程涉及到三個環境:開發、測試和生產,以及三個團隊:開發、測試、運維。多個環境和多個團隊之間的這種互動,很容易出現彼此環境不一致的情況,浪費不必要的人力物力。
       在容器模式中,應用時以容器的形式存在,所有和該應用相關的依賴都會在容器中,因此移植非常方便,不會存在像傳統模式中的環境不一致問題。

       在容器化的應用中,專案的參與人員的作用貫穿整個開發、測試、生產三個環節。
       專案開始,根據專案預期建立好需要的基礎base映象,nginx、tomcat、mysql映象或者將Dockerfile分發給所有開發人員,所有開發人員根據Dockerfile建立的容器或者從內部長褲下載的映象進行開發,達到開發環境的充分一致。若開發過程中需要新增新的軟體,只需要申請修改基礎base映象的Dockerfile即可。

       專案任務結束後,調整Dockerfile或者Docker映象,然後分發給測試部門,測試部門馬上就可以進行測試,消除了部署困難等糾纏的問題。

這裡寫圖片描述