什麼是Docker?它是如何解決業務難題的?

資料星河發表於2018-11-12

  Docker是一個開發人員容納和輕鬆釋出軟體的平臺。它有助於消除配置環境以執行軟體的開銷,實質上是將環境與程式碼一起運送。

  我們通常使用裝運容器類比來解釋。貨運公司負責將集裝箱從A運輸到B,他們不關心您放入集裝箱的貨物,但他們確實關心您是否以正確的格式將貨物交給他們。

  將您的開發人員視為將軟體打包到容器的創造者。他們構建的內容可能會因特殊庫、優化或配置而變得複雜。一旦他們準備好運送的軟體,就該把它交給一家知道如何從A到B的貨運公司。幸運的是,現在它採用標準化格式,DevOps可以輕鬆地將其轉移到生產中。他們甚至可以自動化這個過程,以便將來更容易。

  在本文中,我們將舉例說明Docker的業務用例,概述如何構建Docker化的微服務,使用Amazon的彈性容器服務(ECS),並概述使用Docker能帶來的的商業利益。

  Docker和微服務架構的用例

  假設您的Web應用程式有一個資源密集型的使用者註冊頁面。在每月月初新使用者會蜂擁而至。為了處理負載,您的伺服器基礎結構正在幾個大型負載平衡伺服器上執行(如下所示)。不幸的是,這種處理規模一年中只有12天。這意味著您的公司將為大部分時間都沒有使用的資源付費。

什麼是Docker?它是如何解決業務難題的?

  現在,假如一個關鍵功能在註冊過程中發生了變化:出於法律原因,使用者需要被置於二級報告系統中。目前,您的註冊程式碼隱藏在應用程式的剩餘部分中,將此修復程式移至生產意味著整個系統的完全重新部署。開發人員和基礎設施將在本週末加班工作,以執行這一更新。最糟糕的是,這僅僅是一個相對較小的變化!

  在Docker化的世界中,這是小case。註冊過程可以與主應用程式分離,並使用滾動更新推送到生產環境。你可以星期一做,甚至不需要把網站關閉。無人不為之喝彩,因為這意味著軟體可以快速安全地投入生產。

  為了達到這一點,開發人員可以通過構建REST服務來啟動解耦註冊過程。一旦Web前端和註冊服務的程式碼分離,它們就可以進行Docker化。開發人員可以將所有程式碼、庫和配置打包到DockerImages中並移交給DevOps。DockerSwarm,AmazonECS或RedHat的OpenShift等叢集工具將使DevOps能夠託管Docker容器。他們可以用這些系統在需求高時擴大規模,在需求低時縮小規模。以經濟有效的方式利用資源又反過來解決了我們的第一個問題。

  使用Docker和微服務架構解決可擴充套件性和解耦程式碼

  讓我們用我們的示例專案來說明這個容器化的基礎設施。此程式碼包含Web前端和註冊後端。您可能會注意到這些被分成兩個單獨的程式碼倉庫。沒關係,在面向服務的體系結構中,這些服務相互瞭解的越少越好。

  在下圖中,我們可以看到生活在AmazonECS群集內的Web和註冊容器。使用者註冊請求將到達Web前端,然後可以向任何註冊服務詢問進行響應。

什麼是Docker?它是如何解決業務難題的?

  讓我們開始克隆示例專案。

  確保安裝了Docker和Gradle,以便我們可以構建專案和影象。

  

什麼是Docker?它是如何解決業務難題的?

  您可以執行以下命令來檢視Docker引擎中的影象。

  

什麼是Docker?它是如何解決業務難題的?

  請注意,我們現在有兩個影象加上它們構建的基本影象。只是為了好玩,讓我們啟動網路應用程式並訪問。獲取DockerWeb映像並將其作為在本地虛擬機器上執行的容器啟動。

  

什麼是Docker?它是如何解決業務難題的?

  我們讓託管機器訪問8080埠上的容器。使用以下命令,我們現在可以看到它正在執行。

  

什麼是Docker?它是如何解決業務難題的?

  使用亞馬遜的彈性容器服務

  要真正瞭解這些Docker影象的優勢,我們需要一個可擴充套件的基礎架構來執行它們。出於本演示的目的,AmazonECS會做得很好。要將影象輸出到Amazon雲,您需要安裝AWS命令列介面。

  亞馬遜提供了一個很棒的嚮導來幫助簡化這個過程。在其中,您將執行以下操作

  建立一個Docker儲存庫來託管您的影象

  將影象上傳到雲端(見下文)

  建立執行映像的EC2例項叢集

  將您的影象分組到服務Service中

  要將Docker影象推送到雲端,您需要先登入。

  

什麼是Docker?它是如何解決業務難題的?

  上面的命令生成一個“dockerlogin”,它將Docker主機指向遠端倉庫。這將授予對每個AWS賬戶附帶的預設AWS登錄檔的訪問許可權。

  

什麼是Docker?它是如何解決業務難題的?

  請注意,上述登錄檔可以包含許多儲存庫。儲存庫包含影象的版本。對於此專案,您將需要兩個儲存庫。一個用於我們的Web影象,一個用於註冊影象。

  為了將影象傳送到遠端倉庫,需要對其進行適當標記。像這樣使用您的AWS倉庫的URL。

  

什麼是Docker?它是如何解決業務難題的?

  現在讓我們將它們推送到AWS。

什麼是Docker?它是如何解決業務難題的?

  使用Docker容器擴充套件ECS

  在上一節中,您使用嚮導建立了一個EC2例項群集。我們建立了兩個程式碼倉庫來儲存我們的影象並將其上傳到那裡。我們來看一下。

  

什麼是Docker?它是如何解決業務難題的?

  您還可以看到我的群集在其已完成狀態下有3臺伺服器,其上執行4個Docker映象(參見上圖)。

  

什麼是Docker?它是如何解決業務難題的?

  上面還列出了我們從群集配置的服務。服務允許您對Docker容器進行分組並指定選項,例如您想要多少個選項,以及如何平衡它們之間的流量。

  

什麼是Docker?它是如何解決業務難題的?

  如果您正確配置了LoadBalancer,則可以在瀏覽器中訪問它。請求將分發到群集中的活動容器數。

什麼是Docker?它是如何解決業務難題的?

  這是我們建立的註冊服務的手動請求。回想一下,該服務在埠8081上執行,以免與埠8080上的註冊服務衝突。LoadBalancer負責將所有這些隱藏起來。我們可以通過埠80從註冊服務獲得結果。

  

什麼是Docker?它是如何解決業務難題的?

  Docker的未來

  這個快速概述僅涉及Docker和微服務架構如何用於為您的團隊和產品進行重大改進。以下是採用此架構時可以看到的一些明顯的好處。

  1.降低成本

  2.加快發展

  3.更快,更一致的部署

  4.鬆散耦合的程式碼和團隊

  5.更易於維護和擴充套件

  6.更可靠的基礎設施

  如果您希望在更大的環境中利用Docker,那麼我們建議您考慮使用SpringNetflix和OpenShift等解決方案。這些解決方案適用於更大的Docker生態系統,可以使部署和開發更加輕鬆。      本文轉載自資料星河平臺:www.bdgstore.com.cn

相關文章