Docker學習(一):容器介紹


一、什么是容器

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

  2、容器與虛擬機的異同:

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

    容器由兩部分組成:

    1)應用程序本身;

    2)依賴部分,如應用程序需要的組件庫或其他軟件;

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

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

    兩者區別如下圖所示:

    

    由圖中對比可知,由於所有的容器共享一個宿主操作系統,這使得容器在體積上要比虛擬機小很多。另外,啟動容器不需要啟動整個操作系統,所以容器部署和啟動速度更快,開銷也更小,也更容易遷移。

 二、為什么使用容器

  在談論為什么使用容器之前,先看一下之前為什么用不着容器。之前的系統,幾乎所有的系統均采用三層架構就可以很好的解決使用需求。而當今的系統,需要使用更多的服務,比如MQ、緩存、數據庫來構建和組裝應用。而且應用程序很可能被部署到不同的環境,比如虛擬服務器、私有雲、公有雲上。

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

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

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

   

三、容器的特性 

 

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

  對於運維人員而言,只需要配置好標准的運行環境,服務器就可以運行任何容器。這使得運維人員的工作效率更高,同時也使工作也變得一致和可重復。由此可見,容器消除了開發、測試、生產環境的不一致性。

四、容器生態系統

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

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

  1、容器核心技術,就是能夠讓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;

  2、容器平台技術,能夠讓容器作為集群在分布式環境中運行

    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;     

  3、容器支持技術 

    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容器技術》  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM