Docker Machine, Swarm,和Compose編排分散式應用

banq發表於2014-12-05
Docker宣佈新的功能元件Docker Machine, Swarm和 Compose用於編排分散式應用:

基於下面的需求:
1. 雖然單個Docker容器能夠100%移植到任何平臺,但是如何確保多容器分散式應用也是100%可移植?涵括範圍從準備階段到生產階段 或跨資料中心,或在公有云之間。

2.我們已經實現Docker標準化,但是如何在這些標準之上能夠擴充 Docker生態系統的廣度和深度?

3.如何重構應用程式交付流水線以便支援基於容器的快速迭代?

4.將傳統整體型monolithic應用分解為微服務以後,有更多的元件需要跟蹤和管理,Docker生態系統如何幫助我們做到?

Docker Machine, Docker Swarm, 和Docker Compose. 這三個元件分別覆蓋分散式應用整個週期的不同階段。並且是可以串聯起來。

[img index=1]

Docker Machine
Docker Machine能讓你使用一個命令在幾秒內直達Docker,(zero-to-Docker).

在Docker Machine之前, 一個開發者會需要登入主機,按照安裝配置指令來對其主機和作業系統進行安裝和配置。而如果使用Docker Machine, 無論是想讓一個Docker守護程式後臺執行在筆記本上或資料中心虛擬機器中或一個公有云例項裡,所有都是使用同樣一個命令:

% machine create -d [infrastructure provider] [provider options] [machine name]

這個命令是在目標主機建立執行Dcoker容器,使用相同的介面,您可以管理多個Dcoker主機,無論它們的位置在哪裡,你都可以在它們上面執行任何Docker命令。

Docker Machine的後端可插拔性允許使用者充分利用Docker生態系統合作伙伴提供的Docker-ready基礎設施,同時還可透過相同的介面訪問這些基礎設施。 這個驅動程式API可以讓Docker工作在本地機器上或在資料中心的虛擬機器或在一個公共雲的例項上。 在這個Alpha版本中,Docker Machine附帶驅動程式配置範圍從本地Docker到Virtualbox以及遠端數字海洋的例項;更多驅動庫還包括AWS,Azure,VMware和其他基礎設施。

請注意,Docker Machine與Docker引擎是分離的一個單獨的專案。嘗試 Docker Machine和驅動庫巴見:倉儲

Docker Swarm
Docker Swarm是一個Dockerized化的分散式應用程式的本地叢集。 它是繼續DockerMachine後續步驟,實現最佳化主機資源利用率和提供故障轉移服務。 具體地說,Docker Swarm允許使用者建立主機的資源池來執行Docker守護程式,然後排程Docker容器在資源池上的執行,自動管理工作負載位置和維護叢集狀態。

Docker預設排程器是根據所在叢集主機的可用的資源作為排程資源需求,然後使用 bin pack 自動最佳化所在位置的工作負載。 例如,我們如何安排一個Redis容器所需求的1 g記憶體?

% docker run -d -P -m 1g redis

為了支援特定的需求和基於策略的排程,Docker Swarm還提供了標準和自定義約束。 例如,說,為了確保你想要在SSD儲存主機上執行MySQL容器的良好I / O效能, 你可以在排程MySQL工作量時表達約束如下:
% docker run -d -P -e constraint:storage=ssd mysql

除了資源最佳化,Docker Swarm提供高可用性和故障轉移。 Docker Swarm不斷檢查Dockerde守護程式所在主機的健康,一旦發現其停機就會自動調整,透過轉移後重新在一個新主機上啟動失敗的Docker容器。

Docker Swarm的獨特的方面之一是它可以擴充套件應用程式的生命週期,這意味著開發人員可以從一個主機到“叢集”,實現維護的一致介面應用,也可從1個主機擴充套件到2個甚至20或200主機。

最後,Docker Swarm有一個可插拔的架構,包括一個預設排程器。 為此,可以與中間層建立夥伴關係,Mesosphere 的Mesos可以成為Docker Swarm的“一等公民”實現著陸其平臺上的Docker容器的負載。不管底層的排程器如何實現,介面對應用程式都保持一致,這意味著應用程式移植仍然是100%。

Docker Swarm倉儲

Docker Compose
Docker Compose是整個編排系統的最後一塊拼圖。 使用Docker Machine保證Docker守護程式能在任何位置的主機上執行,使用Docker Swarm對它們實現叢集,現在可以使用Docker Compose在這些叢集上組裝執行多個容器的分散式應用。

第一步是使用Docker Compuse是透過一個簡單的YAML檔案來宣告定義多個容器應用的情況狀態:


containers:
  web:
     build: .
     command: python app.py
     ports:
     - "5000:5000"
     volumes:
     - .:/code
     links:
     - redis
     environment:
     - PYTHONUNBUFFERED=1
  redis:
     image: redis:latest
     command: redis-server --appendonly yes
<p class="indent">

這個例子顯示了Docker Compose利用現有的容器的優點。 具體地說,在這個簡單two-container應用宣告配置檔案中,配置了第一個容器是一個Python應用程式,每次從Dockerfile的當前目錄構建。 配置的第二個Docker容器是從Docker Hub註冊中心的redis官方倉儲中構建。 links指令定義了Python應用程式容器取決於Redis容器的依賴關係。

啟動應用很簡單…
% docker up

透過這種簡單的命令,Python容器將被Dockerfile自動構建,同時從註冊中心拉取Redis容器構建。 links 指令表達的是Python和Redis容器之間的依賴關係,Redis容器是最先開始*first *構建,緊隨其後的是Python容器。

目前這一專案還在開發中,Github

參考:使用Mesos和Marathon管理Docker叢集

[該貼被banq於2014-12-06 08:42修改過]

相關文章