Docker學習(一):容器介紹

1、什麼是容器docker

  一、容器是一種輕量級、可移植、自包含的軟件打包技術,使應用程序能夠在幾乎任何地方以相同的方式運行。開發人員在本身的筆記本上建立並測試好的容器,無需任何修改就可以在生產系統的虛擬機、或物理服務器、或公有云主機上運行。數據庫

  二、容器與虛擬機的異同:ubuntu

    容器與虛擬機都是爲應用提供封裝和隔離。緩存

    容器由兩部分組成:安全

    1)應用程序自己;服務器

    2)依賴部分,如應用程序須要的組件庫或其餘軟件;網絡

    容器在宿主操做系統的用戶空間中運行,與操做系統的其餘進程隔離,這一點顯著區別於虛擬機。架構

    傳統的虛擬化技術,好比VMWare、KVM,目標均是建立完整的虛擬機。爲了運行應用程序,除了部署應用自身及其依賴,還須要安裝整個操做系統。運維

    二者區別以下圖所示:分佈式

    

    由圖中對比可知,因爲全部的容器共享一個宿主操做系統,這使得容器在體積上要比虛擬機小不少。另外,啓動容器不須要啓動整個操做系統,因此容器部署和啓動速度更快,開銷也更小,也更容易遷移。

 2、爲何使用容器

  在談論爲何使用容器以前,先看一下以前爲何用不着容器。以前的系統,幾乎全部的系統均採用三層架構就能夠很好的解決使用需求。而當今的系統,須要使用更多的服務,好比MQ、緩存、數據庫來構建和組裝應用。並且應用程序極可能被部署到不一樣的環境,好比虛擬服務器、私有云、公有云上。

  因此,對於當今系統一方面應用中包含了多種服務,這些服務有本身所依賴的組件庫或軟件包;另外一方面存在多種部署環境,應用在運行時可能須要動態遷移到不一樣的環境中,如何保證各個服務可以在各類環境中正常運行就是一個很難解決的問題。

  藉助於運輸行業集裝箱的啓發,Docker將集裝箱思想運用到軟件打包上,爲代碼提供了一個基於容器的標準化運輸系統。Docker能夠將任何應用及其依賴打包成一個輕量級、可移植、自包含的容器,容器能夠運行在任何操做系統上。

  由此可知,使用容器的緣由就是:容器使軟件具有了超強的可移植能力。從Docker的標誌性圖片中,也很形象的表達Docker的思想,像集裝箱同樣能夠方便的運送貨物。

   

3、容器的特性 

 

  對於開發人員而言,容器意味着環境隔離和可重複性,開發人員只需爲應用建立一次運行環境,而後打包成容器即可以在其餘機器上運行。另外,容器環境與所在的宿主系統環境是隔離的,就像虛擬機同樣,可是比虛擬機更快更簡單。真正實現了Build Once,Run Anywhere(一次運行,處處運行)

  對於運維人員而言,只須要配置好標準的運行環境,服務器就能夠運行任何容器。這使得運維人員的工做效率更高,同時也使工做也變得一致和可重複。因而可知,容器消除了開發、測試、生產環境的不一致性。

4、容器生態系統

  一談到容器,你們都會想到Docker,Docker幾乎是容器的代名詞。確實,是Docker將容器技術發揚光大,同時圍繞Docker還有一個生態系統。

  容器生態系統包括以下幾部分:

  一、容器核心技術,就是可以讓Container(容器)在宿主系統上運行起來的技術,包括:

    1)容器規範

      除了Docker以外,還有其餘容器,如HeroKu、NodeJitsu。爲了保障容器之間能夠兼容,Docker、CoreOS、Google等公司成立了OCI組織(Open Container Initiative),制定開放的容器規範。

      目前有兩種規範:a)Runtime Spec(運行時規範);b)Image Format Spec(鏡像規範);這兩種規範讓不一樣組織和廠商開發的容器可以在不一樣的容器Runtime上運行,保證了容器的可移植性和互操做性。

    2)容器Runtime

      容器Runtime是容器真正能夠運行的地方,Runtime須要和操做系統kernel緊密協做,爲容器提供運行環境。

      目前主流的容器Runtime有:

      a)lxc:運行於Linux上的容器Runtime,能夠運行Docker;

      b)runc:是Docker開發的容器Runtime,是如今Docker默認的Runtime;

      c)rkt:是CoreOS開發的容器Runtime,能夠運行Docker;

    3)容器管理工具

      容器管理工具對內與Runtime交互,對外爲用戶提供Interface,好比CLI,可使用戶有工具來管理容器,相關工具備:

      a)lxd是lxc對應的管理工具;

      b)docker engine是對runc的管理工具,該工具包括Deamon和Cli兩個部分。對於一般說的Docker,通常指docker engine。

      c)rkt cli是rkt的管理工具;

    4)容器定義工具

      容器定義工具的做用是容許用戶定義容器的內容和屬性,這樣容器就可以被保存,共享和重建。相關工具備:

      a)docker image是docker容器的模板,容器runtime依據docker image建立容器;

      b)docker file是包含若干命令的文本文件,用於建立出docker image;

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

    5)Registry

      容器是經過image(鏡像)建立的,須要有一個倉庫來統一存放image,這些倉庫就是Registry。

      a)Docker Registry,能夠利用Docker Registry構建私有的Registry;

      b)Docker Hub:https://hub.docker.com/ 是Docker爲公衆提供的託管Registry,上面有許多現成的Image;

      c)Quay.io:https://quay.io 提供與Docker Hub相似的服務;

    6)容器OS

      容器OS是專門運行容器的操做系統,與常規OS相比,容器OS一般體積更小,啓動更快。由於是爲容器定製的OS,一般它們運行容器的效率會更高。

      a)CoreOS;

      b)atomic;

      c)ubuntu core;

  二、容器平臺技術,可以讓容器做爲集羣在分佈式環境中運行

    1)容器編排引擎,基於容器的應用通常會採用微服務架構,在這種架構下,不一樣應用被劃分紅不一樣的服務容器集羣,集羣中的容器會根據業務須要被動態的建立、遷移和銷燬。

      所謂容器編排,一般包括容器管理、高度、集羣定義和服務發現等。經過容器編排引擎,容器被有機的組合成微服務應用,實現業務需求。編排引擎分爲:

      a)swarm:是Docker開發的容器編排引擎;

      b)k8s:google開發的開源容器編排引擎,支持Docker和CoreOS;

      c)mesos+marathon:mesos是一個通用的集羣資源調度平臺;二者一塊兒提供容器編排引擎功能;

    2)容器管理平臺,是在容器編排引擎之上的一個更爲通用的平臺,一般容器管理平臺支持多種編排引擎,抽象了編排引擎的底層實現細節,爲用戶提供更方便的功能。

      a)Rancher

      b)ContainerShip;

    3)基於容器的Paas,它爲微服務應用開發人員提供了開發、部署和管理應用的平臺,用戶沒必要關心底層基礎設施而專一於應用的開發。

      a)Deis;

      b)Flynn;

      c)Dokku;     

  三、容器支持技術 

    1)容器網絡

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

      a)Docker Network;

      b)Flannel;

      c)Weave;

      d)Calico;

    2)服務發現

      在微服務應用中,集羣會根據負載的強弱對容器進行動態增減,或者根據宿主資源的不一樣進行動態遷移,容器的IP和端口也會發生變化。服務發現就是提供一種讓客戶端可以知道如何訪問容器提供的服務的機制。服務發現會保存容器集羣中全部微服務最新的信息,如IP和端口,以向外提供API。

      a)etcd;

      b)consul;

      c)zookeeper;

    3)監控

      a)docker ps/top/stats;

      b)docker stats API;

      c)sysdig;

      d)cAdvisor/Heapster;

      e)Weave Scope;

    4)數據管理

      容器常常在不一樣的宿主之間遷移,須要保證持久化數據也可以動態遷移。

      a)Flocker;

    5)日誌管理

      日誌爲問題排查和事件管理提供了重要依據。

      a)docker logs:Docker原生的日誌工具;

      b)logspout:對日誌提供了路由功能,它能夠收集不一樣容器的日誌並轉發給其餘工具後進行處理;

    6)安全性

      a)OpenSCAP:它可以對容器鏡像進行掃描,發現潛在的漏洞;

 

  你們可關注個人公衆號  

    

   知識學習來源:CloudMan:《天天5分鐘玩轉Docker容器技術》 

相關文章
相關標籤/搜索