docker的概念。

一,容器的核心技術:
(1)容器規範:
         目前OCI發佈了兩個規範:runtime spec 和 image format spec
         有了這兩個規範,不同組織和廠商開發的容器能夠在不同的runtime上運行,這樣就保證了容器的可移植性和互操作性。
(2)容器runtime 
         runtime是容器真正運行的地方,runtime需要跟操作系統kernel緊密協作,爲容器提供運行環境。容器只有在runtime中才能運行。
         lxc/runc和rkt是目前主流的三種容器runtime。
     lxc是linux上的老牌容器runtime,docker最初也是用lxc作爲runtime的。
      runc是Docker自己開發的容器runtime,符合oci規範,也是現在Docker的默認runtime。
         rkt是CoreOS開發的容器runtime,符合OCI規範,因而能夠運行Docker容器。
(3)容器管理工具
         光有runtime還不夠,用戶得有工具來管理容器,容器管理工具對內與runtime交互,對外爲用戶提供接口,比如CLI,這就好比除了JVM,還得提供java命令讓用戶能
夠啓停應用。
         lxd是lxc對應的管理工具
         runc的管理工具是docker engine,它包含後臺deamon和cli兩個部分。我們通常提到Docker,一般就是指的docker engine。
         rkt的管理工具是rkt cli
(4)容器定義工具
     容器定義工具允許用戶定義容器的內容和屬性,這樣容器就能夠被保存/共享和重建,
     docker image是Docker容器的模板,runtime 依據docker image 創建容器。
         dockerfile是包含若干命令的文本文件,可以通過這些命令創建出 docker image.
       ACI與docker image類似,只不過它是由CoreOS開發的rkt容器的image格式。
(5)Registry
     容器是通過image創建的,需要有一個倉庫在統一存放image,這個倉庫就叫做Registry。
         企業可以用Docker Registry構建私有的Registry。
     Docker Hub是Docker爲公衆提供的託管Registry,上面有很多現成的image,爲Docker用戶提供了極大的便利。
     Quay.io是一個公共託管Registry,提供與 、docker Hub類似的服務。
(6)容器OS
         由於有容器的runtime,幾乎所有的Linux,MAC OS和indows都可以運行容器,但這並沒有妨礙容器OS的問世。
      容器OS是專門運行容器的操作系統。與常規OS相比,容器OS通常體積更小,啓動更快,因爲是爲容器定製的OS,通常他們運行容器的效率會更高。
     目前已經存在不少容器OS,CoreOS、Atomic和Ubuntu Core 是其中傑出的代表,


二,容器平臺技術
     容器核心技術使得容器能夠在單個host上運行,而容器平臺技術能夠讓容器作爲集羣在分佈式環境中運行。
     容器平臺技術包括容器編排引擎,容器管理平臺和基於容器的PaaS,
(1)容器編排引擎
     基於容器的應用一般會採用微服務架構,在這種架構下,應用被劃分爲不同的組件,並以服務的形式運行在各自的容器中,通過API對外提供服務,爲了保證應用的高
可用,每個組件都可能會運行多個相同的容器,這些容器會組成集羣,及羣衆的容器會根據業務需要被動態的創建,遷移和銷燬。
         大家可以看到,這樣一個基於微服務架構的應用系統實際上是一個動態的可伸縮的系統,這對我們部署環境提出了新的要求,我們需要有一種高校的方法來管理容器
集羣,而這,就是容器編排引擎要乾的工作。
     所謂編排,通常包括容器管理,調度,集羣定義和服務發現等。通過容器編排引擎,容器被有機地組合成微服務應用,實現業務需求。
     docker swarm是Docker開發的容器編排引擎,
     kubernetes是Google領導開發的開源容器編排引擎,同時支持Docker和CoreOS容器。
     mesos是一個通用的集羣資源調度平臺,mesos與marathon一起提供容器編排引擎功能,
     以上三者是當前主流的容器編排引擎。
(2)容器管理平臺
     容器管理平臺是架構在容器編排引擎之上的一個更爲通用的平臺,通常容器管理平臺能夠支持多種編排引擎,抽象了編排引擎的底層實現細節,爲用戶提供更方便的
功能,比如application catalog 和一鍵應用部署等。
     Rancher和ContainerShip是容器管理平臺的典型代表。
(3)基於容器的PaaS
     基於容器的PaaS爲微服務應用開發人員和公司提供了開發,部署和管理應用的平臺,使用戶不必關心底層基礎設施而專注於應用的開發。
     Deis、Flunn和Dokku都是開源容器PaaS的代表,

三,容器支持技術
     下面這些技術被用於支持基於容器的基礎設施。
(1)容器網絡
     容器的出現使網絡拓撲變的更加動態和複雜,用戶需要專門的解決方案來管理容器與容器,容器與其他實體之間的連通性和隔離性。
     docker network 是 Docker原生的網絡解決方案,除此之外,我們還可以採用第三方開源解決方案,例如,flannel、weave和calico,不同方案的設計和實現方式不
同,各有優勢和特點,應根據實際需求來選型。
(2)服務發現
     動態變化是微服務應用的一大特點,當負載增加時,集羣會自動創建新的容器,負載減少,多餘的容器會被銷燬,容器也會根據host的資源使用情況在不同host中遷
移,容器的IP和端口也會隨之發生變化。
     在這種動態的環境下,必須要有一種機制讓client能夠知道如何訪問容器提供的服務,這就是服務發現來完成的工作,
     容器發現會保存容器集羣中所有微服務最新的信息,比如IP和端口,並對外提供API,提供服務查詢功能,
     etcd、consul和zookeeper是服務發現的經典解決方案。
(3)監控
     監控對於基礎架構非常重要,而容器的動態特徵對監控提出更多挑戰,針對容器環境,已經涌現出很多監控工具和方案,
     docker ps/top/stats是Docker原生的命令行監控工具,除了命令行,Docker也提供了stats API,用戶可以通過HTTP請求獲取容器的狀態信息。
     sysdig,cAdvisor/Heapster和Weave Scope是其他開源的容器監控方案。
(4)數據管理
     容器經常會在不同的host之間遷移,如何保證持久化數據也能夠動態遷移,是Rex-Ray這類數據管理工具提供的能力。
(5)日誌管理
     日誌爲問題排查和事件管理提供了重要依據,日誌工具有兩類
     docker logs 是Docker原生的日誌工具,而logspout對日誌提供了路由功能,他可以收集不同容器的日誌並轉發給其他工具進行後處理。
(6)安全性
     對於年輕的容器,安全性一直是業界爭論的焦點,OpenSCAP是一種容器安全工具,能夠對容器鏡像進行掃描,並發現潛在的漏洞。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章