校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > 全面講解Docker容器技術的基本概念

全面講解Docker容器技術的基本概念

熱門標簽:成都人工外呼系統平臺 外呼系統工作推進 索契地圖標注app 儋州電銷機器人廠家 電話外呼系統線路哪家公司做得好 免費高德地圖標注 地圖標注用小紅旗 巴東單位怎么做地圖標注 地圖標注員項目

什么是Docker?
docker的英文本意是碼頭工人,也就是搬運工,這種搬運工搬運的是集裝箱(Container),集裝箱里面裝的可不是商品貨物,而是任意類型的App,Docker把App(叫Payload)裝在Container內,通過Linux Container技術的包裝將App變成一種標準化的、可移植的、自管理的組件,這種組件可以在你的latop上開發、調試、運行,最終非常方便和一致地運行在production環境下。
Docker的核心底層技術是LXC(Linux Container),Docker在其上面加了薄薄的一層,添加了許多有用的功能。這篇stackoverflow上的問題和答案很好地詮釋了Docker和LXC的區別,能夠讓你更好的了解什么是Docker, 簡單翻譯下就是以下幾點:
Docker提供了一種可移植的配置標準化機制,允許你一致性地在不同的機器上運行同一個Container;而LXC本身可能因為不同機器的不同配置而無法方便地移植運行;
Docker以App為中心,為應用的部署做了很多優化,而LXC的幫助腳本主要是聚焦于如何機器啟動地更快和耗更少的內存;
Docker為App提供了一種自動化構建機制(Dockerfile),包括打包,基礎設施依賴管理和安裝等等;
Docker提供了一種類似git的Container版本化的機制,允許你對你創建過的容器進行版本管理,依靠這種機制,你還可以下載別人創建的Container,甚至像git那樣進行合并;
Docker Container是可重用的,依賴于版本化機制,你很容易重用別人的Container(叫Image),作為基礎版本進行擴展;
Docker Container是可共享的,有點類似github一樣,Docker有自己的INDEX,你可以創建自己的Docker用戶并上傳和下載Docker Image;
Docker提供了很多的工具鏈,形成了一個生態系統;這些工具的目標是自動化、個性化和集成化,包括對PAAS平臺的支持等;
那么Docker有什么用呢?對于運維來說,Docker提供了一種可移植的標準化部署過程,使得規模化、自動化、異構化的部署成為可能甚至是輕松簡單的事情;而對于開發者來說,Docker提供了一種開發環境的管理方法,包括映像、構建、共享等功能。
Docker vs. VM
從下圖可以看出,VM是一個運行在宿主機之上的完整的操作系統,VM運行自身操作系統會占用較多的CPU、內存、硬盤資源。Docker不同于VM,只包含應用程序以及依賴庫,基于libcontainer運行在宿主機上,并處于一個隔離的環境中,這使得Docker更加輕量高效,啟動容器只需幾秒鐘之內完成。由于Docker輕量、資源占用少,使得Docker可以輕易的應用到構建標準化的應用中。但Docker目前還不夠完善,比如隔離效果不如VM,共享宿主機操作系統的一些基礎庫等;網絡配置功能相對簡單,主要以橋接方式為主;查看日志也不夠方便靈活。

另外,IBM發表了一篇關于虛擬機和Linux container性能對比的論文,論文中實際測試了虛擬機和Linux container在CPU、內存、存儲IO以及網絡的負載情況,結果顯示Docker容器本身幾乎沒有什么開銷,但是使用AUFS會一定的性能損耗,不如使用Docker Volume,Docker的NAT在較高網絡數據傳輸中會引入較大的工作負載,帶來額外的開銷。不過container的性能與native相差不多,各方面的性能都一般等于或者優于虛擬機。Container和虛擬機在IO密集的應用中都需要調整優化以更好的支持IO操作,兩者在IO密集型的應用中都應該謹慎使用。
Docker組件

Docker是CS架構,主要由下面三部分組成:
Docker daemon: 運行在宿主機上,Docker守護進程,用戶通過Docker client(Docker命令)與Docker daemon交互
Docker client: Docker 命令行工具,是用戶使用Docker的主要方式,Docker client與Docker daemon通信并將結果返回給用戶,Docker client也可以通過socket或者RESTful api訪問遠程的Docker daemon
Docker hub/registry: 共享和管理Docker鏡像,用戶可以上傳或者下載上面的鏡像,官方地址為https://registry.hub.docker.com/,也可以搭建自己私有的Docker registry。
了解了Docker的組成,再來了解一下Docker的兩個主要概念:
Docker image:鏡像是只讀的,鏡像中包含有需要運行的文件。鏡像用來創建container,一個鏡像可以運行多個container;鏡像可以通過Dockerfile創建,也可以從Docker hub/registry上下載。
Docker container:容器是Docker的運行組件,啟動一個鏡像就是一個容器,容器是一個隔離環境,多個容器之間不會相互影響,保證容器中的程序運行在一個相對安全的環境中。
Docker網絡
Docker的網絡功能相對簡單,沒有過多復雜的配置,Docker默認使用birdge橋接方式與容器通信,啟動Docker后,宿主機上會產生docker0這樣一個虛擬網絡接口, docker0不是一個普通的網絡接口, 它是一個虛擬的以太網橋,可以為綁定到docker0上面的網絡接口自動轉發數據包,這樣可以使容器與宿主機之間相互通信。每次Docker創建一個容器,會產生一對虛擬接口,在宿主機上執行ifconfig,會發現多了一個類似veth****這樣的網絡接口,它會綁定到docker0上,由于所有容器都綁定到docker0上,容器之間也就可以通信。
在宿主機上執行ifconfig,會看到docker0這個網絡接口, 啟動一個container,再次執行ifconfig, 會有一個類似veth****的interface,每個container的缺省路由是宿主機上docker0的ip,在container中執行netstat -r可以看到如下圖所示內容:

容器中的默認網關跟docker0的地址是一樣的:

當容器退出之后,veth*虛擬接口也會被銷毀。
除bridge方式,Docker還支持host、container、none三種網絡通信方式,使用其它通信方式,只要在Docker啟動時,指定--net參數即可,比如:

復制代碼
代碼如下:

docker run -i -t --net=host ubuntu /bin/bash

host方式可以讓容器無需創建自己的網絡協議棧,而直接訪問宿主機的網絡接口,在容器中執行ip addr會發現與宿主機的網絡配置是一樣的,host方式讓容器直接使用宿主機的網絡接口,傳輸數據的效率會更加高效,避免bridge方式帶來的額外開銷,但是這種方式也可以讓容器訪問宿主機的D-bus等網絡服務,可能會帶來意想不到的安全問題,應謹慎使用host方式;container方式可以讓容器共享一個已經存在容易的網絡配置; none方式不會對容器的網絡做任務配置,需要用戶自己去定制。
Docker生態
隨著Docker迅速火遍全球, 以Docker為基礎的生態系統也迅速的發展起來,從以部署和運行container為基礎的CoreOS到各種各樣的管理工具和PaaS軟件,Docker以及生態產品都在迅猛發展,以下介紹幾個代表性的軟件。
首先介紹CoreOS,它的出現極大地推動了Docker技術的推廣和發展,CoreOS是專門為大規模服務部署而設計的一種新的Linux發行版,通過運行輕量級的容器方便擴展和維護大規模的服務。它具有以下特點:
CoreOS使用container管理服務(容器即服務),即以容器的角度去管理服務,服務的代碼和依賴都打包到容器里,打包后的容器直接在CoreOS上運行管理。通過容器用戶不再需要關注虛擬機環境等,極大地降低了服務和系統環境的耦合性。另外部署在CoreOS的多個容器都運行在各自獨立的環境中,不會相互影響。
CoreOS專門為cluster等大規模部署而設計,提供了Etcd進行服務發現,以及Fleet管理容器保證服務可用。
CoreOS更加精簡,比如RAM使用比普通Linux低40%。
CoreOS采用雙分區模式(Dual-Partition),主分區為主動模式,負責系統運行,被動模式分區負責系統更新,更新時將整個CoreOS系統下載下來。
CoreOS是為集群服務而設計的,提供了Etcd、Fleet等管理工具管理容器和服務。Etcd是一種類似Zookeeper的分布式key/value存儲服務,用于服務發現和配置管理。Fleet是容器管理工具,保證服務的可用性,當某個機器的服務不可用時,Fleet會將服務遷移到其它機器上運行。
Docker生態中還有一個非常重要的容器管理工具--Kubernetes,它是Google開源的用于在集群環境中管理、維護、自動擴展容器,通過Kubernetes可以很方便地在多個機器上管理和部署容器服務。現在已經得到IBM、Microsoft、RedHat等多個大公司的支持。
在Kubernetes中pod是一個基本單元,一個pod可以是提供相同功能的多個container,這些容器會被部署在同一個minion上。Replication controller定義了多個pod或者容器需要運行,如果當前集群中運行的pod或容器達不到配置的數量,replication controller會調度容器在多個minion上運行,保證集群中的pod數量。service則定義真實對外提供的服務,一個service會對應后端運行的多個container。Kubernetes的架構由一個master和多個minion組成,master通過api提供服務,接受kubectl的請求來調度管理整個集群。minion是運行Kubelet的機器,它接受master的指令創建pod或者容器。
最后介紹一下基于Docker實現的PaaS軟件,Docker PaaS軟件中以Deis和Flynn最為知名。Deis是基于Docker和CoreOS實現的輕量級的PaaS,受到Heroku的啟發,遵循“十二要素”構建應用方法。Deis是以應用程序為中心設計的,分為build、release、run三個階段,用戶執行"git push"后,Deis使用Docker 容器編譯并將編譯結果保存在Docker鏡像;發布階段,一次build和配置文件產生一個數字標識的發布鏡像,將發布鏡像保存到Docker registry中以供后續發布到線上運行;運行階段應用鏡像會被調度到主機上運行,并更新相應的路由。Flynn與Deis類似,也是以應用為中心,Flynn組件分為兩層,layer0是底層資源的抽象,主要負責資源調度以及服務發現等,為上層應用容器的運行提供底層資源調度支持;layer1處理具體應用,通過Docker容器編譯、部署和維護上層應用程序。

標簽:龍巖 安康 鶴壁 鄂州 長春 江蘇 儋州 茂名

巨人網絡通訊聲明:本文標題《全面講解Docker容器技術的基本概念》,本文關鍵詞  全面,講解,Docker,容器,技術,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《全面講解Docker容器技術的基本概念》相關的同類信息!
  • 本頁收集關于全面講解Docker容器技術的基本概念的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 黔东| 福泉市| 浦城县| 天门市| 崇仁县| 许昌市| 青浦区| 永胜县| 营山县| 报价| 茂名市| 浦县| 元阳县| 白朗县| 江达县| 青冈县| 蒲江县| 招远市| 石景山区| 太康县| 铜川市| 合阳县| 南陵县| 外汇| 梓潼县| 清涧县| 泗洪县| 永嘉县| 南阳市| 长治县| 蓬莱市| 准格尔旗| 贺兰县| 澜沧| 屯留县| 阿拉善右旗| 精河县| 湘潭县| 彩票| 漠河县| 滨州市|