Docker容器化組件架構
Containerization(容器化集裝箱化)是以可移動可預測方法發布和部署應用程序的過程,它通過包裝組件和它們的依賴,打包成一個標準的、隔離的、輕量的環境,稱為容器Container,許多公司已經對設計應用和服務如何部署在分布式系統中非常感興趣,這樣能夠讓系統易于擴展伸縮,能夠對付硬件與應用出現的故障問題。
Docker是一個容器化平臺,用于簡化和標準化各種環境的部署,大量的圍繞Docker的軟件生態環境已經建立。
Docker和容器化
Docker是最流行的容器化軟件,Docker能夠與許多開源項目集成管理和創建容器。
在這張圖中,你能夠看到容器是如何與主機系統聯系的,容器隔離了應用,操作系統資源已經被Docker抽象了隔離了,在上圖右邊,你能夠看到容器能以層的概念建立,多個容器可以共享一個底層,降低資源的使用。
Docker的主要優點有:
- 輕量資源使用:相對于虛擬化整個操作系統,容器只是在進程級別進行隔離,使用的還是主機內核kernel。
- 可移動:應用的所有依賴都打包到容器內部,這樣可以運行在任何支持Docker的主機系統上。
- 可預測:主機并不關心容器內部運行什么,容器也不關系主機運行在什么平臺上,是單機還是云平臺都不關心,這些接口都是標準的,因此它們之間的交互行為都是可以預期的。
一般情況下,當使用Docker設計一個應用或服務,它可以很好地將功能分離到容器中,一種設計策略稱為面向服務架構,這會讓你能夠在將來方便獨立地擴展和更新組件,正因為這些靈活性才使得人們對Docker在開發和部署上興趣日益濃厚。
服務發現
服務發現是為了讓容器擴展和靈活部署的一個整體策略,容器使用服務發現能夠知道它所處的環境,這一切無需管理員介入,它們能夠發現組件需要交互的連接信息,它們能夠注冊它們自己以便其他組件或工具知道它們已經變成隨時可用,這些工具通常使用一個全局分布式配置存儲實現任意配置。
在上圖中,你能看見應用將自己的連接信息注冊到服務發現系統,一旦注冊完畢,其他應用能查詢服務發現以便明白如何連接到這個應用。
這些工具通常使用簡單的key-value存儲實現,分布在一個集群環境中,通常,key-value存儲提供一個HTTPAPI來進行訪問和數值設置,也有一些附加安全比如加密授權訪問機制,分布式存儲對于管理集群化的Docker主機是必要的,服務發現存儲有以下功能:
- 允許應用獲得它們依賴的服務的連接方面數據。
- 能夠讓服務為上面目標注冊連接信息。
- 提供全局訪問,可存儲任意配置數據。
- 存儲集群管理需要的有關集群成員信息。
一些流行的服務發現工具有:
- etcd:服務發現/ 全局分布式key-value存儲
- Consul:服務發現/ 全局分布式key-value存儲
- ZooKeeper:服務發現/ 全局分布式key-value存儲
- crypt:用于加密etcd項目
- Confd:監視key-value存儲實現服務改變和觸發重配置。
網絡工具
容器化應用將自己定位在面向服務的設計,這樣鼓勵分離功能到離散組件,而這使得管理和擴展更加方便,它更需要確保組件之間的網絡可靠性,Docker自己提供一個基礎網絡結構以便容器與容器,容器和主機之間的通訊。
Docker的原生網絡能力提供將容器連接在一起的兩種機制,第一個是將容器的端口暴露,映射到主機系統作為外部路由,你能選擇主機端口讓Docker映射,也可以讓Docker隨意選取,這種方式對于大部分情況都通用。
另外一種方式是允許容器使用Docker的"links"通訊,一個linked容器將會得到對方的連接信息,允許對方自動連接自己,前提是必須配置,這允許在同樣主機上兩個容器連接,這樣無需事先知道服務所在的端口和IP地址。
Docker的網絡基本層適合單機或相關的管理環境,Docker的生態系統已經有很多項目來聚焦網絡功能,這些工具功能包括:
- 跨多個主機簡化和統一地址空間
- 虛擬專用網絡提供各個組件之間的安全通訊
- 為每個主機每個應用建立子網通訊
- 創建通訊的macvlan接口
- 配置容器的自定義的 MAC 地址, 網關
下面一些項目專門用于提高Docker網絡功能:
- Flannel:為每個主機提供一個單獨子網。
- Weave:將所有容器組織在一個網絡中.
- Pipework:高級網絡配置的網絡工具集
調度、集群管理和流程編排
當建立一個集群容器環境時,另外一個組件是調度,調度器負責啟動容器。
上圖演示了簡化的調度器設計,請求通過一個API或管理工具發出,調度器計算請求的條件和當前可用的主機,比如從一個分布式存儲和服務發現中獲取容器信息,這樣可以見應用部署在最不繁忙的主機上。
主機的選擇是調度器的核心功能,通常它有一個自動化管理功能,這些功能包括:
- 根據要求調度同一主機上另外一個容器。
- 確保容器不會再放在同一主機上。
- 根據匹配標簽或元數據放置一個主機上容器。
- 在最不繁忙的主機上放置容器。
- 啟動在集群環境中每個主機的容器。
- 調度器負責裝載容器到相關主機,然后啟動 停止和管理。
由于調度器必須與該組中每個主機交互,集群管理功能就必須了,這允許調度器獲得成員信息,執行管理任務,流程編排combination一般是包含調度和管理主機功能的組合。
如下一些工具作為調度器:
- Fleet:調度器和集群管理工具
- Marathon:調度器和服務管理工具
- Swarm:調度器和服務管理工具
- Mesos:服務抽象和主機資源統一調度
- Kubernetes:高級調度器用于管理容器組
- Compose:創建容器組的容器流程編排工具
本文轉自: http://weibo.com/p/23041893c106800102whjw
來自:http://dockone.io/article/1668