何莉 孫雅妮 王海沛
摘要:21世紀(jì),以ABC(A:人工智能,B:大數(shù)據(jù),C:云計(jì)算)形成的新業(yè)態(tài),新體系,新技術(shù)為代表的新互聯(lián)網(wǎng)的運(yùn)行生態(tài)模式,使得中小企業(yè)上云已是常態(tài)化事件。其中云原生技術(shù),容器技術(shù)的出現(xiàn)使得DEVOPS出現(xiàn)了新的解決方案,為運(yùn)維和開發(fā)之間的新建了一座橋梁,從此其快速的部署方式為上層用戶服務(wù)。該論文是以云計(jì)算技術(shù)中的容器技術(shù)為研究對象,研究分析了容器在目前大的互聯(lián)網(wǎng)背景下的應(yīng)用特點(diǎn)以及與傳統(tǒng)虛擬化技術(shù)的主要區(qū)別。
關(guān)鍵詞:容器技術(shù);傳統(tǒng)虛擬化技術(shù);研究分析
1 容器技術(shù)概述
隨著新技術(shù)不斷沖擊,不斷迭代更新,使得云計(jì)算技術(shù)已經(jīng)成為現(xiàn)在以及未來技術(shù)當(dāng)中的新基石,并且已經(jīng)納入國家的新的基礎(chǔ)設(shè)施建設(shè)當(dāng)中。面對中小企業(yè)上云的不斷增長,面對龐大的市場內(nèi)在需求,我國的云計(jì)算產(chǎn)業(yè)也在蓬勃發(fā)展,其云原生的Docker容器技術(shù)也在云服務(wù)平臺(tái)中被大量使用[1-2]。
容器技術(shù)是繼傳統(tǒng)虛擬化技術(shù)(VM虛擬機(jī)為方案)發(fā)展之后的一種新型虛擬化技術(shù)解決方案,是云服務(wù)模式的一種新的PAAS。容器技術(shù)是一種輕量級內(nèi)核的操作系統(tǒng)層虛擬化技術(shù),進(jìn)程資源的隔離和管理控制技術(shù)的解決方案主要是通過NameSpace和Cgroup實(shí)現(xiàn)。
容器之間資源獨(dú)立,互相隔離, 主要是基于細(xì)粒度的資源隔離為基礎(chǔ),將業(yè)務(wù)資源對底層資源的利用率得到最大值。容器技術(shù)解決方案主要應(yīng)用場景之一微服務(wù)領(lǐng)域,為微服務(wù)提供了良好的運(yùn)行環(huán)境,大大提升了對微服務(wù)的運(yùn)維管理效率,其中容器技術(shù)的主流代表Docker是容器技術(shù)解決方案典型的代表,相比較以虛擬機(jī)為單位的解決方案的技術(shù)更趨向于標(biāo)準(zhǔn)化和歸一化。
代表性方案Docker技術(shù),助推了容器技術(shù)的發(fā)展,Docker最初是DotCloud公司的內(nèi)部發(fā)起的一個(gè)項(xiàng)目,主要是做云服務(wù)的PAAS層服務(wù),該服務(wù)當(dāng)時(shí)云服務(wù)領(lǐng)域當(dāng)中的一次革新,使得云服務(wù)解決方案有了新鮮的血液,底層資源的利用率突破了新高。DOCKER的核心思想是利用擴(kuò)展的LINUX容器方案實(shí)現(xiàn)一種輕量化的虛擬化解決方案,實(shí)現(xiàn)將服務(wù)器上層的服務(wù)(app)打包、封裝、集成、標(biāo)準(zhǔn)化供用戶使用,使得服務(wù)的部署變得簡單化和智能化,繼而解決和服務(wù)于開發(fā)人員與運(yùn)維人員[3-4]。
Docker是C/S的架構(gòu),Docker客戶端DOCKER Daemon(守護(hù)進(jìn)程)進(jìn)行交互,DAEMON負(fù)責(zé)構(gòu)架、運(yùn)行和發(fā)布容器??蛻舳撕头?wù)端運(yùn)行在同一個(gè)系統(tǒng)中,也可以連接遠(yuǎn)程的DAEMON,如圖1所示(圖來自于Docker官網(wǎng))。
Docker作為一個(gè)虛擬環(huán)境容器服務(wù),其實(shí)現(xiàn)的思想主要為解決DEVOPS(開發(fā)+運(yùn)維)之間的故事,Docker可以將開發(fā)人員的代碼、運(yùn)行環(huán)境、配置文件共同打包并發(fā)布,并且跨平臺(tái)運(yùn)行。實(shí)現(xiàn)運(yùn)維和開發(fā)的一鍵化部署,到處運(yùn)行。
2 Docker容器技術(shù)主要包含三要素:鏡像,容器和倉庫
鏡像(IMAGE)是一個(gè)只讀鏡像模板文件,是基于分層文件系統(tǒng)的思想實(shí)現(xiàn)[5]。Dockerfile指令定義了Docker鏡像的文件內(nèi)容。Docker鏡像的定義是從底層的基礎(chǔ)鏡像(BaseImage)開始,逐層開展的。鏡像構(gòu)建實(shí)際上就是安裝、配置和運(yùn)行的過程,鏡像的實(shí)現(xiàn)機(jī)制主要基于分層文件系統(tǒng)的原理機(jī)制。Docker鏡像基于UNIONFS把以上過程進(jìn)行分層(Layer)存儲(chǔ),便于鏡像的更新,只需更新變化部分的內(nèi)容。
容器是一個(gè)鏡像運(yùn)行中的實(shí)例,是動(dòng)態(tài)的中的鏡像,容器由鏡像創(chuàng)建,運(yùn)行用戶指定的指令或者Dockerfile定義的運(yùn)行指令,可以將其啟動(dòng)、停止、刪除,而這些容器是相互隔離的(獨(dú)立的進(jìn)程),互不可見。
倉庫:Docker倉庫是Docker鏡像存儲(chǔ)的地方,稱為Docker鏡像倉庫,鏡像倉庫注冊服務(wù)器存放著多個(gè)倉庫,每個(gè)倉庫中又包含了多個(gè)鏡像,每個(gè)鏡像有不同的標(biāo)簽(Tag),鏡像通過標(biāo)簽識別版本。Docker倉庫分為公有倉庫和私有倉庫。最大的公有倉庫是DockerHub,Docker hub存放了數(shù)量龐大的鏡像供用戶下載。由于DOCKER HUB的服務(wù)器在國外,訪問、下載比較慢,因此國內(nèi)多家公司將Docker HUB中的鏡像完全復(fù)制了一份,由此國內(nèi)用戶獲取鏡像速度加快。比如我們經(jīng)常用到的國內(nèi)鏡像倉庫:阿里云、網(wǎng)易云等。
Docker三要素三者之間的關(guān)系:OCKER鏡像是靜態(tài)的文件,容器是運(yùn)行中的鏡像,倉庫是存儲(chǔ)鏡像的地方。
3 容器編排
在多主機(jī)的集群環(huán)境中對容器的生命周期管理,就需要容器編排工具,其Docker Compose是Docker容器進(jìn)行編排的工具,定義和運(yùn)行多個(gè)容器的應(yīng)用,可以以一條命令啟動(dòng)多個(gè)容器。采用Docker compose工具代替了shell腳本的集中化管理多個(gè)容器的工具。
Docker Compose是Docker官方旗下的一個(gè)開源項(xiàng)目,可以批量化管理多個(gè)容器的載體平臺(tái),管理的機(jī)制是將任務(wù)代碼寫入到一個(gè)yaml文件當(dāng)中,該文件中的所有容器通過服務(wù)Services來定義,然后使用Docker -Compose腳本來啟動(dòng)、停止、重啟應(yīng)用和應(yīng)用中的服務(wù)以及所有依賴服務(wù)的容器,適用于運(yùn)行多容器的場景。
4 Docker的優(yōu)勢
Docker與傳統(tǒng)虛擬化技術(shù)對比:
Docker作為云計(jì)算當(dāng)中的一種輕量化的虛擬化解決方案,與KVM、VMwareVSphere等主流虛擬化技術(shù)在實(shí)現(xiàn)原理方面有很大的不同。傳統(tǒng)虛擬化解決方案的實(shí)現(xiàn)是以虛擬機(jī)(VM)為單位,其技術(shù)可以直接作用于裸金屬層面,也可以寄居在宿主機(jī)的操作系統(tǒng)層面,也可以集成在內(nèi)核態(tài)當(dāng)中,而容器Docker技術(shù)的實(shí)現(xiàn)是直接安裝在宿主機(jī)的操作系統(tǒng)層面,與宿主機(jī)共享內(nèi)核,并且最終實(shí)現(xiàn)的服務(wù)是以打包、集成、封裝好的鏡像文件,鏡像文件為用戶提供所需的進(jìn)程服務(wù),針對性很強(qiáng),可實(shí)施性很簡單,為互聯(lián)網(wǎng)界的部署,運(yùn)維和開發(fā)開通了一條綠色通道。下表展示了傳統(tǒng)虛擬化解決方案與容器技術(shù)Docker的異同。