日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

如何將Docker的構建時間減少40%

來源: 責編: 時間:2023-11-06 17:19:00 292觀看
導讀作者丨Niels Claeys編譯丨諾亞出品 | 51CTO技術棧(微信號:blog51cto)與許多公司類似,我們為產品中使用的所有組件構建docker映像。隨著時間的推移,其中一些映像變得越來越大,我們的CI構建花費的時間也越來越長。我的目標是C

作者丨Niels Claeys9I428資訊網——每日最新資訊28at.com

編譯丨諾亞9I428資訊網——每日最新資訊28at.com

出品 | 51CTO技術棧(微信號:blog51cto)9I428資訊網——每日最新資訊28at.com

9I428資訊網——每日最新資訊28at.com

與許多公司類似,我們為產品中使用的所有組件構建docker映像。隨著時間的推移,其中一些映像變得越來越大,我們的CI構建花費的時間也越來越長。我的目標是CI構建不超過5分鐘——差不多是喝杯咖啡休息的理想時間。如果構建花費的時間超過這個時間,就會降低開發人員的工作效率。9I428資訊網——每日最新資訊28at.com

9I428資訊網——每日最新資訊28at.com

造成生產力損失的原因是:9I428資訊網——每日最新資訊28at.com

1、開發人員需要等待構建完成,從而浪費時間。9I428資訊網——每日最新資訊28at.com

2、開發人員開始做一些新的東西,并在晚些時候再回來做。切換必然耗時,這通常也會導致效率低下。9I428資訊網——每日最新資訊28at.com

9I428資訊網——每日最新資訊28at.com

圖片圖片9I428資訊網——每日最新資訊28at.com

9I428資訊網——每日最新資訊28at.com

在這篇文章中,我想說明我們應用的2個小變化,兩者極大地改善了我們的構建時間。當然,在關注這些改進之前,請確保你已經遵循編寫dockerfile的最佳實踐,比如盡量減少層數;使用多級構建;使用最小的基礎圖像等等。9I428資訊網——每日最新資訊28at.com

1、Buildkit vs Buildx  

9I428資訊網——每日最新資訊28at.com

讓我們從解釋Buildkit和Buildx開始,因為這兩個術語經常互換使用,但它們并不相同。9I428資訊網——每日最新資訊28at.com

9I428資訊網——每日最新資訊28at.com

Builkit

Buildkit是經過改進的后端,用來取代舊的Docker構建器。它在2018年打包在Docker中,并成為docker engine 23.0的默認構建器。   9I428資訊網——每日最新資訊28at.com

9I428資訊網——每日最新資訊28at.com

它提供了許多有趣的功能:9I428資訊網——每日最新資訊28at.com

  • 改進的緩存功能
  • 并行構建不同的層
  • 延遲拉取基礎鏡像(≥Buildkit 0.9)

在使用Buildkit時,你很快就會注意到docker構建命令的輸出看起來更清晰、更結構化。9I428資訊網——每日最新資訊28at.com

9I428資訊網——每日最新資訊28at.com

在docker版本低于23.0的情況下使用Buildkit的典型方法是設置Buildkit參數。如下所示:9I428資訊網——每日最新資訊28at.com

9I428資訊網——每日最新資訊28at.com

DOCKER_BUILDKIT=1 docker build --platform linux/amd64 . -t someImage:someVersionDOCKER_BUILDKIT=1 docker push someImage:someVersion

9I428資訊網——每日最新資訊28at.com

Buildx

Buildx是Docker的一個插件,它使你能夠在Docker中使用Buildkit的全部潛力。之所以創建它,是因為Buildkit支持許多新的配置選項,這些選項不能全部以向后兼容的方式集成到docker構建命令中。9I428資訊網——每日最新資訊28at.com

9I428資訊網——每日最新資訊28at.com

除了構建鏡像之外,Buildx還支持管理多個構建器。在CI中,這對于定義具有不同配置的作用域環境非常有用,因為它們不會修改共享Docker守護進程。9I428資訊網——每日最新資訊28at.com

9I428資訊網——每日最新資訊28at.com

你可以像下面這樣開始使用Buildx:9I428資訊網——每日最新資訊28at.com

9I428資訊網——每日最新資訊28at.com

docker buildx create --bootstrap --name builderdocker buildx use builder

2、受益于遠程緩存

9I428資訊網——每日最新資訊28at.com

加快構建速度的第一種方法是在遠程注冊表中緩存鏡像。這樣,即使在不同的機器上執行構建,也可以從構建緩存中獲益,這是CI中的典型情況。作為一種解決方法,許多人在構建新映像版本之前提取了映像的最新版本。這樣做的好處是,你可以緩存未更改的圖層,而代價是最初提取完整的圖像。拉取完整的圖像可能需要一段時間,但也不能保證圖層可以被重用。為了說明這一點,我們使用了以下命令:9I428資訊網——每日最新資訊28at.com

9I428資訊網——每日最新資訊28at.com

圖片圖片9I428資訊網——每日最新資訊28at.com

9I428資訊網——每日最新資訊28at.com

使用Buildx,你可以將緩存信息存儲在遠程位置(例如容器注冊表、blob存儲等)。構建器檢查給定層是否已經存在,如果是這種情況,它將重用它而不是再次創建它。這甚至可以在不拉動本地圖層的情況下完成。為了從這個機制中受益,我們將之前的命令修改為:   9I428資訊網——每日最新資訊28at.com

9I428資訊網——每日最新資訊28at.com

圖片圖片9I428資訊網——每日最新資訊28at.com

9I428資訊網——每日最新資訊28at.com

模式“max”意味著我們將存儲每一層的構建信息,甚至是生成圖像中未使用的層(例如,當使用多階段構建時)。默認模式下使用“min”,它只存儲最終映像中存在的層的構建信息。9I428資訊網——每日最新資訊28at.com

9I428資訊網——每日最新資訊28at.com

緩存的一個特殊情況是“內聯”存儲緩存數據,這意味著它將與圖像一起緩存。當使用Buildkit而不使用Buildx時,也支持此選項。它是最容易開始的,但在使用多階段構建時就比較棘手了,而且它沒有在工件輸出和緩存之間提供明確的分離。內聯存儲緩存數據的命令如下:9I428資訊網——每日最新資訊28at.com

9I428資訊網——每日最新資訊28at.com

圖片圖片9I428資訊網——每日最新資訊28at.com

3、添加文件到Docker鏡像的新方法

9I428資訊網——每日最新資訊28at.com

Docker引入了新的dockerfile編寫語法,即:9I428資訊網——每日最新資訊28at.com

#syntax= docker /dockerfile:1.4。它支持COPY和ADD命令的額外鏈接選項。9I428資訊網——每日最新資訊28at.com

9I428資訊網——每日最新資訊28at.com

以前,當你使用COPY或ADD命令時,構建器會創建一個新快照,它將新文件與現有文件系統合并。其結果是,在執行此操作之前,父層都需要存在,否則目標目錄可能還不存在。最后,你的映像(構建命令的結果)將由每個層的tarball組成,其中包含各個快照之間的差異。9I428資訊網——每日最新資訊28at.com

9I428資訊網——每日最新資訊28at.com

圖片圖片9I428資訊網——每日最新資訊28at.com

9I428資訊網——每日最新資訊28at.com

當使用link選項時,新文件將被放入它們自己的快照中,而不依賴于以前的層。鏈接的文件存儲在它們自己的tarball中,不同的tarball被鏈接在一起,不依賴于現有的文件系統,如下圖所示。9I428資訊網——每日最新資訊28at.com

9I428資訊網——每日最新資訊28at.com

圖片9I428資訊網——每日最新資訊28at.com

https://www.docker.com/blog/image-rebase-and-improved-remote-cache-support-in-new-buildkit/9I428資訊網——每日最新資訊28at.com

9I428資訊網——每日最新資訊28at.com

圖片圖片9I428資訊網——每日最新資訊28at.com

9I428資訊網——每日最新資訊28at.com

主要優點是文件不再依賴于以前的層。只要文件沒有改變,即使父層改變了,層也可以被重用。9I428資訊網——每日最新資訊28at.com

9I428資訊網——每日最新資訊28at.com

此外,這還可以提高構建的速度,因為現在可以并行執行多層復制數據。9I428資訊網——每日最新資訊28at.com

4、結論

9I428資訊網——每日最新資訊28at.com

本文描述了我們在優化CI管道后獲得的一些新見解。我討論了2個小的變化,導致我們的整體docker構建時間減少了40%:其一,遠程存儲構建緩存信息;其二,在添加、復制文件到docker鏡像時使用link選項。9I428資訊網——每日最新資訊28at.com

9I428資訊網——每日最新資訊28at.com

參考鏈接:https://medium.com/datamindedbe/how-we-reduced-our-docker-build-times-by-40-afea7b7f5fe79I428資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-17253-0.html如何將Docker的構建時間減少40%

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: Go 語言高級網絡編程

下一篇: 為什么不推薦使用Python原生日志庫?

標簽:
  • 熱門焦點
Top 主站蜘蛛池模板: 武乡县| 和田市| 安多县| 福清市| 安新县| 揭东县| 卢湾区| 德清县| 临夏县| 土默特左旗| 象山县| 巩义市| 玉树县| 潮安县| 班戈县| 于田县| 潼关县| 保定市| 霍林郭勒市| 岚皋县| 富平县| 资阳市| 云阳县| 云南省| 连南| 通州区| 昌吉市| 永平县| 黔西县| 韶关市| 常熟市| 司法| 华坪县| 哈尔滨市| 青河县| 舞阳县| 巍山| 苏尼特右旗| 泽州县| 芜湖市| 大埔县|