濮阳杆衣贸易有限公司

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

全面講解Docker容器技術(shù)的基本概念

熱門標(biāo)簽:成都人工外呼系統(tǒng)平臺(tái) 外呼系統(tǒng)工作推進(jìn) 索契地圖標(biāo)注app 儋州電銷機(jī)器人廠家 電話外呼系統(tǒng)線路哪家公司做得好 免費(fèi)高德地圖標(biāo)注 地圖標(biāo)注用小紅旗 巴東單位怎么做地圖標(biāo)注 地圖標(biāo)注員項(xiàng)目

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

另外,IBM發(fā)表了一篇關(guān)于虛擬機(jī)和Linux container性能對(duì)比的論文,論文中實(shí)際測試了虛擬機(jī)和Linux container在CPU、內(nèi)存、存儲(chǔ)IO以及網(wǎng)絡(luò)的負(fù)載情況,結(jié)果顯示Docker容器本身幾乎沒有什么開銷,但是使用AUFS會(huì)一定的性能損耗,不如使用Docker Volume,Docker的NAT在較高網(wǎng)絡(luò)數(shù)據(jù)傳輸中會(huì)引入較大的工作負(fù)載,帶來額外的開銷。不過container的性能與native相差不多,各方面的性能都一般等于或者優(yōu)于虛擬機(jī)。Container和虛擬機(jī)在IO密集的應(yīng)用中都需要調(diào)整優(yōu)化以更好的支持IO操作,兩者在IO密集型的應(yīng)用中都應(yīng)該謹(jǐn)慎使用。
Docker組件

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

容器中的默認(rèn)網(wǎng)關(guān)跟docker0的地址是一樣的:

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

復(fù)制代碼
代碼如下:

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

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

標(biāo)簽:龍巖 安康 鶴壁 鄂州 長春 江蘇 儋州 茂名

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《全面講解Docker容器技術(shù)的基本概念》,本文關(guān)鍵詞  全面,講解,Docker,容器,技術(shù),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《全面講解Docker容器技術(shù)的基本概念》相關(guān)的同類信息!
  • 本頁收集關(guān)于全面講解Docker容器技術(shù)的基本概念的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    介休市| 张家港市| 富川| 锡林浩特市| 科尔| 滁州市| 广安市| 崇文区| 宜宾县| 天津市| 河津市| 桦川县| 瑞金市| 五寨县| 成安县| 扎赉特旗| 泽州县| 西华县| 鹤山市| 西吉县| 墨脱县| 聊城市| 长春市| 丰原市| 阳泉市| 桦南县| 连山| 高平市| 晋中市| 寿光市| 六盘水市| 金湖县| 东安县| 枣阳市| 高淳县| 林芝县| 花莲县| 隆德县| 姚安县| 铜鼓县| 汉寿县|