BuildKit: Ġawhra Moħbija ta' Docker Li Tista' Tibni Kważi Xejn
Kummenti
Mewayz Team
Editorial Team
BuildKit: Ġawhra Moħbija ta' Docker Li Tista' Tibni Kważi Xejn
Il-biċċa l-kbira tal-iżviluppaturi jafu lil Docker bħala l-ħin tar-runtime tal-kontejner li biddel kif is-software jiġi ttrasportat. Wisq inqas jafu dwar il-magna bil-kwiet humming taħt il-wiċċ ta 'kull bini modern ta' Docker — BuildKit, is-sistema ta 'bini tal-ġenerazzjoni li jmiss li ilha tbaħħir ma' Docker mill-verżjoni 18.09 u saret il-backend default f'Docker 23.0. Filwaqt li l-inġiniera jargumentaw bla tarf dwar il-konfigurazzjonijiet u l-mudelli tal-mikroservizz ta’ Kubernetes, BuildKit ilu jevolvi b’mod kostanti f’waħda mis-sistemi ta’ bini l-aktar qawwija u flessibbli fl-ekosistema DevOps. Jekk kont qed tittrattaha bħala biss docker build aktar mgħaġġla, qed tħalli kapaċità enormi fuq il-mejda. Kumpaniji li jmexxu pipelines CI/CD b'rendiment għoli naqqsu l-ħinijiet tal-bini b'50–70% sempliċement billi fehmu dak li attwalment joffri BuildKit — u dak huwa biss il-bidu.
Dak li Jagħmel BuildKit Fundamentalment Differenti Mill-Klassic Builder
Il-magna tal-bini Docker oriġinali esegwit l-istruzzjonijiet ta' Dockerfile b'mod sekwenzjali, saff wieħed kull darba, mingħajr ebda għarfien ta' x'xogħol jista' jseħħ b'mod sikur b'mod parallel. BuildKit jissostitwixxi dak il-mudell ta 'eżekuzzjoni lineari ma' graff aċikliku dirett (DAG) — graff ta 'dipendenza li jifhem liema passi tal-bini jiddependu fuq xulxin u liema le. L-istadji indipendenti jitwettqu fl-istess ħin, l-istadji mhux użati jinqabżu għal kollox, u l-bini kollu jsir deskrizzjoni dikjarattiva ta' dak li trid aktar milli sekwenza imperattiva ta' passi li trid tirreċita fl-ordni t-tajba.
Din il-bidla arkitettonika għandha konsegwenzi prattiċi li jmorru lil hinn mill-veloċità. Meta Dockerfile f'diversi stadji jikkompila Go binarju fi stadju wieħed, iniżżel id-dipendenzi Node.js f'ieħor, u jiġbor immaġini ta 'produzzjoni fit-tielet, BuildKit jista' jmexxi l-ewwel żewġ stadji simultanjament. Bini li qabel kienet tieħu erba' minuti fuq runner CI b'saħħtu issa titlesta f'inqas minn disgħin sekonda. Stripe, Shopify, u punteġġi ta 'timijiet oħra ta' inġinerija fuq skala għolja ddokumentaw qligħ simili fir-retrospettivi interni tagħhom tal-għodda. Il-mudell DAG ifisser ukoll li BuildKit jista' jiġġenera metadejta tal-bini preċiż ħafna — pedament għal karatteristiċi bħall-attestazzjonijiet tal-provenjenza u l-ġenerazzjoni ta' polza ta' materjali tas-softwer (SBOM) li huma importanti ħafna għas-sigurtà tal-katina tal-provvista.
Hemm ukoll bidla kunċettwali fil-mod kif taħdem l-invalidazzjoni tal-cache. Il-bennej klassiku invalida kull saff taħt kwalunkwe istruzzjoni mibdula. BuildKit isegwi l-hashes tal-kontenut f'kull input, għalhekk it-tibdil ta' kumment f'Dockerfile ma jonfoħx dħul ta' cache li jirrappreżenta tletin minuta ta' kumpilazzjoni. Meta l-cache tal-bini tiegħek hija d-differenza bejn loop ta' feedback ta' ħames minuti u ta' erbgħin minuta għat-tim tal-inġinerija tiegħek, din il-preċiżjoni hija importanti ħafna aktar milli jidher fil-bidu.
Bini b'ħafna pjattaformi: Kmand Wieħed, Kull Arkitettura
Il-bandiera ta' --platform ta'
BuildKit u l-integrazzjoni QEMU jittrasformaw dik li darba kienet problema koroh ta' koordinazzjoni ta' sistemi multiplu fi kmand wieħed. It-tħaddim ta' docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 . jipproduċi tliet immaġini lesti għall-produzzjoni b'mod parallel minn invokazzjoni ta' bini wieħed. Din il-kapaċità saret kritika hekk kif l-industrija taqleb lejn ARM — L-istanzi AWS Graviton3 konsistentement iwasslu 40% prestazzjoni aħjar fil-prezz fuq tagħbija tax-xogħol bħall-serving tal-web u l-ipproċessar tad-dejta, u Apple Silicon għamel ARM il-magna tal-iżvilupp default għal miljuni ta’ inġiniera.
Qabel ma mmatura l-appoġġ multi-pjattaformi ta' BuildKit, iż-żamma ta' pipelines ta' bini separati għal arkitetturi differenti kien ċentru ta' spiża reali. It-timijiet jew żammew Dockerfiles multipli, mexxew pipelines CI separati fuq runners b'arkitettura differenti, jew sempliċement bagħtu immaġini x86 kullimkien u ħallsu l-piena tal-prestazzjoni fuq l-infrastruttura ARM. B'BuildKit, inti tiddefinixxi l-bini tiegħek darba u tħalli s-sistema timmaniġġja l-kumpilazzjoni speċifika għall-arkitettura b'mod trasparenti. Proġetti tas-sadid li jeħtieġu kompilazzjoni inkroċjata, proġetti Go b'dipendenzi CGO, pakketti Python b'estensjonijiet C — BuildKit jimmaniġġja s-saff ta 'emulazzjoni mingħajr ma jeħtieġlek tifhem id-dettalji ta' kull pjattaforma fil-mira.
Il-valur prattiku tan-negozju hawnhekk jista' jitkejjel. Tim li jħaddem 200 kontenitur fuq istanzi AWS Graviton għal $ 0.04 għal kull vCPU-siegħa kontra l-ekwivalenti x86 istanza għal $ 0.056 għal kull vCPU-siegħa jiffranka bejn wieħed u ieħor $ 11,520 fis-sena għal kull 100 vCPU - purament mill-għażla tal-arkitettura t-tajba. Li tagħmel dik l-għażla aċċessibbli mingħajr sforz ta' inġinerija mill-ġdid huwa eżattament it-tip ta' ottimizzazzjoni tal-infrastruttura li tħallas għaliha nfisha immedjatament.
Ġestjoni Sigrieta Mingħajr Tnixxija Fis-Saffi tal-Immaġini
Waħda mill-aktar karatteristiċi ta' BuildKit sottovalutati hija l-API tas-sigrieti tagħha. Il-bennej klassiku Docker ma kellu l-ebda mod nadif biex jgħaddi kredenzjali f'bini mingħajr dawk il-kredenzjali potenzjalment jispiċċaw f'saff ta 'immaġni. L-iżviluppaturi ħadmu madwar dan b'bini f'diversi stadji, struzzjonijiet ARG, u ordni bir-reqqa - iżda r-riskju li aċċidentalment ħami ċavetta API jew ċavetta SSH privata f'immaġni mibgħuta baqa 'għoli skomdu. L-iskaners tas-sigurtà normalment isibu kredenzjali kkodifikati iebes f'immaġini ta' kontenituri ppubblikati f'reġistri pubbliċi, u ħafna minn dawk it-tnixxijiet jittraċċaw direttament lura għal immaniġġjar sigriet goff waqt il-bini.
--sigriet ta' BuildKit timmonta data sensittiva fl-ambjent tal-bini bħala passaġġ temporanju tas-sistema tal-fajls li teżisti biss għat-tul tal-istruzzjoni speċifika RUN li teħtieġha u qatt ma tmiss l-ebda saff tal-immaġni. Istruzzjoni Dockerfile bħal RUN --mount=type=secret,id=npmrc cat /run/secrets/npmrc > ~/.npmrc && npm install tagħti lill-proċess tal-bini aċċess għal kredenzjali privati npm mingħajr ma dawk il-kredenzjali qatt jidhru fl-immaġni finali jew f'xi saff intermedju. L-istess mudell jaħdem għal kredenzjali PyPI, settings Maven, ċwievet SSH għal repożitorji Git privati, u kwalunkwe materjal sensittiv ieħor li jeħtieġ il-proċess tal-bini tiegħek.
Għal timijiet li jibnu softwer li jolqot industriji regolati — pjattaformi tal-kura tas-saħħa, prodotti fintech, softwer HR — id-differenza bejn "kredenzjali jistgħu jkunu fl-immaġni" u "kredenzjali ma jistgħux ikunu fl-immaġini" hija d-differenza bejn li tgħaddi minn verifika tas-sigurtà u tqatta' tliet ġimgħat biex tirrimedja s-sejbiet. Pjattaformi bħal Mewayz, li jħaddmu operazzjonijiet tan-negozju għal aktar minn 138,000 utent madwar industriji bħall-pagi, HR, u fatturazzjoni, jiddependu eżattament fuq dan it-tip ta' qagħda ta' sigurtà ppruvata fil-pipelines tal-bini u l-iskjerament tagħhom biex iżommu l-fiduċja li dawk il-klijenti jestendu għad-dejta finanzjarja u tal-persunal sensittiva tagħhom.
Esportazzjonijiet tal-Cache: Nagħmlu CI Pipelines Attwalment Mgħaġġla
Il-pipelines CI huma fejn il-prestazzjoni tal-bini hija importanti l-aktar u fejn l-esperjenza tal-bini Docker default storikament kienet l-aktar koroh. Ir-runners CI friski tipikament jibdew b'caches vojta, jiġifieri kull ġirja tal-pipeline tikkompila kollox mill-bidu. Għal servizz Java b'mijiet ta 'dipendenzi Maven, proġett Rust, jew applikazzjoni Python b'estensjonijiet indiġeni tqal, dan ifisser ħinijiet tal-bini mkejla f'għexieren ta' minuti aktar milli sekondi. L-ispiża tan-negozju ta' CI bil-mod hija enormi — frekwenza mnaqqsa ta' skjerament, loops ta' feedback itwal, u inġiniera bilqiegħda inattivi jistennew li l-pipelines jitlestew qabel ma jkunu jistgħu jingħaqdu u jimxu 'l quddiem.
Il-karatteristika tal-esportazzjoni tal-cache ta' BuildKit issolvi dan b'manifesti tal-cache esportabbli. Bl-użu ta' --cache-to type=registry,ref=myregistry/myapp:cache u --cache-from type=registry,ref=myregistry/myapp:cache, BuildKit jimbotta snapshot cache dettaljat għal reġistru wara kull bini u jiġbedha fil-bidu ta' dak li jmiss. Il-cache huwa indirizzat mill-kontenut, għalhekk saffi ġenwinament mibdula biss jerġgħu jinġabru. It-timijiet li jużaw dan il-mudell f'Azzjonijiet GitHub, GitLab CI, u CircleCI jaqtgħu regolarment il-ħinijiet tal-pipeline minn ħmistax-il minuta għal taħt it-tlieta f'ġirjiet sussegwenti. Id-dokumentazzjoni ta' GitHub stess dwar il-flussi tax-xogħol avvanzati tal-bini ta' Docker tirrakkomanda ħafna dan il-mudell eżattament għal din ir-raġuni.
L-aktar bini mgħaġġel huwa dak li qatt ma jkollok tħaddem mill-ġdid. Is-sistema ta' cache f'saffi u indirizzata bil-kontenut ta' BuildKit mhux biss tħaffef il-bini — tagħmel il-kunċett kollu ta' "bini" aktar intelliġenti, billi tibdel kumpilazzjoni ripetuta f'differenza inkrementali ta' eżattament dak li nbidel.
L-esportazzjonijiet tal-cache jintegraw ukoll b'mod nadif mal-flussi tax-xogħol ta' żvilupp ibbażati fuq fergħat. Tista' tikkonfigura l-pipeline tas-CI tiegħek biex taqa' lura minn cache speċifika għall-fergħa għall-cache prinċipali tal-fergħa meta ma teżisti l-ebda cache tal-fergħa, li jfisser li fergħat ġodda jibbenefikaw immedjatament mill-cache sħun akkumulat mil-linja ta 'żvilupp prinċipali tiegħek. L-inġiniera jiksbu feedback malajr mill-ewwel impenn tagħhom fuq fergħa ġdida aktar milli jistennew permezz ta' penali ta' bidu kiesaħ.
💡 DID YOU KNOW?
Mewayz replaces 8+ business tools in one platform
CRM · Invoicing · HR · Projects · Booking · eCommerce · POS · Analytics. Free forever plan available.
Start Free →BuildKit Frontends: Bini Lil hinn mill-Dockerfiles
Forsi l-inqas kapaċità magħrufa ta' BuildKit hija li Dockerfiles huma biss format ta' input wieħed possibbli — mhux l-uniku wieħed. BuildKit għandu arkitettura ta 'frontend li tista' tiġi pplaggjata li tippermetti lingwi u formati tad-definizzjoni tal-bini kompletament apposta. Il-frontend huwa speċifikat mid-direttiva # syntax= fin-naħa ta' fuq tal-fajl tal-bini tiegħek, li tgħid lil BuildKit biex tiġbed immaġini ta' frontend partikolari u tużaha biex teżamina u tesegwixxi l-bqija tal-fajl.
Din l-arkitettura ppermettiet diversi proġetti konvinċenti. L-integrazzjoni ta' Buildpacks tippermetti lil BuildKit li jibni immaġini ta' kontenitur mill-kodiċi tas-sors tal-applikazzjoni mingħajr ebda Dockerfile - jiskopri l-lingwa, jagħżel stampi bażi xierqa, u jiġbor kontenitur lest għall-produzzjoni awtomatikament. HPC u komunitajiet tal-kompjuters xjentifiċi użaw frontends tad-dwana biex jiddeskrivu builds f'lingwi speċifiċi għad-dominju li jikkompilaw sa r-rappreżentazzjoni interna LLB (Low-Level Build) ta' BuildKit. Is-sintassi docker/dockerfile:labs jesperimenta b'karatteristiċi bħall-appoġġ heredoc, il-kontroll --network għal kull istruzzjoni, u ħjiel ta' cache mtejba qabel ma jinżlu f'sintassi stabbli ta' Dockerfile.
Il-kapaċità li tiddefinixxi l-frontend tiegħek tfisser ukoll li organizzazzjonijiet b'rekwiżiti ta' bini mhux tas-soltu m'għandhomx għalfejn jagħżlu bejn "shoehorn everything into Dockerfile syntax" u "jabbandunaw il-kontenituri għal kollox." Firmware tal-FPGA tal-bini ta 'tim, immaġini ta' sistemi inkorporati, jew kontenituri speċjalizzati tal-mudell ML jistgħu jiddeskrivu l-bini tagħhom f'termini li jagħmlu sens għad-dominju tagħhom filwaqt li xorta jipproduċu stampi ta 'kontenituri standard konformi mal-OCI li jintużaw kullimkien kontenituri jimxu. Din l-estensibbiltà hija vantaġġ arkitettoniku ġenwin fuq is-sistemi tal-bini li jittrattaw il-format tad-dħul tagħhom bħala fiss.
Provenjenza u SBOM: Bini għad-Dinja ta' Post-SolarWinds
Is-sigurtà tal-katina tal-provvista tas-software mxiet minn tħassib teoretiku għal prijorità fil-livell tal-bord wara l-ksur SolarWinds fl-2020 u l-vulnerabbiltà Log4Shell fl-2021. L-Ordni Eżekuttiva 14028 tal-gvern tal-Istati Uniti dwar iċ-ċibersigurtà, maħruġa f'Mejju 2021, taw mandat għal kuntratturi federali tas-softwer. L-attestazzjonijiet tal-provenjenza ta' BuildKit u l-karatteristiċi tal-ġenerazzjoni SBOM huma rispons dirett għal dan il-pajsaġġ regolatorju u ta' sigurtà.
B'bnadar --provenance=true u --sbom=true, BuildKit jiġġenera attestazzjonijiet iffirmati kriptografikament li jiddeskrivu eżattament dak li daħal f'immaġni ta' kontenitur — liema immaġini bażi ntużaw, liema istruzzjonijiet Dockerfile esegwiti, liema fajls sors kienu preżenti, u liema dipendenzi esterni nġabru. Dawn l-attestazzjonijiet isegwu l-qafas SLSA (Supply-chain Levels for Software Artifacts) u l-format ta' attestazzjoni in-toto, li jagħmluhom verifikabbli bil-magna minn magni tal-politika bħal Cosign ta' Sigstore u OPA (Open Policy Agent).
Il-fluss tax-xogħol prattiku li dan jippermetti jidher bħal dan:
- L-iżviluppatur jimbotta l-kodiċi; Il-pipeline CI jqajjem BuildKit build bil-provenjenza attivata.
- BuildKit jiġġenera SBOM iffirmat li jelenka l-komponenti kollha u l-verżjonijiet tagħhom.
- Is-SBOM jiġi ppubblikat fir-reġistru tal-kontejners flimkien mal-manifest tal-immaġni.
- Il-kontrolluri tad-dħul fil-cluster Kubernetes jivverifikaw il-provenjenza qabel ma jippermettu l-iskjerament.
- L-iskaners tal-vulnerabbiltà jfittxu l-SBOM biex jidentifikaw immaġini affettwati meta jiġu żvelati CVEs ġodda.
Timijiet li jimplimentaw dan il-pipeline sħiħ jistgħu jirrispondu għall-iżvelar tal-vulnerabbiltà f'sigħat aktar milli jiem, minħabba li għandhom mappa preċiża li tinqara mill-magni ta' kull komponent f'kull kontenitur li jkun qed jaħdem. Għal negozji bħal Mewayz li jintegraw profondament fil-flussi tax-xogħol operattivi tal-klijenti — tmexxija tal-pagi, ġestjoni tad-dejta tal-flotta, ipproċessar ta 'fatturi — il-kapaċità li turi katina ta' provvista rigoruża u awditjabbli hija dejjem aktar prerekwiżit għal konversazzjonijiet tal-bejgħ tal-intrapriżi, mhux biss ħaġa sabiħa li jkollha.
Bidu: Minn Bini Default għal Pipelines Avvanzati
BuildKit diġà qed jaħdem fl-ambjent Docker tiegħek jekk qed tuża verżjoni riċenti — Docker 23.0 u aktar tard ippermettiha awtomatikament. L-ewwel pass prattiku għall-biċċa l-kbira tat-timijiet huwa li tippermetti l-plugin Docker Buildx, li jesponi s-sett sħiħ ta 'karatteristiċi ta' BuildKit permezz tas-sottokmand docker buildx. It-tħaddim ta' docker buildx create --use jistabbilixxi istanza tal-bennej BuildKit b'aktar kapaċità mis-sewwieq default. Minn hemm, l-adozzjoni inkrementali ta' karatteristiċi avvanzati tagħmel sens aktar milli tipprova tadotta kollox f'daqqa.
Mogħdija ta' adozzjoni raġonevoli għal tim li bħalissa qed jagħmel invokazzjonijiet bażiċi docker build tidher qisha żżid esportazzjonijiet ta' cache fis-CI l-ewwel — dan iwassal titjib immedjat fil-veloċità li jista' jitkejjel b'bidla minima fil-konfigurazzjoni. Il-bini b'ħafna pjattaformi jsiru siewja meta t-tim jibda jimmira għall-infrastruttura ARM. L-immuntar sigriet ta 'min jadotta kull darba li jidhru reġistri ta' pakketti privati jew ċwievet SSH fil-kuntest tal-bini. L-attestazzjonijiet ta' provenjenza jagħmlu sens biex jippermettu meta r-rekwiżiti ta' konformità jew it-talbiet tal-klijenti tal-intrapriżi jagħmlu d-dokumentazzjoni tal-katina tal-provvista meħtieġa.
Il-lezzjoni aktar profonda ta' BuildKit hija dwar il-bini apposta. Kemm jekk qed ttrasporta kontenitur għal mikroservizz, endpoint ta’ inferenza ta’ tagħlim tal-magni, jew pjattaforma kumplessa bħall-suite ta’ 207 moduli tan-negozju ta’ Mewayz, il-proċess tal-bini mhuwiex formalità li tgħaġġel fit-triq lejn l-iskjerament — huwa artifatt ta’ inġinerija li jirrifletti l-kwalità, il-qagħda tas-sigurtà u l-maturità operattiva ta’ dak kollu li jintbagħat minnu. BuildKit jagħtik l-għodda biex tagħmel dak l-artifatt eċċellenti. Il-mistoqsija hija sempliċement jekk tieħux il-ħin biex tużahom.
Mistoqsijiet Frekwenti
X'inhu BuildKit u kif huwa differenti mis-sistema klassika tal-bini Docker?
BuildKit hija l-magna tal-bini tal-ġenerazzjoni li jmiss ta' Docker, introdotta f'Docker 18.09 u magħmula default f'Docker 23.0. B'differenza mill-bennej klassiku, BuildKit jappoġġja eżekuzzjoni ta 'saff parallel, strateġiji avvanzati ta' caching, immuntar ta 'sigrieti, u bini ta' pjattaformi differenti. Jittratta l-proċess tal-bini bħala graff aċikliku dirett (DAG), li jippermetti riżoluzzjoni ta' dipendenza aktar intelliġenti u ħinijiet ta' bini b'mod drammatiku aktar mgħaġġla għal Dockerfiles kumplessi u f'diversi stadji.
Għandi bżonn ninstalla xi ħaġa żejda biex nibda nuża BuildKit ma' Docker?
Mhi meħtieġa l-ebda installazzjoni addizzjonali jekk qed tħaddem Docker 23.0 jew aktar tard — BuildKit huwa attivat awtomatikament. Fuq verżjonijiet eqdem, tista' tattivaha billi tissettja l-varjabbli ambjentali DOCKER_BUILDKIT=1 qabel ma tħaddem il-kmandi tal-bini tiegħek. Għal każijiet ta' użu avvanzati bħal caches ta' bini mill-bogħod jew bini b'ħafna pjattaformi, tista' tkun trid tikkonfigura istanza ta' bennej Buildx iddedikata billi tuża docker buildx create.
Jista' jintuża BuildKit biex jinbnew artifatti lil hinn mill-immaġini standard tal-kontejners?
Iva, u din hija waħda mill-aktar kapaċitajiet sottovalutati ta' BuildKit. Bl-użu ta 'frontends personalizzati u l-bandiera --output, BuildKit jista' jipproduċi binarji mhux maħduma, tarballs, websajts statiċi, u artifatti oħra ta 'fajls arbitrarji — mhux biss immaġini OCI. Dan jagħmilha magna tal-bini għal skopijiet ġenerali li tidħol b'mod naturali f'polyglot monorepos u pipelines CI kumplessi fejn timijiet differenti jeħtieġu formati ta' output differenti minn toolchain unifikata.
Kif BuildKit jidħol fi pjattaforma DevOps usa' flimkien ma' għodod bħal Mewayz?
BuildKit jieħu ħsieb is-saff tal-bini ta' livell baxx, iżda timijiet ta' żvilupp moderni jeħtieġu wkoll li jimmaniġġjaw il-flussi tax-xogħol tan-negozju, il-kunsinna tal-klijenti, u l-proċessi operattivi. Pjattaformi bħal Mewayz — OS tan-negozju ta’ 207 moduli li jibda minn $19/mo — jikkumplimentaw l-għodda tal-infrastruttura billi jkopru n-naħa operattiva tan-negozji tas-softwer. It-tqabbil ta' pipelines ta' bini effiċjenti mħaddma minn BuildKit ma' pjattaforma all-in-one bħal Mewayz jagħti lit-timijiet munzell sħiħ mill-artifact tal-kodiċi sal-kunsinna tal-klijent.
We use cookies to improve your experience and analyze site traffic. Cookie Policy