• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      Docker技術(shù)的移植性分析研究

      2015-12-25 08:59于燁李斌劉思堯
      軟件 2015年7期

      于燁++李斌++劉思堯

      摘要:Docker因?yàn)槠漭p量、便捷的特點(diǎn),受了業(yè)界廣泛的關(guān)注和討論,目前已有多個(gè)相關(guān)項(xiàng)目,逐漸形成了圍繞Docker的生態(tài)體系。Docker的核心思想是利用擴(kuò)展的LXC(Linux Container)方案實(shí)現(xiàn)一種輕量級(jí)的虛擬化解決方案。Docker主要利用AUFS機(jī)制來(lái)實(shí)現(xiàn)系統(tǒng)的移植性,節(jié)省了存儲(chǔ)和內(nèi)存,也保證了容器的快速部署。本文從AUFS的實(shí)現(xiàn)原理入手,詳細(xì)分析了Docker的移動(dòng)應(yīng)用部署的原理和可行性。

      關(guān)鍵詞:Docker;AUFS;文件系統(tǒng);移植性

      中圖分類號(hào):TP311

      文獻(xiàn)標(biāo)識(shí)碼:A

      DOI: 10.3969/j.issn.1003-6970.2015.07.012

      0 引言

      Docker是dotcloud公司于2013初年開(kāi)始的一個(gè)開(kāi)源項(xiàng)目,最早是該公司已有的云業(yè)務(wù)的一個(gè)自然擴(kuò)展技術(shù)。Docker對(duì)容器的使用基本是建立在LXC基礎(chǔ)之上的,然而LXC存在的問(wèn)題是難以移動(dòng),即難以通過(guò)標(biāo)準(zhǔn)化的模板制作、重建、復(fù)制和移動(dòng)容器。在以VM為基礎(chǔ)的虛擬化手段中,有image和snapshot可以用于VM的復(fù)制、重建以及移動(dòng)的功能。想要通過(guò)容器來(lái)實(shí)現(xiàn)快速的大規(guī)模部署和更新,這些功能不可或缺。針對(duì)這樣的問(wèn)題,Docker利用AUFS來(lái)實(shí)現(xiàn)對(duì)容器的快速更新,Docker0.7中引入了Storage Driver,支持AUFS,VFS,Device Mapper,也為BTRFS以及ZFS的引入提供了可能。

      1 Docker簡(jiǎn)介

      Docker是PaaS提供商dotCloud開(kāi)源的一個(gè)基于LXC(Linux Container)的應(yīng)用容器引擎,讓開(kāi)發(fā)者可以將應(yīng)用程序、依賴的運(yùn)行庫(kù)文件打包并移植到一個(gè)新的容器中,然后發(fā)布到任何系統(tǒng)為L(zhǎng)inux的機(jī)器上,也可以實(shí)現(xiàn)虛擬化解決方案。容器是完全沙箱機(jī)制的實(shí)現(xiàn)方式,任意容器之間不會(huì)有任何接口,具有安全訪問(wèn)資源的特性,可以實(shí)現(xiàn)系統(tǒng)的隔離;而且容器的運(yùn)行資源開(kāi)銷小,可以很容易地在機(jī)器和數(shù)據(jù)中心中運(yùn)行。最重要的是Docker容器不依賴于任何特定需求實(shí)現(xiàn)的編程語(yǔ)言、編程框架或已打包的系統(tǒng)。Docker目前在業(yè)界非常受歡迎,包括dotCloud, Google Compute Engine和百度應(yīng)用引擎(BAE),都使用了Docker。

      Docker容器主要解決“依賴地獄”的問(wèn)題,即應(yīng)用通常從已存在的組件組合而來(lái),并且依賴其他服務(wù)和應(yīng)用。例如,Python應(yīng)用可能使用Postgre所為一個(gè)數(shù)據(jù)存儲(chǔ),用Redis緩存以及使用Apache作web服務(wù)器。每個(gè)這些組件都附帶自身的一些依賴,這些依賴可能與其他組件產(chǎn)生沖突。通過(guò)打包每個(gè)組件及其依賴,Docker容器解決沖突依賴、缺少依賴、平臺(tái)依賴等問(wèn)題。

      2 Docker的移植性

      2.1 AUFS簡(jiǎn)介

      AUFS (AnotherUnionFS)是一種Union FS,簡(jiǎn)單來(lái)說(shuō)就是支持將不同目錄掛載到同一個(gè)虛擬文件系統(tǒng)下(unite several directories into a single virtual filesystem)的文件系統(tǒng),更進(jìn)一步地,AUFS支持為每一個(gè)成員目錄(AKA branch)設(shè)定readonly,readwrite和whiteout-able權(quán)限,同時(shí)AUFS里有一個(gè)類似分層的概念,對(duì)readonly權(quán)限的branch可以邏輯上進(jìn)行修改(增量地,不影響readonly部分的)。通常Union FS有兩個(gè)用途,一方面可以實(shí)現(xiàn)不借助LVM,RAID將多個(gè)disk和掛在到一個(gè)目錄下,另一個(gè)更常用的就是將一個(gè)readonly的branch和一個(gè)writeable的branch聯(lián)合在一起,Live CD正是基于此可以允許在OS image不變的基礎(chǔ)上允許用戶在其上進(jìn)行一些寫(xiě)操作。

      2.2 Docker的移植性分析

      Docker使用AuFS作為容器的文件系統(tǒng)。AuFS的層狀文件系統(tǒng)能夠透明覆蓋一個(gè)或多個(gè)現(xiàn)有文件系統(tǒng)。當(dāng)一個(gè)進(jìn)程需要修改一個(gè)文件時(shí),AuFS創(chuàng)建該文件的一個(gè)副本。AuFS可以通過(guò)寫(xiě)復(fù)制把多層合并成文件系統(tǒng)的單層表示。AuFS允許Docker把某些鏡像作為容器的基礎(chǔ)。例如,利用AuFS的機(jī)制,只需要一個(gè)CentOS鏡像的副本就可以作為很多不同容器的基礎(chǔ),既節(jié)省了存儲(chǔ)和內(nèi)存,也保證了容器的快速部署。

      使用AuFS的另一個(gè)好處是提升了Docker的版本容器鏡像能力。每個(gè)新版本都是一個(gè)與之前版本的簡(jiǎn)單差異改動(dòng),有效地保持鏡像文件最小化。但這也意味著需要一個(gè)記錄該容器從一個(gè)版本到另一個(gè)版本改動(dòng)的審計(jì)跟蹤。

      AUFS是一種Union FS,它是一種支持將不同目錄掛載到同一個(gè)虛擬文件系統(tǒng)下的文件系統(tǒng),并且支持為每一個(gè)成員目錄(AKA branch)設(shè)定‘readonly,‘readwrite和 ‘whiteout-able權(quán)限,同時(shí)AUFS里有一個(gè)類似分層的概念,對(duì)readonly權(quán)限的branch可以邏輯上進(jìn)行修改。通常Union FS有兩個(gè)用途,一方面可以實(shí)現(xiàn)不借助LVM, RAID將多個(gè)disk和掛在到一個(gè)目錄下,另一個(gè)更常用的就是將一個(gè)readonly的branch和一個(gè)writeable的branch聯(lián)合在一起,Live CD正是基于此可以允許在OS image不變的基礎(chǔ)上允許用戶在其上進(jìn)行一些寫(xiě)操作。Docker在AUFS上構(gòu)建的container image也正是如此。

      典型的Linux啟動(dòng)到運(yùn)行需要兩個(gè)FS:bootfs和rootfs(從功能角度而非文件系統(tǒng)角度),如圖1所示。

      bootfs (boot file system)主要包含bootloader和kernel,bootloader主要用于引導(dǎo)加載kernel,當(dāng)boot成功后,kernel被加載到內(nèi)存中,bootfs就被umount了。endprint

      rootfs (root file system)包含典型Linux系統(tǒng)中的/dev,/proc,/bin,/etc等標(biāo)準(zhǔn)目錄和文件。

      由此可見(jiàn)對(duì)于不同的linux發(fā)行版,bootfs基本是一致的,rootfs會(huì)有差別,因此不同的發(fā)行版可以公用bootfs如圖2所示。

      典型的Linux在啟動(dòng)后,首先將rootfs置為readonly,進(jìn)行一系列檢查,然后將其切換為readwrite供用戶使用。在docker中,最初也是將rootfs以readonly方式加載并檢查,接下來(lái)利用unionmount將一個(gè)readwrite文件系統(tǒng)掛載在readonly的rootfs之上,允許再次將下層的file system設(shè)定為readonly并向上疊加,這樣以來(lái)一組readonly和一個(gè)writeable的結(jié)構(gòu)就構(gòu)成一個(gè)container的運(yùn)行目錄,每一個(gè)運(yùn)行目錄被稱作一個(gè)Layer,如圖3所示。

      得益于AUFS的特性,每一個(gè)對(duì)readonly層文件或文件目錄的修改都只會(huì)存在于上層的writeable層中。這樣就可以避免競(jìng)爭(zhēng),使多個(gè)container可以共享readonly的layer。

      因此docker將readonly的層稱作“image”,對(duì)于容器而言整個(gè)rootfs都是read-write的,但事實(shí)上所有的修改都寫(xiě)入最上層的writeable層中,image不保存用戶狀態(tài),可以用于模板、重建和復(fù)制。

      上層的image依賴下層的image,因此docker中把下層的image稱作父image,沒(méi)有父image的image稱作base image,如圖4所示。

      因此想要從一個(gè)image啟動(dòng)一個(gè)容器,docker會(huì)先加載其父image直到base image,用戶的進(jìn)程運(yùn)行在writeable的layer中。所有parent image中的數(shù)據(jù)信息以及ID、網(wǎng)絡(luò)和lxc管理的資源限制等具體container的配置,構(gòu)成一個(gè)docker概念上的容器,如圖5所示。

      由此可見(jiàn),采用AUFS作為docker的容器文件系統(tǒng),能夠提供如下好處:

      (1)節(jié)省存儲(chǔ)空間:多個(gè)容器可以共享base image存儲(chǔ);

      (2)快速部署:如果要部署多個(gè)容器,base image可以避免多次拷貝;

      (3)內(nèi)存更?。阂?yàn)槎鄠€(gè)容器共享base image,以及OS的disk緩存機(jī)制,多個(gè)容器中的進(jìn)程命中緩存內(nèi)容的幾率大大增加;

      (4)升級(jí)更方便:相比于copy-on-write類型的FS,base-image也可以掛載為可writeable的,可以通過(guò)更新base image而一次性更新其之上的容器;

      (5)允許在不更改base-image的同時(shí)修改其目錄中的文件:所有寫(xiě)操作都發(fā)生在最上層的writeable層中,這樣可以大大增加base image能共享的文件內(nèi)容。

      以上5條中,1-3條可以通過(guò)copy-on-write的FS實(shí)現(xiàn),4可以利用其他的union mount方式實(shí)現(xiàn),5只有AUFS實(shí)現(xiàn)的很好。這也是為什么Docker一開(kāi)始就建立在AUFS之上。

      3 結(jié)論

      Docker使用AuFS作為容器的文件系統(tǒng)。AUFS是一種Union FS,它是一種支持將不同目錄掛載到同一個(gè)虛擬文件系統(tǒng)下的文件系統(tǒng),并且為每一個(gè)成員目錄(AKA branch)設(shè)定不同的權(quán)限,并基于一種分層的概念,對(duì)這些權(quán)限從邏輯上進(jìn)行修改。節(jié)省了存儲(chǔ)和內(nèi)存,保證了容器的快速部署和升級(jí)的便捷性。endprint

      湖口县| 奉化市| 鸡泽县| 曲松县| 襄垣县| 揭阳市| 沭阳县| 浪卡子县| 赤壁市| 金阳县| 黑水县| 宣威市| 滨海县| 南川市| 华亭县| 兴山县| 田阳县| 牙克石市| 上高县| 东乌珠穆沁旗| 黎城县| 旬邑县| 平顺县| 保康县| 滕州市| 共和县| 三明市| 喀什市| 吉木乃县| 仁寿县| 如东县| 邵武市| 朔州市| 定南县| 年辖:市辖区| 邵东县| 尼玛县| 浑源县| 清流县| 乐东| 方城县|