1. 程式人生 > >什麽是Docker?它是如何解決業務難題的?

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

技術 服務 擴展性 資源 星期 面向 查看 mark 界面

Docker是一個開發人員容納和輕松發布軟件的平臺。它有助於消除配置環境以運行軟件的開銷,實質上是將環境與代碼一起運送。

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

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

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

  Docker和微服務架構的用例

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

  技術分享圖片

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

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

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

  使用Docker和微服務架構解決可擴展性和解耦代碼

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

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

  技術分享圖片

  讓我們開始克隆示例項目。

  確保安裝了Docker和Gradle,以便我們可以構建項目和圖像。

  技術分享圖片

  您可以運行以下命令來查看Docker引擎中的圖像。

  技術分享圖片

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

  技術分享圖片

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

  技術分享圖片

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

  要真正了解這些Docker圖像的優勢,我們需要一個可擴展的基礎架構來運行它們。出於本演示的目的,AmazonECS會做得很好。要將圖像輸出到Amazon雲,您需要安裝AWS命令行界面。

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

  創建一個Docker存儲庫來托管您的圖像

  將圖像上傳到雲端(見下文)

  創建運行映像的EC2實例集群

  將您的圖像分組到服務Service中

  要將Docker圖像推送到雲端,您需要先登錄。

  技術分享圖片

  上面的命令生成一個“dockerlogin”,它將Docker主機指向遠程倉庫。這將授予對每個AWS賬戶附帶的默認AWS註冊表的訪問權限。

  技術分享圖片

  請註意,上述註冊表可以包含許多存儲庫。存儲庫包含圖像的版本。對於此項目,您將需要兩個存儲庫。一個用於我們的Web圖像,一個用於註冊圖像。

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

  技術分享圖片

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

  技術分享圖片

  使用Docker容器擴展ECS

  在上一節中,您使用向導創建了一個EC2實例群集。我們創建了兩個代碼倉庫來保存我們的圖像並將其上傳到那裏。我們來看一下。

  技術分享圖片

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

  技術分享圖片

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

  技術分享圖片

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

  技術分享圖片

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

  技術分享圖片

  Docker的未來

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

  1.降低成本

  2.加快發展

  3.更快,更一致的部署

  4.松散耦合的代碼和團隊

  5.更易於維護和擴展

  6.更可靠的基礎設施

  如果您希望在更大的環境中利用Docker,那麽我們建議您考慮使用SpringNetflix和OpenShift等解決方案。這些解決方案適用於更大的Docker生態系統,可以使部署和開發更加輕松。

        本文轉載自數據星河平臺:https://www.bdgstore.com.cn/portal/article/index/id/179.html

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