共計 1430 個字符,預(yù)計需要花費 4 分鐘才能閱讀完成。
這篇文章主要介紹了怎么調(diào)整 Docker 里面的 Image 大小,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓丸趣 TV 小編帶著大家一起了解一下。
Docker 給開發(fā)者帶來的最直接好處是,可以打包他們的應(yīng)用,將所有應(yīng)用都捆綁在一個封套中,然后發(fā)布到任何流行的 Linux 機器上。并且,Docker 能實現(xiàn)虛擬化,各種應(yīng)用之間不需要任何接口。也就是,我們常說的“開箱即用”,無需大量安裝或者配置相關(guān)的軟件、硬件等。
而 Docker Image 就是 Docker 鏡像。Docker 鏡像是一個只讀的模板。比如一個鏡像可以包含 Ubuntu 系統(tǒng)以及安裝在 Ubuntu 上的 Apache Web 服務(wù)器和你自己的應(yīng)用。鏡像是用來創(chuàng)建容器的。Docker 提供了一個簡單的方式用以創(chuàng)建新的鏡像或者更新現(xiàn)存的鏡像,甚至你可以下載其他地方提供的鏡像。
由于 Docker 使用一個統(tǒng)一文件系統(tǒng),Docker 鏡像其實就是一堆文件的集合,并不是像 VM 那樣的是一個操作系統(tǒng)。鏡像可以簡單到只有一個程序文件,比如如果你寫了一個簡單的 hello world 程序放到一個空的鏡像中,那么整個鏡像的大小,就是你編譯后的二進制文件的大小。
Docker Image 小是很有好處的,可以不用不浪費自己的 SSD 空間,來處理數(shù)十億字節(jié)的 Docker 數(shù)據(jù)。
有時候,因企業(yè)業(yè)務(wù)規(guī)模化發(fā)展,Docker Image 變得非常大。技術(shù)開發(fā)人員不得不想辦法,調(diào)整 Image 大小。如何不斷優(yōu)化應(yīng)用,最終讓 Image 大小減少到原來的一半?
第一步,Image 分層。使用 Ubuntu 作為基礎(chǔ)鏡像,搭建一個 Java 運行環(huán)境。如果你有相關(guān)應(yīng)用,還要整合第三方的結(jié)果檢查工具。比如:安裝 Mono,通過 NPM 安裝 TSLint 和 ESLint,以便于我們獲得更大的鏡像處理能力。
第二步,核查 BUG。之前,Image 的大小為 1GB 大。然而,在一次常規(guī)的拉取中,技術(shù)人員希望下載的數(shù)據(jù)量與源數(shù)據(jù)大小大相同,因為基本 Image (Ubuntu、Java、…) 還要保持穩(wěn)定。但我的控制臺顯示,出現(xiàn)了異樣:
貌似有數(shù)據(jù)被多次下載。因為這是最后一層,所以這些都是真正的分發(fā)文件。檢查 Dockerfile 后發(fā)現(xiàn),所有目錄都是經(jīng)過編輯的。在傳統(tǒng)的部署設(shè)置中,安全的操作方式是,Docker 必須添加一個新的映鏡像層,并且包含所有分發(fā)文件以及所有權(quán)信息。
在實際的 Docker 構(gòu)建之前,通過調(diào)整所有權(quán)信息,很容易擺脫 chown 調(diào)用,從而讓最終的 Image 節(jié)省了 300MB。
第三步,繼續(xù)刪減字節(jié)。文件產(chǎn)生的大小是 670 MB,這只是開始,還有一定的刪減空間。當 OpenJDK 被用于 Java 運行時,它附帶了一些開發(fā)和 GUI 工具。把沒有用的 OpenJRE 替換掉,可以立即節(jié)省將近 100 MB 的內(nèi)存。然后運行 StyleCop,并從 Mono 中的 .NET PDB 文件中閱讀信息。Mono 已經(jīng)被安裝在 mono-complete 包中,通過強依賴關(guān)系,例如通過一個完整的 MonoDevelop,來實現(xiàn)更多兆字節(jié)的刪減。不管是 ESLint,還是 TSLint,都只是在 NodeJS 運行時才能啟動。
最終,我們把所有應(yīng)用分別添加到 Docker Image 中,圖像大小由 1GB 減少到 480MB。
感謝你能夠認真閱讀完這篇文章,希望丸趣 TV 小編分享的“怎么調(diào)整 Docker 里面的 Image 大小”這篇文章對大家有幫助,同時也希望大家多多支持丸趣 TV,關(guān)注丸趣 TV 行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!