文章首發(fā)于微信公眾號(hào)《程序員果果》
地址:https://mp.weixin.qq.com/s/8VM-c_UkxYcVw2Itiapw4w目前創(chuàng)新互聯(lián)已為1000+的企業(yè)提供了網(wǎng)站建設(shè)、域名、雅安服務(wù)器托管、網(wǎng)站托管、企業(yè)網(wǎng)站設(shè)計(jì)、偏關(guān)網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。
從圖中我們很容器看出,容器技術(shù)資源占用比較少,由于虛擬機(jī)需要模擬硬件的行為,對(duì)CUP和內(nèi)存的損耗比較大。所以同樣配置的服務(wù)器,容器技術(shù)就有以下優(yōu)點(diǎn):
那既然容器有這些優(yōu)點(diǎn),為什么直到Docker的出現(xiàn),才真正的被關(guān)注呢?一個(gè)重要原因就是容器技術(shù)的復(fù)雜性。容器本身就很復(fù)雜,他依賴于Linux內(nèi)核的很多特性,而且他不易安裝,也不易于管理和實(shí)現(xiàn)自動(dòng)化。而Docker就是為了改變這一切而產(chǎn)生的。
Docker 包含了一下幾個(gè)重要主要部分:
docker的鏡像是一個(gè)層疊的只讀文件系統(tǒng),最低端是一個(gè)引導(dǎo)文件系統(tǒng)(即bootfs),第二層是root文件系統(tǒng)(即rootfs),它位于bootfs之上,可以是一種或多種操作系統(tǒng),比如ubuntu或者centos。在docker中,root文件系統(tǒng)永遠(yuǎn)只能是只讀狀態(tài),并且docker運(yùn)用聯(lián)合加載技術(shù)又會(huì)在root文件系統(tǒng)之上加載更多的只讀文件系統(tǒng),聯(lián)合加載指的是一次加載多個(gè)文件系統(tǒng),但是在外面看起來(lái)只能看到一個(gè)文件系統(tǒng),聯(lián)合加載會(huì)將各層文件系統(tǒng)疊加到一起,這樣最終的文件系統(tǒng)會(huì)包含所有的底層文件和目錄,docker將這樣的文件系統(tǒng)稱為鏡像。
當(dāng)一個(gè)容器啟動(dòng)時(shí),docker會(huì)在該鏡像的最頂層加載一個(gè)讀寫文件系統(tǒng),也就是一個(gè)可寫的文件層,我們?cè)赿ocker運(yùn)行的程序,就是在這個(gè)層中進(jìn)行執(zhí)行的,當(dāng)docker第一次啟動(dòng)一個(gè)容器時(shí),初始的讀寫層是空的,當(dāng)文件系統(tǒng)發(fā)生變化時(shí),這些變化都會(huì)應(yīng)用到這一層上,比如像修改一個(gè)文件,該文件首先會(huì)從讀寫層下面的只讀層復(fù)制到該讀寫層,該文件的只讀版本依然存在,但是已經(jīng)被讀寫層中的該文件副本所隱藏,這就是docker的一個(gè)重要技術(shù):寫時(shí)復(fù)制(copy on write)。每個(gè)只讀鏡像層都是只讀的,永遠(yuǎn)不會(huì)變化,當(dāng)創(chuàng)建一個(gè)新容器時(shí),docker會(huì)構(gòu)建出一個(gè)鏡像棧,如下圖所示:
Docker依賴于Linux內(nèi)核的兩個(gè)重要特性:
很多編程語(yǔ)言都包含了“命名空間”的概念,我們可以認(rèn)為“命名空間”是一種“封裝”的概念, 而“封裝”本身實(shí)際上實(shí)現(xiàn)的是代碼的隔離。而在操作系統(tǒng)中,命名空間提供的是系統(tǒng)資源的隔離,而系統(tǒng)資源包括了進(jìn)程、網(wǎng)絡(luò)、文件系統(tǒng)等。
我們從Docker公開(kāi)的文檔來(lái)看,它使用了5種命名空間:
那么,這些隔離的資源,是如何被管理起來(lái)的呢?這就需要用到——Control groups(cgroup)控制組了。
Control groups是Linux內(nèi)核提供的,一種可以限制、記錄、隔離進(jìn)程組所使用的物理資源的機(jī)制。
最初是由google工程師提出,并且在2007年時(shí)被Linux的內(nèi)核的2.6.24版本引進(jìn)??梢哉f(shuō),Control groups就是為容器而生的,沒(méi)有Control groups就沒(méi)有容器技術(shù)的今天。
Control groups提供了以下功能:
資源限制:例如,memory(內(nèi)存)子系統(tǒng)可以為進(jìn)程組設(shè)定一個(gè)內(nèi)存使用的上限,一旦進(jìn)程組使用的內(nèi)存達(dá)到了限額,該進(jìn)程組再發(fā)出內(nèi)存申請(qǐng)時(shí),就會(huì)發(fā)出“out of memory”(內(nèi)存溢出)的警告。
優(yōu)先級(jí)設(shè)定:它可以設(shè)定哪些進(jìn)程組可以使用更大的CPU或者磁盤IO的資源。
資源計(jì)量:它可以計(jì)算進(jìn)程組使用了多少系統(tǒng)資源。尤其是在計(jì)費(fèi)系統(tǒng)中,這一點(diǎn)十分重要。
到這里我們了解了Namespace和CGroup的概念和職能,而這兩個(gè)特性帶給了Docker哪些能力呢?如下:
文件系統(tǒng)隔離:首先是文件系統(tǒng)的隔離,每個(gè)Docker的容器,都可以擁有自己的root文件系統(tǒng)。
進(jìn)程隔離:每個(gè)容器都運(yùn)行在自己的進(jìn)程環(huán)境中。
網(wǎng)絡(luò)隔離:容器間的虛擬網(wǎng)絡(luò)接口和IP地址都是分開(kāi)的。
歡迎關(guān)注我的公眾號(hào)《程序員果果》,關(guān)注有驚喜~~
分享名稱:Docker的基本概念和框架
當(dāng)前鏈接:http://sd-ha.com/article36/gpsdsg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開(kāi)發(fā)、外貿(mào)建站、用戶體驗(yàn)、建站公司、Google、App設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)