亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

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

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

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

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

1、Buildkit vs Buildx  

讓我們從解釋Buildkit和Buildx開始,因為這兩個術(shù)語經(jīng)?;Q使用,但它們并不相同。

Builkit

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

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

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

在使用Buildkit時,你很快就會注意到docker構(gòu)建命令的輸出看起來更清晰、更結(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的一個插件,它使你能夠在Docker中使用Buildkit的全部潛力。之所以創(chuàng)建它,是因為Buildkit支持許多新的配置選項,這些選項不能全部以向后兼容的方式集成到docker構(gòu)建命令中。

除了構(gòu)建鏡像之外,Buildx還支持管理多個構(gòu)建器。在CI中,這對于定義具有不同配置的作用域環(huán)境非常有用,因為它們不會修改共享Docker守護進程。

你可以像下面這樣開始使用Buildx:

2、受益于遠程緩存

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

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

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

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

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

Docker引入了新的dockerfile編寫語法,即:

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

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

圖片

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

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

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

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

4、結(jié)論

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

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

相關(guān)文章

  • Docker部署Apollo的實現(xiàn)步驟

    Docker部署Apollo的實現(xiàn)步驟

    眾所周知分布式配置中心在目前也可以說是企業(yè)中項目的標(biāo)配了,本文主要介紹了Docker 部署Apollo的實現(xiàn)步驟,具有一定的參考價值,感興趣的可以了解一下
    2024-02-02
  • Docker鏡像pull失敗兩種解決辦法小結(jié)

    Docker鏡像pull失敗兩種解決辦法小結(jié)

    有時候我們在拉取Docker鏡像的過程中會遇到一些問題,這篇文章主要介紹了Docker鏡像pull失敗兩種解決辦法的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2025-03-03
  • docker容器中無法獲取宿主機hostname的解決方案

    docker容器中無法獲取宿主機hostname的解決方案

    這篇文章主要介紹了docker容器中無法獲取宿主機hostname的解決方案,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • Docker使用run命令部署Redis的完整指南

    Docker使用run命令部署Redis的完整指南

    Redis作為當(dāng)今最流行的內(nèi)存數(shù)據(jù)庫和緩存解決方案之一,與 Docker 容器技術(shù)的結(jié)合為開發(fā)者提供了極致的部署靈活性和環(huán)境一致性,下面我們來看看如何使用run命令部署Redis吧
    2025-03-03
  • IDEA通過Docker插件部署SpringBoot項目的過程詳解

    IDEA通過Docker插件部署SpringBoot項目的過程詳解

    在idea中如何通過Docker插件部署SpringBoot項目呢?很多朋友在配置過程中走了很多誤區(qū),今天小編給大家分享一篇教程關(guān)于IDEA通過Docker插件部署SpringBoot項目的過程,感興趣的朋友一起看看吧
    2021-11-11
  • 使用DockerFile構(gòu)建鏡像與鏡像上傳的實現(xiàn)步驟

    使用DockerFile構(gòu)建鏡像與鏡像上傳的實現(xiàn)步驟

    本文主要介紹了使用DockerFile構(gòu)建鏡像與鏡像上傳的實現(xiàn)步驟,使用Dockerfile好處是自動化構(gòu)建,確保環(huán)境的一致性和可重復(fù)性,跟蹤構(gòu)建過程的演化等,文中通過圖文講解的非常詳細,需要的朋友可以參考下
    2024-02-02
  • Docker服務(wù)遷移的實現(xiàn)

    Docker服務(wù)遷移的實現(xiàn)

    本文詳細介紹了如何備份和遷移Docker服務(wù)數(shù)據(jù),包括停止Docker服務(wù)、備份Docker數(shù)據(jù)和DockerCompose文件,使用SCP或Rsync傳輸備份文件,以及在新服務(wù)器上恢復(fù)Docker數(shù)據(jù)和設(shè)置權(quán)限,文中提供了詳細的命令和步驟,確保數(shù)據(jù)遷移過程順利進行
    2024-10-10
  • docker容器設(shè)置時區(qū)的幾種方式小結(jié)

    docker容器設(shè)置時區(qū)的幾種方式小結(jié)

    Docker的基礎(chǔ)鏡像設(shè)置大多是Etc/UTC,也就是標(biāo)準(zhǔn)的UTC 時間,所以要簡單的調(diào)整一下,本文主要介紹了docker容器設(shè)置時區(qū)的幾種方式小結(jié),具有一定的參考價值,感興趣的可以了解一下
    2024-05-05
  • Docker復(fù)制現(xiàn)有容器的實現(xiàn)方法

    Docker復(fù)制現(xiàn)有容器的實現(xiàn)方法

    在使用Docker進行應(yīng)用開發(fā)和部署時,我們經(jīng)常需要基于現(xiàn)有的容器創(chuàng)建相似的環(huán)境,本文主要介紹了Docker復(fù)制現(xiàn)有容器的實現(xiàn)方法,具有一定的參考價值,感興趣的可以了解一下
    2024-03-03
  • docker volumes 文件映射方式

    docker volumes 文件映射方式

    這篇文章主要介紹了docker volumes 文件映射的實例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03

最新評論