本文首發於我的公眾號 Linux雲計算網絡(id: cloud_dev),專注於干貨分享,號內有 10T 書籍和視頻資源,后台回復「1024」即可領取,歡迎大家關注,二維碼文末可以掃。
說起生態,不禁讓人想起賈躍亭的樂視,想當初我多次被它的生態布局給震撼到,一度相信它將要超越百度,坐擁互聯網三大江山的寶座,但沒過時日,各種勁爆的新聞就把它推到了風口浪尖上,現在想想也是讓人唏噓,但不管怎么說,願它好吧,畢竟這種敢想敢做的精神還是值得敬佩的。
回到技術這個領域,不得不說,技術更新迭代的速度快得讓人應接不暇,就容器技術這個領域來說,從 Docker 面世短短的 2-3 年時間里,就衍生出多種與之相關的技術框架,由此形成了一個小小的生態系統。
一談到容器,大家都會想到 Docker,本文也主要從 Docker 角度來講容器生態系統。
容器基礎技術
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++編程技術等內容,歡迎大家關注。