Docker應用場景

jopen 8年前發布 | 23K 次閱讀 Docker Java開發

標簽: docker 應用 | 發表時間:2016-01-17 00:08 | 作者:noreply@blogger.com (AaronZhang)

出處:http://denghuo-lanshan.blogspot.com/

See; http://www.cnblogs.com/zz123/p/4080219.html
  • Flynn: 一個使用go語言編寫的開源PaaS平臺,目標是簡化分布式環境中應用的部署和維護,可以通過git push命令,將應用部署到Docker,從而省去復雜的配置和操作。
  • CoreOS: 一種新的架構體系重新設計的Linux發型版,可以運行在既有的硬件活著云服務器上。CoreOS不提供類似yum或apt的包管理工具,用戶不需要在CoreOS中安裝軟件,而是讓程序都在Docker容器中運行。
  • Fig: 是一個基于Docker的用于快速搭建開發環境的工具,目前Fig團隊已經加入Docker公司。
  • Kubernets: 來自Google的容器集群管理工具,支持跨平臺。目前已經得到微軟,IBM,紅帽,CoreOS等公司的支持。
  • Boot2Docker: 專為Docker設計的輕量級Linux發型包,解決Windows或OS X用戶不能安裝Docker的問題。

什么是Docker。Docker是一個開源的引擎,可以輕松的為任何應用創建一個輕量級的、可移植的、相互隔離的容器。開發者在筆記本上編譯測試通過的容器可以批量地在生產環境中部署,包括VMs(虛擬機)、OpenStack 集群和其他的基礎應用平臺。 

Docker應用場景:

  • web應用的自動化打包和發布。
  • 自動化測試和持續集成,發布。
  • 在服務型環境中部署和調整數據庫或其他的后臺應用。
  • 從頭編譯或者擴展現有的OpenShift或Cloud Foundry平臺來搭建自己的PaaS環境等。

本文主要介紹docker在大數據方面的應用,經過一段時間的研究和實際操作,提出了Hadoop on Docker架構。大概思路就是將硬件(或云服務器)通過Docker搭建成為一個“超級服務器”,這里的超級是指,擁有足夠的CPU,內存,并且提供7*24小時不宕機服務(除非同一時間所有物理主機全宕機)。每個Docker容器作為超級服務器資源的一個實例,可以根據需求動態增加實例,以滿足計算性能要求。下圖是整個Hadoop on Docker的架構

從上自下,依次為:

  • Zookeeper: 協調集群中物理主機之間的同步,包括維護一張每個服務器上運行著的容器名單,所有服務器上Docker容器的ip域名映射表(動態更新),Docker容器配置。
  • Server: 上面運行著很多docker容器,每個容器運行著特定功能的服務。把應用打包到容器中運行的好處是,應用間是相互隔離的,一個容器宕掉不會影響主機上及其他容器,并且在創建容器的時候可以定制不同的資源(CPU,內存等)。
  • FS: 外部文件系統有兩個作用:

1. 將datanode容器掛載到外部文件存儲系統中,可以通過增加外部文件系統的磁盤大小來提高hdfs存儲能力。

2. 將所有配置文件存放在公共文件系統中,可以方便整個系統的配置管理,減少重復操作。

  • Yarn: 資源管理系統,最終的目標是可以將不同的集群容器(storm,spark等)放在同一個yarn系統中,通過yarn的調度來為不同集群分配不同資源。

有人會有疑問:如今服務器已經很廉價,完全可以在不同服務器上運行不同服務,沒必要使用docker。

如果硬件服務器對你來說確實是廉價的,以至于搭建100個節點的hadoop集群,大多數情況下運行mapreduce job的節點書不超過10個,剩余90臺服務器常年處于休息狀態,對你來說也無關緊要的話,我無話可說。拋開硬件成本不說,docker容器的隔離機制也是集群部署中的一大亮點!

本文的目的是通過docker容器,使用更少的硬件資源來運行同樣的job,容器相對于服務器來說是更細粒度的資源。同時由于容器的隔離機制,一個容器發生故障并不影響到其他容器及宿主主機。此外這種架構還解決了單點故障問題,每臺服務器運行著相同的docker鏡像,通過定時向zookeeper發送心跳,來監控所有容器的健康狀態,心跳是一份包含該服務器上所有運行著的容器的名單。那么有可能發生兩種突發情況:

  • docker容器掛掉
  • 宿主主機宕機

對于第一種情況,由于心跳包含所有運行著容器的名單,當服務器某個容器掛掉,比如mysql意外終止,zookeeper通過兩次心跳對比,發現缺少mysql,于是啟動應急措施,重啟該服務器的mysql容器。如果宿主主機宕機,zookeeper在一段時間內未接受該服務器的心跳,發現宕機,然后在其余剩下的服務器中重啟上一次心跳名單中運行著的容器,如圖所示

整個系統的實現還有一個前提,就是使不同宿主主機上的docker容器能夠通信,可以參見 這篇

最終的目的是使整個架構看起來像在一臺超級服務器(cpu,內存足夠大,并且永不宕機)上運行hadoop。

</div> </div>

來自: http://itindex.net/detail/55079-docker-應用

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!