作者:安樹博 青云科技 PaaS 中間件開發(fā)工程師
從事 PaaS 中間件服務(wù)(Redis/Memcached 等)開發(fā)工作,熱衷對 NoSQL 數(shù)據(jù)庫領(lǐng)域內(nèi)技術(shù)的學(xué)習(xí)與研究
- 官方鏡像版本無法滿足功能需求
- 鏡像內(nèi)存在的漏洞無法規(guī)避
- 傳統(tǒng)構(gòu)建方式鏡像體積越來越大
你在使用鏡像時是否遇到過以上問題呢侦副?
隨著云原生技術(shù)的普及拘领,業(yè)務(wù)負(fù)載上容器就越來越普遍。很多企業(yè)已經(jīng)碰到路呜,或正在解決以上這些容器鏡像的問題蝗肪。隨著云原生業(yè)務(wù)覆蓋范圍越來越大词顾、越來越貼近業(yè)務(wù)核心,對于鏡像安全和可維護(hù)等要求也越來越高垃它。
那么構(gòu)建鏡像的方式如何選型就需要根據(jù)應(yīng)用的具體情況來做判斷鲜屏。本文將對目前常見的幾種鏡像構(gòu)建方式進(jìn)行分析,幫您判斷国拇。
主流鏡像構(gòu)建方式
傳統(tǒng)鏡像
不特指某一鏡像洛史,本文中代指 Debian/Centos/Ubuntu 等系統(tǒng)下構(gòu)建的鏡像,對于 C/C++ 編寫的復(fù)雜程序酱吝,這是最常用的一種構(gòu)建方式也殖。
Alpine[1]
Alpine 操作系統(tǒng)是一個面向安全的輕型 Linux 發(fā)行版。通過 Alpine 構(gòu)建的鏡像容量非常小务热,通常 5 MB 左右忆嗜,包管理機(jī)制友好。具有下載速度快崎岂,安全性提高等優(yōu)點(diǎn)捆毫。
Distroless[2]
源自于 Google 的鏡像,比 Alpine 更精簡冲甘。除了基礎(chǔ)文件其它都不包含绩卤,甚至沒有 Shell。大多數(shù) Operator 都是基于此系列基礎(chǔ)鏡像編譯损合。
選型對比
以 Redis 基礎(chǔ)鏡像構(gòu)建為例省艳,將三種構(gòu)建方式在漏洞修復(fù)、Shell 支持嫁审、C 庫跋炕、鏡像體積等方面進(jìn)行對比。
Alpine | Distroless | 傳統(tǒng)鏡像 | 備注 | |
---|---|---|---|---|
漏洞修復(fù) | 快 | 極快 | 一般 | Debian 11 更新到最新 cve 漏洞還有 80 多個律适,Alpine 和 Distroless 最新版全部修復(fù)辐烂。 |
Shell | sh | 無 | bash | Distroless 沒有 Shell 也就沒辦法進(jìn)入鏡像去管理和后期維護(hù)。 |
C 庫 | musl | 可選 | glibc | Alpine 的 C 庫是 musl捂贿,雖然理論上和 glibc 差異不大, 但 C/C++ 程序在此編譯可能會有不同纠修,要進(jìn)行充分測試。 |
鏡像體積 | 約 5MB | 約 2MB | 30MB - 500MB | |
包管理器 | apk | 無 | apt/yum | Alpine 的 apk 包管理器包含軟件較少, 只有 1000 多個厂僧,且都是精簡版扣草,但覆蓋了常用軟件。 Distroless 沒有管理器,需要自己找依賴文件拷貝到鏡像里辰妙。 傳統(tǒng)鏡像 apt/yum 軟件豐富鹰祸,但比較臃腫。 |
選型決策樹
根據(jù)上面總結(jié)的三種方式的異同密浑,再根據(jù)用戶需求抽象成選型決策樹蛙婴,可根據(jù)判斷做出相應(yīng)的構(gòu)建方式。
選型總結(jié)
- 如果需要進(jìn)入鏡像管理維護(hù)(Shell 工具)尔破,不推薦 Distroless 構(gòu)建街图;
- 如果需要考慮跨平臺并減少非必要依賴庫,推薦 Alpine 或 Distroless 構(gòu)建懒构;
- 如果原應(yīng)用是基于 C/C++ 編寫且很復(fù)雜餐济,建議使用傳統(tǒng)鏡像;
- 如果基于 Go 編寫胆剧,傳統(tǒng)鏡像可以排除颤介。
下一期,我們將演示如何使用 Alpine 構(gòu)建一個 Redis 鏡像赞赖,盡情期待滚朵!
參考引用
- Alpine www.alpinelinux.org
- Distroless https://github.com/GoogleContainerTools/distroless