《虛擬化技術(shù)與應(yīng)用》 課件 21-容器鏡像的構(gòu)建及最佳實(shí)踐;22-主流超融合產(chǎn)品_第1頁(yè)
《虛擬化技術(shù)與應(yīng)用》 課件 21-容器鏡像的構(gòu)建及最佳實(shí)踐;22-主流超融合產(chǎn)品_第2頁(yè)
《虛擬化技術(shù)與應(yīng)用》 課件 21-容器鏡像的構(gòu)建及最佳實(shí)踐;22-主流超融合產(chǎn)品_第3頁(yè)
《虛擬化技術(shù)與應(yīng)用》 課件 21-容器鏡像的構(gòu)建及最佳實(shí)踐;22-主流超融合產(chǎn)品_第4頁(yè)
《虛擬化技術(shù)與應(yīng)用》 課件 21-容器鏡像的構(gòu)建及最佳實(shí)踐;22-主流超融合產(chǎn)品_第5頁(yè)
已閱讀5頁(yè),還剩43頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

構(gòu)建高效的容器鏡像容器鏡像的構(gòu)建及最佳實(shí)踐掌握容器鏡像構(gòu)建技巧教學(xué)目標(biāo)構(gòu)建高效的容器鏡像目錄通常所說(shuō)的容器化改造是對(duì)應(yīng)用整體微服務(wù)架構(gòu)改造,再容器化,這樣做可以帶來(lái)如下好處。單獨(dú)擴(kuò)展:拆分為微服務(wù)后,可單獨(dú)增加或縮減每個(gè)微服務(wù)的實(shí)例數(shù)量。提升開(kāi)發(fā)速度:各微服務(wù)之間解耦,某個(gè)微服務(wù)的代碼開(kāi)發(fā)不影響其他微服務(wù)。通過(guò)隔離確保安全:整體應(yīng)用中,若存在安全漏洞,會(huì)獲得所有功能的權(quán)限。微服務(wù)架構(gòu)中,若攻擊了某個(gè)服務(wù),只可獲得該服務(wù)的訪(fǎng)問(wèn)權(quán)限,無(wú)法入侵其他服務(wù)。隔離崩潰:如果其中一個(gè)微服務(wù)崩潰,其它微服務(wù)還可以持續(xù)正常運(yùn)行。一個(gè)容器只運(yùn)行一個(gè)進(jìn)程為了降低復(fù)雜性、減少依賴(lài)、減小文件大小、節(jié)約構(gòu)建時(shí)間,你應(yīng)該避免安裝任何不必要的包。例如,不要在數(shù)據(jù)庫(kù)鏡像中包含一個(gè)文本編輯器。apt-getupgrade會(huì)使得鏡像構(gòu)建非常不確定,在構(gòu)建時(shí)不確定哪些包會(huì)被安裝,此時(shí)可能會(huì)產(chǎn)不一致的鏡像。如果基礎(chǔ)鏡像中的某個(gè)包過(guò)時(shí)了,你應(yīng)該聯(lián)系它的維護(hù)者。如果你確定某個(gè)特定的包,比如foo需要升級(jí),使用apt-getinstall-yfoo就行,該指令會(huì)自動(dòng)升級(jí)foo包。不要在構(gòu)建中升級(jí)版本FROMubuntuADD./appRUNapt-getupdateRUNapt-getupgrade-yRUNapt-getinstall-ynodejsRUNcd/app&&npminstallCMDnpmstart容器鏡像是分層的,類(lèi)似于洋蔥,它們都有很多層,為了修改內(nèi)層,則需要將外面的層都刪掉。容器鏡像有如下特性:Dockerfile中的每個(gè)指令都會(huì)創(chuàng)建一個(gè)新的鏡像層。鏡像層將被緩存和復(fù)用。Dockerfile修改后,復(fù)制的文件變化了或者構(gòu)建鏡像時(shí)指定的變量不同了,對(duì)應(yīng)的鏡像層緩存就會(huì)失效。某一層的鏡像緩存失效之后,它之后的鏡像層緩存都會(huì)失效。鏡像層是不可變的,如果我們?cè)谀骋粚又刑砑右粋€(gè)文件,然后在下一層中刪除它,則鏡像中依然會(huì)包含該文件,只是這個(gè)文件在容器中不可見(jiàn)。將變化頻率一樣的RUN指令合一(1)將變化頻率一樣的指令合并在一起,目的是為了更好的將鏡像分層,避免帶來(lái)不必要的成本。如本例中將node.js安裝與npm模塊安裝放在一起的話(huà),則每次修改源代碼,都需要重新安裝node.js,這顯然不合適。將變化頻率一樣的RUN指令合一(2)FROMubuntuADD./appRUNapt-getupdate\&&apt-getinstall-ynodejs\&&cd/app\&&npminstallCMDnpmstartFROMubuntuRUNapt-getupdate&&apt-getinstall-ynodejsADD./appRUNcd/app&&npminstallCMDnpmstart當(dāng)鏡像沒(méi)有指定標(biāo)簽時(shí),將默認(rèn)使用latest標(biāo)簽。因此,F(xiàn)ROMubuntu指令等同于FROMubuntu:latest。當(dāng)鏡像更新時(shí),latest標(biāo)簽會(huì)指向不同的鏡像,這時(shí)構(gòu)建鏡像有可能失敗。使用特定的標(biāo)簽FROMubuntu:16.04RUNapt-getupdate&&apt-getinstall-ynodejsADD./appRUNcd/app&&npminstallCMDnpmstart假設(shè)我們更新了apt-get源,下載解壓并安裝了一些軟件包,它們都保存在/var/lib/apt/lists/目錄中。但是,運(yùn)行應(yīng)用時(shí)容器鏡像中并不需要這些文件。因此最好將它們刪除,因?yàn)樗鼤?huì)使容器鏡像變大。示例Dockerfile中,刪除/var/lib/apt/lists/目錄中的文件。刪除多余文件FROMubuntu:16.04RUNapt-getupdate\&&apt-getinstall-ynodejs\&&rm-rf/var/lib/apt/lists/*ADD./appRUNcd/app&&npminstallCMDnpmstart在示例中,我們選擇了ubuntu作為基礎(chǔ)鏡像。但是我們只需要運(yùn)行node程序,沒(méi)有必要使用一個(gè)通用的基礎(chǔ)鏡像,node鏡像應(yīng)該是更好的選擇。更好的選擇是alpine版本的node鏡像。alpine是一個(gè)極小化的Linux發(fā)行版,只有4MB,這讓它非常適合作為基礎(chǔ)鏡像。選擇合適的基礎(chǔ)鏡像FROMnode:7-alpineADD./appRUNcd/app&&npminstallCMDnpmstartWORKDIR指令可以設(shè)置默認(rèn)目錄,也就是運(yùn)行RUN/CMD/ENTRYPOINT指令的地方。CMD指令可以設(shè)置容器創(chuàng)建時(shí)執(zhí)行的默認(rèn)命令。另外,您應(yīng)該將命令寫(xiě)在一個(gè)數(shù)組中,數(shù)組中每個(gè)元素為命令的每個(gè)單詞。設(shè)置WORKDIR和CMDFROMnode:7-alpineWORKDIR/appADD./appRUNnpminstallCMD["npm","start"]ENTRYPOINT指令并不是必須的,因?yàn)樗鼤?huì)增加復(fù)雜度。ENTRYPOINT是一個(gè)腳本,它會(huì)默認(rèn)執(zhí)行,并且將指定的命令作為其參數(shù)。它通常用于構(gòu)建可執(zhí)行的容器鏡像。使用ENTRYPOINT(可選)FROMnode:7-alpineWORKDIR/appADD./appRUNnpminstallENTRYPOINT["./entrypoint.sh"]CMD["start"]在前文的entrypoint腳本中,使用了exec命令運(yùn)行node應(yīng)用。不使用exec的話(huà),我們則不能順利地關(guān)閉容器,因?yàn)镾IGTERM信號(hào)會(huì)被bash腳本進(jìn)程吞沒(méi)。exec命令啟動(dòng)的進(jìn)程可以取代腳本進(jìn)程,因此所有的信號(hào)都會(huì)正常工作。在entrypoint腳本中使用execCOPY指令非常簡(jiǎn)單,僅用于將文件拷貝到鏡像中。ADD相對(duì)來(lái)講復(fù)雜一些,可以用于下載遠(yuǎn)程文件以及解壓壓縮包。優(yōu)先使用COPYFROMnode:7-alpineWORKDIR/appCOPY./appRUNnpminstallENTRYPOINT["./entrypoint.sh"]CMD["start"]將變化最少的部分放在Dockerfile的前面,這樣可以充分利用鏡像緩存。示例中,源代碼會(huì)經(jīng)常變化,則每次構(gòu)建鏡像時(shí)都需要重新安裝NPM模塊,這顯然不是我們希望看到的。因此我們可以先拷貝package.json,然后安裝NPM模塊,最后才拷貝其余的源代碼。這樣的話(huà),即使源代碼變化,也不需要重新安裝NPM模塊。合理調(diào)整COPY與RUN的順序FROMnode:7-alpineWORKDIR/appCOPYpackage.json/appRUNnpminstallCOPY./appENTRYPOINT["./entrypoint.sh"]CMD["start"]運(yùn)行容器時(shí)很可能需要一些環(huán)境變量。在Dockerfile設(shè)置默認(rèn)的環(huán)境變量是一種很好的方式。另外,我們應(yīng)該在Dockerfile中設(shè)置映射端口和數(shù)據(jù)卷。示例如下:設(shè)置默認(rèn)的環(huán)境變量、映射端口和數(shù)據(jù)卷FROMnode:7-alpineENVPROJECT_DIR=/appWORKDIR$PROJECT_DIRCOPYpackage.json$PROJECT_DIRRUNnpminstallCOPY.$PROJECT_DIRENTRYPOINT["./entrypoint.sh"]CMD["start"]EXPOSE指令用于指定容器將要監(jiān)聽(tīng)的端口。因此,你應(yīng)該為你的應(yīng)用程序使用常見(jiàn)的端口。例如,提供Apacheweb服務(wù)的鏡像應(yīng)該使用EXPOSE80,而提供MongoDB服務(wù)的鏡像使用EXPOSE27017。對(duì)于外部訪(fǎng)問(wèn),用戶(hù)可以在執(zhí)行dockerrun時(shí)使用一個(gè)標(biāo)志來(lái)指示如何將指定的端口映射到所選擇的端口。使用EXPOSE暴露端口FROMnode:7-alpineENVPROJECT_DIR=/appWORKDIR$PROJECT_DIRCOPYpackage.json$PROJECT_DIRRUNnpminstallCOPY.$PROJECT_DIRENVAPP_PORT=3000EXPOSE$APP_PORTENTRYPOINT["./entrypoint.sh"]CMD["start"]VOLUME指令用于暴露任何數(shù)據(jù)庫(kù)存儲(chǔ)文件、配置文件或容器創(chuàng)建的文件和目錄。強(qiáng)烈建議使用VOLUME來(lái)管理鏡像中的可變部分和用戶(hù)可以改變的部分。下面示例中填寫(xiě)一個(gè)媒體目錄。使用VOLUME管理數(shù)據(jù)卷FROMnode:7-alpineENVPROJECT_DIR=/appWORKDIR$PROJECT_DIRCOPYpackage.json$PROJECT_DIRRUNnpminstallCOPY.$PROJECT_DIRENVMEDIA_DIR=/media\APP_PORT=3000VOLUME$MEDIA_DIREXPOSE$APP_PORTENTRYPOINT["./entrypoint.sh"]CMD["start"]你可以給鏡像添加標(biāo)簽來(lái)幫助組織鏡像、記錄許可信息、輔助自動(dòng)化構(gòu)建等。每個(gè)標(biāo)簽一行,由LABEL開(kāi)頭加上一個(gè)或多個(gè)標(biāo)簽對(duì)。使用LABEL設(shè)置鏡像元數(shù)據(jù)運(yùn)行容器時(shí),可以指定--restartalways選項(xiàng)。這樣的話(huà),容器崩潰時(shí),dockerdaemon會(huì)重啟容器。對(duì)于需要長(zhǎng)時(shí)間運(yùn)行的容器,這個(gè)選項(xiàng)非常有用。但是,如果容器的確在運(yùn)行,但是不可用怎么辦?使用HEALTHCHECK指令可以讓容器引擎周期性的檢查容器的健康狀況。我們只需要指定一個(gè)命令,如果一切正常的話(huà)返回0,否則返回1。當(dāng)請(qǐng)求失敗時(shí),curl--fail命令返回非0狀態(tài)。示例如下:添加HEALTHCHECKFROMnode:7-alpineLABELcom.example.version="0.0.1-beta"ENVPROJECT_DIR=/appWORKDIR$PROJECT_DIRCOPYpackage.json$PROJECT_DIRRUNnpminstallCOPY.$PROJECT_DIRENVMEDIA_DIR=/media\APP_PORT=3000VOLUME$MEDIA_DIREXPOSE$APP_PORTHEALTHCHECKCMDcurl--failhttp://localhost:$APP_PORT||exit1ENTRYPOINT["./entrypoint.sh"]CMD["start"].dockerignore的作用和語(yǔ)法類(lèi)似于.gitignore,可以忽略一些不需要的文件,這樣可以有效加快鏡像構(gòu)建時(shí)間,同時(shí)減少容器鏡像的大小。構(gòu)建鏡像時(shí),容器引擎需要先準(zhǔn)備context,將所有需要的文件收集到進(jìn)程中。默認(rèn)的context包含Dockerfile目錄中的所有文件,但是實(shí)際上,我們并不需要.git目錄等內(nèi)容。編寫(xiě).dockerignore文件構(gòu)建高效的容器鏡像總結(jié)主流超融合產(chǎn)品理解超融合的基本概念了解主流的超融合產(chǎn)品理解超融合產(chǎn)品的核心競(jìng)爭(zhēng)力教學(xué)目標(biāo)超融合的概念主流的超融合產(chǎn)品超融合產(chǎn)品的核心競(jìng)爭(zhēng)力體現(xiàn)目錄超融合是一種IT基礎(chǔ)架構(gòu)構(gòu)建方式,其核心思想是使用通用硬件,用軟件定義來(lái)實(shí)現(xiàn)IT基礎(chǔ)架構(gòu)的各項(xiàng)服務(wù),包括:計(jì)算,存儲(chǔ),災(zāi)備,運(yùn)維管理等,并且這些服務(wù)都在統(tǒng)一的平臺(tái)上。超融合基礎(chǔ)架構(gòu)(Hyper-ConvergedInfrastructure,或簡(jiǎn)稱(chēng)“HCI)是實(shí)現(xiàn)“軟件定義數(shù)據(jù)中心的終極技術(shù)途徑超融合的概念超融合的特點(diǎn)超融合的概念軟件定義統(tǒng)一平臺(tái)使用通用硬件010203超融合的發(fā)展歷史國(guó)內(nèi)超融合市場(chǎng)正處于發(fā)展初期,2017年整體規(guī)模就已經(jīng)達(dá)到3.79億美元且每年增速極快,隨著云架構(gòu)需求的釋放,將有效支撐超融合的高速發(fā)展,特別是企業(yè)級(jí)私有云領(lǐng)域,超融合有望憑借極佳的性能、偏低的價(jià)格、良好的體驗(yàn),在該市場(chǎng)上實(shí)現(xiàn)廣泛應(yīng)用。隨著云計(jì)算的應(yīng)用從游戲、電商和社交等互聯(lián)網(wǎng)行業(yè),轉(zhuǎn)向政府、醫(yī)療和教育等行業(yè),超融合應(yīng)用于行業(yè)云的成長(zhǎng)空間十分廣闊。

超融合的市場(chǎng)價(jià)值超融合的概念主流的超融合廠(chǎng)家超融合產(chǎn)品的核心競(jìng)爭(zhēng)力體現(xiàn)目錄主流的超融合產(chǎn)品廠(chǎng)家Smartx華為H3CNutainxEMCVMware深信服超融合的概念主流的超融合廠(chǎng)家超融合產(chǎn)品的核心競(jìng)爭(zhēng)力體現(xiàn)目錄超融合產(chǎn)品的核心競(jìng)爭(zhēng)力體現(xiàn)分布式存儲(chǔ)的實(shí)現(xiàn)虛擬化計(jì)算的實(shí)現(xiàn)運(yùn)維管理平臺(tái)的實(shí)現(xiàn)分布式存儲(chǔ)的價(jià)值體現(xiàn)自主研發(fā),如:NutanixNDFS,VMwareVSAN,SmartXZBS,華為FusionStorage;采用開(kāi)源的分布式存儲(chǔ)或在開(kāi)源基礎(chǔ)上改造,如,Ceph,GlusterFS;超融合產(chǎn)品的核心競(jìng)爭(zhēng)力體現(xiàn)虛擬化計(jì)算虛擬化平臺(tái)的支持能力是否支持虛擬化的特殊接口各廠(chǎng)商分布式塊存儲(chǔ)的資源消耗情況超融合產(chǎn)品的核心競(jìng)爭(zhēng)力體現(xiàn)存儲(chǔ)與虛擬化的整合可以看成三種類(lèi)型:類(lèi)型一:存儲(chǔ)服務(wù)作為內(nèi)核模塊運(yùn)行在Hypervisor內(nèi)部。最典型的代表是VxRail,存儲(chǔ)服務(wù)VSAN作為ESXi/vSphere內(nèi)核模塊被整合。這種架構(gòu)下存儲(chǔ)服務(wù)不經(jīng)過(guò)Hypervisor直接訪(fǎng)問(wèn)存儲(chǔ)設(shè)備,幾乎無(wú)性能損耗,理論上本地I/O性能可以充分發(fā)揮。超融合產(chǎn)品的核心競(jìng)爭(zhēng)力體現(xiàn)存儲(chǔ)與虛擬化的整合可以看成三種類(lèi)型:類(lèi)型一:超融合產(chǎn)品的核心競(jìng)爭(zhēng)力體現(xiàn)存儲(chǔ)與虛擬化的整合可以看成三種類(lèi)型:類(lèi)型二:存儲(chǔ)服務(wù)運(yùn)行于Hypervisor上獨(dú)立的虛擬機(jī)里,該虛擬機(jī)實(shí)際起到虛擬存儲(chǔ)設(shè)備VSA(VirtualStorageApplicance)的作用

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論