1. 程式人生 > >走近docker--容器生態系統

走近docker--容器生態系統

consul 組織 sos weave scope 容器集群 能夠 調度 查詢

本文主要摘自CloudMan的《每天5分鐘玩轉容器技術》

Docker是PaaS提供商dotCloud開源的一個基於LXC的高級容器引擎。

根據CloudMan的劃分,容器生態系統(container ecosystem)涉及的技術分為:核心技術、平臺技術、支持技術。

容器核心技術使得容器能夠在單個host上運行。二容器平臺技術能夠讓容器作為集群在分布式環境中運行。

一、核心技術

指能夠讓container在host(物理機)上運行起來的一類技術,如下圖:

技術分享圖片

1. 容器規範

Docker、CoreOS、Google等公司共同成立了一個叫OCI(Open Container Initiative)的組織,制定開放的容器規範。

目前已發布兩個規範:runtime spec和image format spec。

2. 容器runtime

如其名,runtime是容器真正運行的地方。它和container的關系好比JVM和java的關系。目前主流的三種容器runtime為:lxc、runc、rkt。

lxc: linux上的老牌容器runtime。docker最初也用lxc作為runtime。

runc: docker自己開發的容器runtime,符合oci規範,是現在docker默認的runtime。

rtk: CoreOS開發的容器runtime,符合oci規範,因而能夠運行Docker的容器。

3. 容器管理工具

容器管理工具對內與runtime交互,對外為用戶提供interface。

lxc的管理工具是lxd。

runc的管理工具是docker engine。docker engine包含後臺deamon和cli兩個部分。我們常說的Docker一般是指docker engine。

rkt的管理工具是rkt cli。

4. 容器定義工具

用戶通過容器定義工具定義容器的內容和屬性,使得能夠保存、共享、重建容器。

docker image是docker容器的模板,runtime依據docker image創建容器。

dockerfile是包含若幹命令的文本文件,可以通過這些命令創建docker image。

ACI(App Container Image)與docker image類似,它是由CoreOS開發的rkt容器的image格式。

5. Registry

Registry是一個統一存放image的倉庫。

企業可以用 Docker Registry 構建私有的 Registry。

Docker Hub(https://hub.docker.com )是 Docker 為公眾提供的托管 Registry,上面有很多現成的 image,為 Docker 用戶提供了極大的便利。

Quay.io(https://quay.io/ )是另一個公共托管 Registry,提供與 Docker Hub 類似的服務。

6. 容器OS

容器OS是專門運行容器的操作系統(雖然由於有容器runtime的存在,幾乎所有系統都可以運行容器)。與常規OS相比,容器OS通常體積更小,啟動更快。

傑出代表有:CoreOS、atomic、ubuntu core。

二、容器平臺技術

容器平臺技術能夠讓容器作為集群在分布式環境中運行,包括:容器編排引擎、容器管理平臺、基於容器的PaaS。

1. 容器編排引擎

基於容器的應用一般會采用微服務架構,應用被劃分為不同組件,並以服務的形式運行在各自的容器中,通過API對外提供服務。(每個組件都可能會運行多個相同的容器)

所謂編排(orchestration),通常包括容器管理、調度、集群定義和服務發現等。通過編排引擎,容器被郵寄的組合成微服務應用,實現業務需求。

主流容器編排引擎:

1)docker swarm 是Docker開發的容器編排引擎。

2)kubernetes是Google領導開發的開源容器編排引擎,同時支持Docker和CoreOS。

3)mesos是一個通用的集群資源調度平臺,mesos與marathon一起提供容器編排引擎功能。

2. 容器管理平臺

容器管理平臺是架構在容器編排引擎之上的更為通用的平臺。通常容器管理平臺能夠支持多種編排引擎,抽象了編排引擎的底層實現細節。

為用戶提供更方便的功能,如:application catalog和一鍵應用部署等。

容器管理平臺的典型代表:Rancher和ContainerShip。

3. 基於容器的PaaS

基於容器的PaaS為微服務應用開發人員和公司提供了開發、部署和管理應用的平臺,使用戶不必關心底層基礎設施而專註於應用的開發。

代表:Deis、Flynn、Dokku。

三、容器支持技術

技術分享圖片

1. 容器網絡

容器的出現使網絡拓撲變得更加動態和復雜,用戶需要專門的解決方案來管理容器與容器,容器與其它實體間的連通性和隔離性。

docker network是Docker原生的網絡解決方案。其它第三方開源解決方案:flannel、weave、calico。

2. 服務發現

服務發現會保存容器集群中所有微服務最新的信息(如:IP和端口),並對外提供API,提供服務查詢功能。

典型解決方案:etcd、consul、zookeeper。

3. 監控

docker ps/top/stats是Docker原生的命令行監控工具。Docker也提供stats API,用戶可以通過HTTP請求獲取容器的狀態信息。

其它開源方案:sysdig、cAdvisor/Heapster、Weave Scope。

4. 數據管理

容器經常會在不同的host之前遷移,需要保證持久化數據也能夠動態遷移。

典型代表:Flocker。

5. 日誌管理

docker logs是Docker原生的日誌工具。

logspout對日誌提供了路由功能,可以收集不同容器的日誌並轉發給其它工具進行後處理。

6. 安全性

OpenSCAP能夠對容器鏡像進行掃描,發現潛在漏洞。

走近docker--容器生態系統