最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

如何將Docker的構(gòu)建時(shí)間減少40%(推薦)

 更新時(shí)間:2023年11月23日 11:22:21   作者:沖浪中臺(tái)  
這篇文章主要介紹了如何將Docker的構(gòu)建時(shí)間減少40%,本文描述了我們?cè)趦?yōu)化CI管道后獲得的一些新見(jiàn)解,需要的朋友可以參考下

與許多公司類(lèi)似,我們?yōu)楫a(chǎn)品中使用的所有組件構(gòu)建docker映像。隨著時(shí)間的推移,其中一些映像變得越來(lái)越大,我們的CI構(gòu)建花費(fèi)的時(shí)間也越來(lái)越長(zhǎng)。我的目標(biāo)是CI構(gòu)建不超過(guò)5分鐘——差不多是喝杯咖啡休息的理想時(shí)間。如果構(gòu)建花費(fèi)的時(shí)間超過(guò)這個(gè)時(shí)間,就會(huì)降低開(kāi)發(fā)人員的工作效率。

造成生產(chǎn)力損失的原因是:

1、開(kāi)發(fā)人員需要等待構(gòu)建完成,從而浪費(fèi)時(shí)間。

2、開(kāi)發(fā)人員開(kāi)始做一些新的東西,并在晚些時(shí)候再回來(lái)做。切換必然耗時(shí),這通常也會(huì)導(dǎo)致效率低下。

在這篇文章中,我想說(shuō)明我們應(yīng)用的2個(gè)小變化,兩者極大地改善了我們的構(gòu)建時(shí)間。當(dāng)然,在關(guān)注這些改進(jìn)之前,請(qǐng)確保你已經(jīng)遵循編寫(xiě)dockerfile的最佳實(shí)踐,比如盡量減少層數(shù);使用多級(jí)構(gòu)建;使用最小的基礎(chǔ)圖像等等。

1、Buildkit vs Buildx  

讓我們從解釋Buildkit和Buildx開(kāi)始,因?yàn)檫@兩個(gè)術(shù)語(yǔ)經(jīng)?;Q使用,但它們并不相同。

Builkit

Buildkit是經(jīng)過(guò)改進(jìn)的后端,用來(lái)取代舊的Docker構(gòu)建器。它在2018年打包在Docker中,并成為docker engine 23.0的默認(rèn)構(gòu)建器。   

它提供了許多有趣的功能:

  • 改進(jìn)的緩存功能
  • 并行構(gòu)建不同的層
  • 延遲拉取基礎(chǔ)鏡像(≥Buildkit 0.9)

在使用Buildkit時(shí),你很快就會(huì)注意到docker構(gòu)建命令的輸出看起來(lái)更清晰、更結(jié)構(gòu)化。

在docker版本低于23.0的情況下使用Buildkit的典型方法是設(shè)置Buildkit參數(shù)。如下所示:

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

Buildx

Buildx是Docker的一個(gè)插件,它使你能夠在Docker中使用Buildkit的全部潛力。之所以創(chuàng)建它,是因?yàn)锽uildkit支持許多新的配置選項(xiàng),這些選項(xiàng)不能全部以向后兼容的方式集成到docker構(gòu)建命令中。

除了構(gòu)建鏡像之外,Buildx還支持管理多個(gè)構(gòu)建器。在CI中,這對(duì)于定義具有不同配置的作用域環(huán)境非常有用,因?yàn)樗鼈儾粫?huì)修改共享Docker守護(hù)進(jìn)程。

你可以像下面這樣開(kāi)始使用Buildx:

2、受益于遠(yuǎn)程緩存

加快構(gòu)建速度的第一種方法是在遠(yuǎn)程注冊(cè)表中緩存鏡像。這樣,即使在不同的機(jī)器上執(zhí)行構(gòu)建,也可以從構(gòu)建緩存中獲益,這是CI中的典型情況。作為一種解決方法,許多人在構(gòu)建新映像版本之前提取了映像的最新版本。這樣做的好處是,你可以緩存未更改的圖層,而代價(jià)是最初提取完整的圖像。拉取完整的圖像可能需要一段時(shí)間,但也不能保證圖層可以被重用。為了說(shuō)明這一點(diǎn),我們使用了以下命令:

使用Buildx,你可以將緩存信息存儲(chǔ)在遠(yuǎn)程位置(例如容器注冊(cè)表、blob存儲(chǔ)等)。構(gòu)建器檢查給定層是否已經(jīng)存在,如果是這種情況,它將重用它而不是再次創(chuàng)建它。這甚至可以在不拉動(dòng)本地圖層的情況下完成。為了從這個(gè)機(jī)制中受益,我們將之前的命令修改為:   

模式“max”意味著我們將存儲(chǔ)每一層的構(gòu)建信息,甚至是生成圖像中未使用的層(例如,當(dāng)使用多階段構(gòu)建時(shí))。默認(rèn)模式下使用“min”,它只存儲(chǔ)最終映像中存在的層的構(gòu)建信息。

緩存的一個(gè)特殊情況是“內(nèi)聯(lián)”存儲(chǔ)緩存數(shù)據(jù),這意味著它將與圖像一起緩存。當(dāng)使用Buildkit而不使用Buildx時(shí),也支持此選項(xiàng)。它是最容易開(kāi)始的,但在使用多階段構(gòu)建時(shí)就比較棘手了,而且它沒(méi)有在工件輸出和緩存之間提供明確的分離。內(nèi)聯(lián)存儲(chǔ)緩存數(shù)據(jù)的命令如下:

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

Docker引入了新的dockerfile編寫(xiě)語(yǔ)法,即:

#syntax= docker /dockerfile:1.4。它支持COPY和ADD命令的額外鏈接選項(xiàng)。

以前,當(dāng)你使用COPY或ADD命令時(shí),構(gòu)建器會(huì)創(chuàng)建一個(gè)新快照,它將新文件與現(xiàn)有文件系統(tǒng)合并。其結(jié)果是,在執(zhí)行此操作之前,父層都需要存在,否則目標(biāo)目錄可能還不存在。最后,你的映像(構(gòu)建命令的結(jié)果)將由每個(gè)層的tarball組成,其中包含各個(gè)快照之間的差異。

圖片

當(dāng)使用link選項(xiàng)時(shí),新文件將被放入它們自己的快照中,而不依賴于以前的層。鏈接的文件存儲(chǔ)在它們自己的tarball中,不同的tarball被鏈接在一起,不依賴于現(xiàn)有的文件系統(tǒng),如下圖所示。

https://www.docker.com/blog/image-rebase-and-improved-remote-cache-support-in-new-buildkit/ 

主要優(yōu)點(diǎn)是文件不再依賴于以前的層。只要文件沒(méi)有改變,即使父層改變了,層也可以被重用。

此外,這還可以提高構(gòu)建的速度,因?yàn)楝F(xiàn)在可以并行執(zhí)行多層復(fù)制數(shù)據(jù)。

4、結(jié)論

本文描述了我們?cè)趦?yōu)化CI管道后獲得的一些新見(jiàn)解。我討論了2個(gè)小的變化,導(dǎo)致我們的整體docker構(gòu)建時(shí)間減少了40%:其一,遠(yuǎn)程存儲(chǔ)構(gòu)建緩存信息;其二,在添加、復(fù)制文件到docker鏡像時(shí)使用link選項(xiàng)。

到此這篇關(guān)于如何將Docker的構(gòu)建時(shí)間減少40%的文章就介紹到這了,更多相關(guān)Docker構(gòu)建時(shí)間減少40%內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Docker容器服務(wù)編排利器詳解

    Docker容器服務(wù)編排利器詳解

    這篇文章主要介紹了Docker容器服務(wù)編排利器,主要包括使用使用Docker?Compose必要性及定義及一些Docker?Compose應(yīng)用參考資料,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-07-07
  • Dockerfile文本文件使用方法實(shí)例解析

    Dockerfile文本文件使用方法實(shí)例解析

    這篇文章主要介紹了Dockerfile文本文件使用方法實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • docker-compose使用volumes注意項(xiàng)介紹

    docker-compose使用volumes注意項(xiàng)介紹

    這篇文章主要介紹了docker-compose使用volumes注意項(xiàng),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • 如何解決docker logs無(wú)法實(shí)時(shí)輸出腳本打印的內(nèi)容

    如何解決docker logs無(wú)法實(shí)時(shí)輸出腳本打印的內(nèi)容

    這篇文章主要介紹了如何解決docker logs無(wú)法實(shí)時(shí)輸出腳本打印的內(nèi)容問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • 在Docker容器中部署MSSQL

    在Docker容器中部署MSSQL

    這篇文章介紹了在Docker容器中部署MSSQL的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • Docker常用的清除容器鏡像命令小結(jié)

    Docker常用的清除容器鏡像命令小結(jié)

    這篇文章主要給大家總結(jié)了Docker常用的清除容器鏡像命令,相信對(duì)大家的學(xué)習(xí)和工作具有一定的參考借鑒價(jià)值,有需要的朋友們可以參考借鑒,下面來(lái)一起看看吧。
    2016-12-12
  • 使用Docker部署MongoDB?Cluster實(shí)踐

    使用Docker部署MongoDB?Cluster實(shí)踐

    本文詳細(xì)介紹了如何使用Docker和mongoDB官方鏡像搭建一個(gè)四節(jié)點(diǎn)的MongoDB分片集群,包括環(huán)境準(zhǔn)備、配置文件設(shè)置、啟動(dòng)節(jié)點(diǎn)、初始化Replica?Set和Shard,以及增加Shard節(jié)點(diǎn)和配置Sharding,最后,總結(jié)了整個(gè)搭建過(guò)程
    2026-03-03
  • docker阿里云鏡像安裝tomcat無(wú)法訪問(wèn)的解決過(guò)程

    docker阿里云鏡像安裝tomcat無(wú)法訪問(wèn)的解決過(guò)程

    文章講述了在Linux系統(tǒng)中,由于阿里云鏡像默認(rèn)是最小的,不包含webapps目錄,導(dǎo)致無(wú)法直接使用Tomcat,通過(guò)在Docker容器中安裝Tomcat后,將webapps.dist目錄中的文件復(fù)制到webapps目錄可以解決這個(gè)問(wèn)題
    2025-11-11
  • 防火墻導(dǎo)致docker pull失敗問(wèn)題及解決

    防火墻導(dǎo)致docker pull失敗問(wèn)題及解決

    因網(wǎng)絡(luò)防火墻檢測(cè)到鏡像中的敏感文件(如passwd)導(dǎo)致docker pull卡頓或斷連,解決方法包括調(diào)整防火墻策略或修改網(wǎng)卡MTU值以規(guī)避關(guān)鍵字過(guò)濾
    2025-09-09
  • docker 可用鏡像服務(wù)地址的使用(親測(cè)可用)

    docker 可用鏡像服務(wù)地址的使用(親測(cè)可用)

    Docker可用的鏡像服務(wù)地址通常指的是Docker鏡像倉(cāng)庫(kù)的地址,用于拉取和推送鏡像,本文就來(lái)介紹了docker 可用鏡像服務(wù)地址的使用,感興趣的可以了解一下
    2024-10-10

最新評(píng)論

保康县| 轮台县| 隆昌县| 肃北| 辉南县| 武冈市| 邛崃市| 大兴区| 十堰市| 峨眉山市| 阜城县| 泰州市| 涿鹿县| 巴楚县| 华阴市| 宜都市| 佛山市| 金山区| 桃园县| 福贡县| 五莲县| 陇南市| 通许县| 光山县| 兰坪| 屏东县| 聂拉木县| 上饶市| 洛南县| 金堂县| 黔南| 涞源县| 锡林郭勒盟| 开江县| 鄂伦春自治旗| 灵川县| 出国| 萍乡市| 罗甸县| 兴和县| 兖州市|