容器生態系統

本文首發於個人公衆號 Linux雲計算網絡(id: cloud_dev),專一於乾貨分享,號內有 10T 書籍和視頻資源,後臺回覆「1024」便可領取,歡迎你們關注,二維碼文末能夠掃。html

提及生態,不由讓人想起賈躍亭的樂視,想當初我屢次被它的生態佈局給震撼到,一度相信它將要超越百度,坐擁互聯網三大江山的寶座,但沒過期日,各類勁爆的新聞就把它推到了風口浪尖上,如今想一想也是讓人唏噓,但無論怎麼說,願它好吧,畢竟這種敢想敢作的精神仍是值得敬佩的。docker

回到技術這個領域,不得不說,技術更新迭代的速度快得讓人目不暇接,就容器技術這個領域來講,從 Docker 面世短短的 2-3 年時間裏,就衍生出多種與之相關的技術框架,由此造成了一個小小的生態系統。編程

一談到容器,你們都會想到 Docker,本文也主要從 Docker 角度來說容器生態系統。ubuntu

容器基礎技術

Docker 的本質是利用 Linux 內核的 namespace 和 cgroups 機制,構建出一個隔離的進程(容器進程)。因此,容器的基礎技術主要涉及到 Linux 內核的 namespace 和 cgroups 技術。安全

容器核心技術

容器核心技術保證容器可以在主機上運行起來,包括容器規範、容器 runtime、容器管理工具、容器定義工具、Registry 和容器 OS。網絡

容器規範旨在將多種容器(如 OpenVZ,rkt,Docker 等)融合在一塊兒,解決各類兼容問題,爲此還專門成立了一個叫 OCI(Open Container Initiative)的組織來專門制定相關的容器規範。框架

容器 runtime 是容器真正運行的地方,通常須要依賴內核,也有運行在專門制定的容器 OS 上,關於容器 OS,下面會作介紹。lxc 、runc 和 rkt 是目前三種主流的 runtime。分佈式

lxc 是 Linux 上老牌的容器 runtime。Docker 最初也是用 lxc 做爲 runtime。runc 是 Docker 本身開發的容器 runtime,符合 oci 規範,也是如今 Docker 的默認 runtime。rkt 是 CoreOS 開發的容器 runtime,符合 oci 規範,於是可以運行 Docker 的容器。微服務

容器管理工具是對外提供給用戶的 CLI 接口,方便用戶管理容器,對內與 runtime 交互。對應於不一樣的 runtime,分別有三種不一樣的管理工具:lxd、docker engine 和 rkt cli。工具

容器定義工具容許用戶定義容器的內容和屬性,如容器須要什麼鏡像,裝載什麼應用等。經常使用有三種工具:docker image、Dockerfile 和 ACL(App Container Image)。

docker image 是容器鏡像,runtime 依據 docker image 建立容器。dockerfile 是包含若干命令的文本文件,能夠經過這些命令建立出 docker image。ACI 與 docker image 相似,只不過它是由 CoreOS 開發的 rkt 容器的 image 格式。

Registry 是存放容器鏡像的倉庫,包括 Docker Registry、Docker Hub 和 Quay.io,以及國內的 DaoCloud.io。企業能夠用 Docker Registry 構建私有的 Registry。

容器 OS 不一樣於 runtime,是專門制定出來運行容器的操做系統,與常規 OS 相比,容器 OS 一般體積更小,啓動更快。由於是爲容器定製的 OS,一般它們運行容器的效率會更高。目前已經存在很多容器 OS,CoreOS、atomic 和 ubuntu core 是其中的傑出表明。

容器平臺技術

隨着容器部署的增多,容器也逐步過渡到容器雲,容器平臺技術就是讓容器做爲集羣在分佈式的環境中運行,包括了容器編排引擎、容器管理平臺和基於容器的 PaaS。

容器編排引擎就是管理、調度容器在集羣中運行,以保障資源的合理利用。有名的三大編排引擎爲 docker swarm、kubernetes 和 mesos。其中,kubernetes 這兩年脫穎而出,成爲其中的佼佼者。

容器管理平臺是在編排引擎之上更爲通用的一個平臺,它抽象了編排引擎的底層實現細節,可以支持多種編排引擎,提供友好的接口給用戶,極大方便了管理。Rancher 和 ContainerShip 是容器管理平臺的典型表明。

基於容器的 PaaS 基於容器的 PaaS 爲微服務應用開發人員和公司提供了開發、部署和管理應用的平臺,使用戶沒必要關心底層基礎設施而專一於應用的開發。Deis、Flynn 和 Dokku 都是開源容器 PaaS 的表明。

容器支持技術

容器的出現又從新讓一些古老的技術煥發第二春,如監控、網絡、數據管理、日誌等技術,因爲容器技術的不一樣,須要制定相應的符合容器規範的技術框架,由此有了容器支持技術,用於支持容器提供更豐富能力的基礎設施。

其中包括容器網絡、服務發現、監控、數據管理、日誌管理和安全性。

容器網絡主要用於解決容器與容器之間,容器與其餘實體之間的連通性和隔離性。包括 Docker 原生的網絡解決方案 docker network,以及第三方的網絡解決方案,如 flannel、weave 和 calico。

服務發現保證容器使用過程當中資源動態變化的感知性,如當負載增長時,集羣會自動建立新的容器;負載減少,多餘的容器會被銷燬。容器也會根據 host 的資源使用狀況在不一樣 host 中遷移,容器的 IP 和端口也會隨之發生變化。在這種動態環境下,就須要有一種機制來感知這種變化,服務發現就是作這樣的工做。etcd、consul 和 zookeeper 是服務發現的典型解決方案。

監控室保證容器健康運行,且讓用戶實時瞭解應用運行狀態的工具,除了 Docker 原生的監控工具 docker ps/top/stats 以外,也有第三方的監控方案,如 sysdig、cAdvisor/Heapster 和 Weave Scope 。

數據管理保證容器在不一樣的 host 之間遷移時數據的動態遷移。有名的方案是 Flocker。

日誌管理爲問題排查和事件管理提供了重要依據。docker logs 是 Docker 原生的日誌工具。而 logspout 對日誌提供了路由功能,它能夠收集不一樣容器的日誌並轉發給其餘工具進行後處理。

容器安全性保證容器的安全,不被攻擊,OpenSCAP 可以對容器鏡像進行掃描,發現潛在的漏洞。

PS:本文借鑑了知名雲計算博主 CloudMan 的博文

http://www.cnblogs.com/CloudMan6/p/6706546.html,感謝 CloudMan 呈現這麼好的內容。


個人公衆號 「Linux雲計算網絡」(id: cloud_dev) ,號內有 10T 書籍和視頻資源,後臺回覆 「1024」 便可領取,分享的內容包括但不限於 Linux、網絡、雲計算虛擬化、容器Docker、OpenStack、Kubernetes、工具、SDN、OVS、DPDK、Go、Python、C/C++編程技術等內容,歡迎你們關注。

相關文章
相關標籤/搜索