溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

怎么調(diào)整Docker里面的Image大小

發(fā)布時(shí)間:2021-11-19 13:35:12 來(lái)源:億速云 閱讀:615 作者:小新 欄目:云計(jì)算

這篇文章主要介紹了怎么調(diào)整Docker里面的Image大小,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

Docker給開發(fā)者帶來(lái)的最直接好處是,可以打包他們的應(yīng)用,將所有應(yīng)用都捆綁在一個(gè)封套中,然后發(fā)布到任何流行的Linux機(jī)器上。并且,Docker能實(shí)現(xiàn)虛擬化,各種應(yīng)用之間不需要任何接口。也就是,我們常說(shuō)的“開箱即用”,無(wú)需大量安裝或者配置相關(guān)的軟件、硬件等。

而Docker Image就是Docker 鏡像。Docker鏡像是一個(gè)只讀的模板。比如一個(gè)鏡像可以包含Ubuntu系統(tǒng)以及安裝在Ubuntu上的Apache Web服務(wù)器和你自己的應(yīng)用。鏡像是用來(lái)創(chuàng)建容器的。Docker提供了一個(gè)簡(jiǎn)單的方式用以創(chuàng)建新的鏡像或者更新現(xiàn)存的鏡像,甚至你可以下載其他地方提供的鏡像。
由于Docker使用一個(gè)統(tǒng)一文件系統(tǒng),Docker鏡像其實(shí)就是一堆文件的集合,并不是像VM那樣的是一個(gè)操作系統(tǒng)。鏡像可以簡(jiǎn)單到只有一個(gè)程序文件,比如如果你寫了一個(gè)簡(jiǎn)單的hello world程序放到一個(gè)空的鏡像中,那么整個(gè)鏡像的大小,就是你編譯后的二進(jìn)制文件的大小。

Docker Image 小是很有好處的,可以不用不浪費(fèi)自己的SSD空間,來(lái)處理數(shù)十億字節(jié)的Docker數(shù)據(jù)。

有時(shí)候,因企業(yè)業(yè)務(wù)規(guī)模化發(fā)展,Docker Image 變得非常大。技術(shù)開發(fā)人員不得不想辦法,調(diào)整Image 大小。如何不斷優(yōu)化應(yīng)用,最終讓Image 大小減少到原來(lái)的一半?
第一步,Image 分層。使用Ubuntu作為基礎(chǔ)鏡像,搭建一個(gè) Java運(yùn)行環(huán)境。如果你有相關(guān)應(yīng)用,還要整合第三方的結(jié)果檢查工具。比如:安裝Mono,通過(guò)NPM安裝 TSLint和 ESLint,以便于我們獲得更大的鏡像處理能力。

第二步,核查BUG。之前,Image 的大小為1GB大。然而,在一次常規(guī)的拉取中,技術(shù)人員希望下載的數(shù)據(jù)量與源數(shù)據(jù)大小大相同,因?yàn)榛綢mage (Ubuntu、Java、…)還要保持穩(wěn)定。但我的控制臺(tái)顯示,出現(xiàn)了異樣:

怎么調(diào)整Docker里面的Image大小

貌似有數(shù)據(jù)被多次下載。因?yàn)檫@是最后一層,所以這些都是真正的分發(fā)文件。檢查Dockerfile后發(fā)現(xiàn),所有目錄都是經(jīng)過(guò)編輯的。在傳統(tǒng)的部署設(shè)置中,安全的操作方式是,Docker必須添加一個(gè)新的映鏡像層,并且包含所有分發(fā)文件以及所有權(quán)信息。
在實(shí)際的Docker構(gòu)建之前,通過(guò)調(diào)整所有權(quán)信息,很容易擺脫chown調(diào)用,從而讓最終的Image 節(jié)省了300MB。

第三步,繼續(xù)刪減字節(jié)。文件產(chǎn)生的大小是670 MB,這只是開始,還有一定的刪減空間。當(dāng)OpenJDK被用于Java運(yùn)行時(shí),它附帶了一些開發(fā)和GUI工具。把沒有用的OpenJRE替換掉,可以立即節(jié)省將近100 MB的內(nèi)存。然后運(yùn)行StyleCop,并從Mono中的 .NET PDB 文件中閱讀信息。Mono已經(jīng)被安裝在mono-complete 包中,通過(guò)強(qiáng)依賴關(guān)系,例如通過(guò)一個(gè)完整的MonoDevelop,來(lái)實(shí)現(xiàn)更多兆字節(jié)的刪減。不管是ESLint,還是TSLint,都只是在NodeJS運(yùn)行時(shí)才能啟動(dòng)。

最終,我們把所有應(yīng)用分別添加到Docker Image中,圖像大小由1GB減少到480MB。

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“怎么調(diào)整Docker里面的Image大小”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI