国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 服務(wù)器 > Web服務(wù)器 > 正文

谷歌技術(shù)人員解決Docker鏡像體積太大問題的方法

2024-09-01 13:53:22
字體:
供稿:網(wǎng)友

虛擬機(jī)的問題

docker,鏡像

最初,大家都使用虛擬機(jī)作為軟件的運(yùn)行環(huán)境,對(duì)外提供服務(wù)。為了在虛擬機(jī)上運(yùn)行你的 Service,你不得不運(yùn)行一大堆程序:

系統(tǒng)進(jìn)程
定時(shí)任務(wù)
SSH
安裝 Agent
安裝 Bash
安裝一大堆 libs

其實(shí),你僅僅只是想讓你的 Service運(yùn)行起來,但你不得不維護(hù)一個(gè) 40GB的虛擬機(jī)。

然后你開始試用 Docker

docker,鏡像

開始試用 Docker,你毫不猶豫選擇了和之前虛擬機(jī)一樣的鏡像:Ubuntu 1404,將之前的虛機(jī)的內(nèi)容復(fù)制到了 Docker鏡像,安裝了一堆軟件,最后發(fā)現(xiàn)你的 Docker鏡像有 8GB。

谷歌的 Docker鏡像構(gòu)建實(shí)踐

找到最小的基礎(chǔ)鏡像

Alpine Linux是基于 musl和 BusyBox的操作系統(tǒng),目的是為了為用戶提供更高效的資源使用效率。它的特性是體積小,最小的 Alpine Linux體積可以只有 5MB。谷歌某些團(tuán)隊(duì)使用 Alpine Linux作為 Docker Build的基礎(chǔ)鏡像。

目的:僅僅為了運(yùn)行 Service

docker,鏡像

谷歌認(rèn)為,為了運(yùn)行一個(gè) Service,并不需要將那些無關(guān)聯(lián)的包、程序打包到容器里,換句話說,Docker鏡像里只留下需要用到的,其他的都刪除,從而得到一個(gè)最小的鏡像。這需要考慮以下幾點(diǎn):

1、程序編譯后的二進(jìn)制文件(從 Artifactory獲取)

2、程序的所有依賴(從 Artifactory獲取)

3、程序語言的運(yùn)行時(shí)(libc,JRE,node,…)

4、任何程序和 Kernel之間的中間件

其實(shí)這一切的信息,構(gòu)建工具都已經(jīng)知道。

谷歌的構(gòu)建工具 Bazel

介紹 Bazel之前,先介紹下谷歌的開發(fā)模式,對(duì)于服務(wù)器端代碼庫,谷歌的開發(fā)流程如下:

1、所有的服務(wù)器端代碼庫都在一個(gè)巨大的版本控制系統(tǒng)里

2、每個(gè)人都用 Bazel構(gòu)建軟件

3、不同的組負(fù)責(zé)源碼樹的不同部分,所有的組件都是作為 BUILD目標(biāo)來用

4、分支主要是用來管理發(fā)布,所以每個(gè)人都在最新版本上開發(fā)軟件

Bazel(https://bazel.build/)是 Google內(nèi)部用來構(gòu)建自己的服務(wù)器端軟件的工具。目前變成谷歌公司貢獻(xiàn)的一個(gè)開源項(xiàng)目,目的是幫助開發(fā)者將軟件的構(gòu)建和測(cè)試變得更快、更可靠。

docker,鏡像

從上圖可以看到,Bazel有 WORDSPACE的概念,WORDSPACE文件用來準(zhǔn)備 Docker鏡像構(gòu)建所依賴的所有材料和來源。BUILD文件用來告訴 Bazel這個(gè)鏡像應(yīng)該使用什么命令進(jìn)行構(gòu)建,以及如何構(gòu)建、如何測(cè)試。

使用 Bazel的聲明式語言: WORKSPACE和 BUILD,開發(fā)者可以用文件描述整個(gè)構(gòu)建和部署的環(huán)境。谷歌使用 Bazel進(jìn)行 Docker的構(gòu)建已經(jīng)很多年,它為谷歌帶來以下收益:

1、支持跨平臺(tái)構(gòu)建,分布式緩存,優(yōu)化依賴解析,并行構(gòu)建,增量構(gòu)建。

2、支持多語言(Java, C++, Android, iOS, Go等等)。

3、跨平臺(tái)。

4、水平擴(kuò)展和自定義擴(kuò)展。

Bazel是以下理念的奠基石:由于 Bazel需要所有的依賴都被完整地指定,我們可以預(yù)測(cè)改動(dòng)影響了哪些程序和測(cè)試,并在提交前執(zhí)行他們。

谷歌提供的 Distroless鏡像構(gòu)建文件

docker,鏡像

Distroless (https://github.com/GoogleCloudPlatform/distroless)是谷歌內(nèi)部使用的鏡像構(gòu)建文件,包括 Java、Node、Python等鏡像構(gòu)建文件,Distroless僅僅只包含運(yùn)行服務(wù)所需要的最小鏡像,不包含包管理工具、shell命令行等其他功能。

為什么你需要這些鏡像?這些鏡像是谷歌和其他大公司的最佳實(shí)踐的產(chǎn)物,經(jīng)過了漏洞掃描,鏡像會(huì)持續(xù)更新,保持安全性。

如何使用?Distroless提供的構(gòu)建鏡像的 BUILD文件,通過 Bazel可以直接進(jìn)行構(gòu)建。

谷歌為大家介紹了內(nèi)部如何解決鏡像過大的問題,以及進(jìn)行大規(guī)模并發(fā)構(gòu)建、測(cè)試所用到的構(gòu)建工具 Bazel,并且開源了 Docker鏡像構(gòu)建文件 Distroless項(xiàng)目。如果你認(rèn)為你的鏡像也存在體積太大的問題,可以參考谷歌的實(shí)踐,體驗(yàn)他們的工具。

總結(jié)

以上就是本文關(guān)于谷歌技術(shù)人員解決Docker鏡像體積太大問題的方法的全部?jī)?nèi)容,希望對(duì)大家有所幫助。

如有不足之處,歡迎留言指出。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 弥勒县| 汽车| 清镇市| 鄂州市| 托克逊县| 益阳市| 长兴县| 洮南市| 双牌县| 印江| 巴青县| 建德市| 河曲县| 南京市| 晋宁县| 托里县| 惠东县| 那曲县| 龙南县| 江安县| 铁岭县| 商城县| 正镶白旗| 论坛| 深泽县| 临猗县| 鹤庆县| 白水县| 讷河市| 即墨市| 禄劝| 湖口县| 云龙县| 东阿县| 台山市| 得荣县| 隆回县| 灌南县| 开阳县| 和顺县| 上饶县|