BuildKit: Falinn gimsteinn Docker sem getur byggt næstum hvað sem er
Athugasemdir
Mewayz Team
Editorial Team
BuildKit: Falinn gimsteinn Docker sem getur byggt næstum hvað sem er
Flestir verktaki þekkja Docker sem gámakeyrslutímann sem breytti því hvernig hugbúnaður var sendur. Miklu færri vita af vélinni sem suðgar hljóðlega undir yfirborði hverrar nútíma Docker smíði - BuildKit, næstu kynslóðar smíðakerfi sem hefur verið sent með Docker síðan útgáfu 18.09 og varð sjálfgefinn bakendi í Docker 23.0. Þó verkfræðingar rífast endalaust um Kubernetes stillingar og örþjónustumynstur, hefur BuildKit verið að þróast jafnt og þétt í eitt öflugasta, sveigjanlegasta byggingarkerfi DevOps vistkerfisins. Ef þú hefur verið að meðhöndla það sem aðeins hraðari hafnarsmíði, skilur þú eftir gríðarlega getu á borðinu. Fyrirtæki sem keyra CI/CD leiðslur með miklum afköstum hafa stytt byggingartíma um 50–70% einfaldlega með því að skilja hvað BuildKit býður í raun og veru – og það er bara byrjunin.
Hvað gerir BuildKit í grundvallaratriðum frábrugðin klassískum byggingaraðila
Upprunalega Docker smíðavélin framkvæmdi Dockerfile leiðbeiningar í röð, eitt lag í einu, án þess að vita hvaða vinna gæti gerst samhliða. BuildKit kemur í stað þess línulega framkvæmdarlíkans fyrir stýrt ósýklískt línurit (DAG) — ósjálfstæðisgraf sem skilur hvaða byggingarskref treysta á hvert annað og hver ekki. Óháð þrep keyra samtímis, ónotuðum stigum er alveg sleppt og öll byggingin verður yfirlýsandi lýsing á því sem þú vilt frekar en nauðsynleg röð skrefa sem þú þarft að segja í réttri röð.
Þessi byggingarlistarbreyting hefur hagnýtar afleiðingar sem ganga lengra en hraða. Þegar fjölþrepa Dockerfile setur saman Go binary í einu stigi, halar niður Node.js ósjálfstæði í öðru og setur saman framleiðslumynd í því þriðja, getur BuildKit keyrt fyrstu tvö stigin samtímis. Byggingu sem áður tók fjórar mínútur á öflugum CI hlaupara lýkur nú á undir níutíu sekúndum. Stripe, Shopify og fjöldi annarra verkfræðiteyma í háum stíl hafa skráð svipaðan árangur í yfirliti yfir innri verkfæri þeirra. DAG líkanið þýðir líka að BuildKit getur búið til mjög nákvæm byggingarlýsigögn – grunnur að eiginleikum eins og upprunavottorðum og gerð hugbúnaðarskrár (SBOM) sem skipta gríðarlegu máli fyrir öryggi aðfangakeðju.
Það er líka hugmyndaleg breyting á því hvernig ógilding skyndiminni virkar. Klassíski smiðurinn ógilti hvert lag fyrir neðan allar breyttar leiðbeiningar. BuildKit fylgist með kjötkássa innihalds við hvert inntak, þannig að það að breyta athugasemd í Dockerfile blæs ekki skyndiminnisfærslu sem táknar þrjátíu mínútur af samantekt. Þegar smíði skyndiminni er munurinn á fimm mínútna og fjörutíu mínútna endurgjöf fyrir verkfræðingateymið þitt, skiptir þessi nákvæmni miklu meira máli en það gæti virst í upphafi.
Smíði á mörgum vettvangi: Ein skipun, sérhver arkitektúr
BuildKit's --platform fáni og QEMU samþætting umbreyta því sem einu sinni var sársaukafullt samhæfingarvandamál í mörgum kerfum í eina skipun. Að keyra docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 . framleiðir þrjár framleiðslutilbúnar myndir samhliða úr einni smíðiskalli. Þessi hæfileiki hefur orðið mikilvægur þar sem iðnaðurinn færist í átt að ARM - AWS Graviton3 tilvik skila stöðugt 40% betri verðframmistöðu á vinnuálagi eins og vefþjónustu og gagnavinnslu, og Apple Silicon hefur gert ARM að sjálfgefna þróunarvél milljóna verkfræðinga.
Áður en fjölvettvangsstuðningur BuildKit þroskaðist var það algjör kostnaðarstaður að viðhalda aðskildum byggingarleiðslum fyrir mismunandi arkitektúr. Liðin héldu annað hvort við mörgum Dockerfiles, keyrðu aðskildar CI leiðslur á hlaupara með mismunandi arkitektúr, eða sendu einfaldlega x86 myndir hvert sem er og greiddu frammistöðusekt á ARM innviði. Með BuildKit skilgreinir þú byggingu þína einu sinni og lætur kerfið sjá um arkitektúrsértæka samantekt á gagnsæjan hátt. Ryðverkefni sem krefjast krosssamsetningar, Go verkefni með CGO ósjálfstæði, Python pakka með C viðbótum — BuildKit sér um hermilagið án þess að þú þurfir að skilja smáatriði hvers markvettvangs.
Hagnýtt viðskiptavirði hér er mælanlegt. Teymi sem keyrir 200 gáma á AWS Graviton tilvikum á $0,04 á vCPU-klukkutíma á móti jafngildi x86 tilviki á $0,056 á vCPU-klukkutíma sparar u.þ.b. $11.520 árlega á 100 vCPUs - eingöngu frá því að velja réttan arkitektúr. Að gera það val aðgengilegt án endurskipulagningar er einmitt sú tegund af fínstillingu innviða sem borgar sig strax.
Leyndarstjórnun án þess að leka inn í myndlög
Einn af vanmetnustu eiginleikum BuildKit er API þess leyndarmál. Klassíski Docker smiðurinn hafði enga hreina leið til að koma skilríkjum inn í byggingu án þess að þessi skilríki enduðu hugsanlega í myndlagi. Hönnuðir unnu í kringum þetta með fjölþrepa byggingu, ARG leiðbeiningum og vandlegri röðun – en hættan á að baka óvart API lykil eða einka SSH lykil inn í sendingu mynd var óþægilega mikil. Öryggisskannar finna reglulega harðkóðaða skilríki í gámamyndum sem birtar eru í opinberum skrám og margir af þessum leka rekja beint til klaufalegrar leynilegrar meðferðar við smíði.
BuildKit's --secret fáninn festir viðkvæm gögn inn í byggingarumhverfið sem tímabundna skráarkerfisslóð sem er aðeins til meðan á tilteknu RUN leiðbeiningunni stendur sem þarfnast hennar og snertir aldrei neitt myndlag. Dockerfile leiðbeining eins og RUN --mount=type=secret,id=npmrc cat /run/secrets/npmrc > ~/.npmrc && npm uppsetning veitir smíðaferlinu aðgang að einkaskilríki npm án þess að þessi skilríki birtist nokkurn tíma í lokamyndinni eða einhverju millilagi. Sama mynstur virkar fyrir PyPI skilríki, Maven stillingar, SSH lykla fyrir persónulegar Git geymslur og allt annað viðkvæmt efni sem byggingarferlið þitt krefst.
Fyrir teymi sem byggja hugbúnað sem snertir eftirlitsgreinar - heilbrigðiskerfi, fintech vörur, HR hugbúnaður - munurinn á milli "skilríki gæti verið í myndinni" og "skilríki getur ekki verið í myndinni" er munurinn á því að standast öryggisúttekt og að eyða þremur vikum í að lagfæra niðurstöður. Pallar eins og Mewayz, sem knýja rekstur fyrirtækja fyrir yfir 138.000 notendur þvert á atvinnugreinar eins og launaskrá, starfsmannamál og reikningagerð, eru háðir nákvæmlega þessari tegund af sannanlegu öryggisstöðu í smíði og dreifingu leiðslum þeirra til að viðhalda því trausti sem þessir viðskiptavinir bera til viðkvæmra fjárhags- og starfsmannagagna sinna.
Útflutningur skyndiminni: Gerir CI leiðslur í raun hraðar
CI leiðslur eru þar sem frammistaða byggingar skiptir mestu máli og þar sem sjálfgefna Docker byggingarupplifunin hefur í gegnum tíðina verið sársaukafullasta. Ferskir CI hlauparar byrja venjulega með tómum skyndiminni, sem þýðir að hver leiðsluhlaup endursetur allt frá grunni. Fyrir Java þjónustu með hundruð Maven ósjálfstæðis, Rust verkefni eða Python forrit með þungum innfæddum viðbyggingum þýðir þetta byggingartímar mældir í tugum mínútna frekar en sekúndum. Viðskiptakostnaðurinn við hægan CI er gríðarlegur – minni tíðni dreifingar, lengri endurgjöf og verkfræðingar sem sitja aðgerðalausir og bíða eftir að leiðslum ljúki áður en þær geta sameinast og haldið áfram.
Eiginleikinn fyrir útflutning skyndiminni BuildKit leysir þetta með útflutningsskýrslum skyndiminni. Með því að nota --cache-to type=registry,ref=myregistry/myapp:cache og --cache-from type=registry,ref=myregistry/myapp:cache, ýtir BuildKit nákvæmri skyndiminni skyndimynd í skrásetningu eftir hverja byggingu og dregur hana í byrjun næstu. Skyndiminnið er efnismiðað, þannig að aðeins raunverulegt breytt lög eru endursótt. Liðin sem nota þetta mynstur í GitHub Actions, GitLab CI og CircleCI skera reglulega leiðslutíma úr fimmtán mínútum í undir þrjár í síðari keyrslum. Eigin skjöl GitHub um háþróað Docker smíðaverkflæði mæla eindregið með þessu mynstri einmitt af þessari ástæðu.
Hraðasta byggingin er sú sem þú þarft aldrei að keyra aftur. Lagskipt, innihaldsmiðað skyndiminni kerfi BuildKit flýtir ekki bara fyrir smíði – það gerir alla hugmyndina um „bygging“ snjallari og breytir endurtekinni samantekt í stigvaxandi mun á nákvæmlega því sem breyttist.
Útflutningur skyndiminni fellur einnig hreinlega inn í þróunarvinnuflæði sem byggir á útibúum. Þú getur stillt CI leiðsluna þína til að falla aftur úr útibússértæku skyndiminni í aðalútibúskyndiminni þegar ekkert útibúskyndiminni er til, sem þýðir að ný útibú njóta strax góðs af hlýja skyndiminni sem safnast fyrir í aðalþróunarlínunni þinni. Verkfræðingar fá skjót viðbrögð frá fyrstu skuldbindingu sinni á nýtt útibú frekar en að bíða í gegnum kaldbyrjunarvíti.
💡 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: Building Beyond Dockerfiles
Kannski er minnst þekkta möguleiki BuildKit að Dockerfiles eru bara eitt mögulegt inntakssnið - ekki það eina. BuildKit er með tengjanlegan framenda arkitektúr sem gerir algjörlega sérsniðin smíðaskilgreiningarmál og snið. Framendinn er tilgreindur af # syntax= tilskipuninni efst á byggingarskránni þinni, sem segir BuildKit að draga tiltekna framendamynd og nota hana til að flokka og keyra restina af skránni.
Þessi arkitektúr hefur gert nokkur sannfærandi verkefni kleift. Samþætting Buildpacks gerir BuildKit kleift að smíða gámamyndir úr frumkóða forrita án nokkurrar Dockerfile yfirleitt - það finnur tungumálið, velur viðeigandi grunnmyndir og setur saman framleiðslu-tilbúinn gám sjálfkrafa. HPC og vísindaleg tölvusamfélög hafa notað sérsniðna framenda til að lýsa smíðum á lénssértækum tungumálum sem safna saman í innri LLB (Low-Level Build) framsetningu BuildKit. docker/dockerfile:labs setningafræðiframendatilraunirnar með eiginleikum eins og heredoc stuðningi, --netkerfi stjórn í hverri leiðbeiningu og auknum skyndiminni vísbendingum áður en þær lenda í stöðugri Dockerfile setningafræði.
Hugleikinn til að skilgreina eigin framenda þýðir líka að stofnanir með óvenjulegar byggingarkröfur þurfa ekki að velja á milli „skóhorns allt í Dockerfile setningafræði“ og „hætta algjörlega ílátum“. Hópur sem byggir upp FPGA fastbúnað, myndir af innbyggðum kerfum eða sérhæfðum ML módelílátum getur lýst byggingu þeirra með skilmálum sem eru skynsamleg fyrir lénið sitt á meðan framleiðir samt staðlaðar OCI-samhæfðar gámamyndir sem dreifa hvar sem gámar keyra. Þessi stækkanleiki er ósvikinn byggingarfræðilegur kostur fram yfir byggingarkerfi sem meðhöndla inntakssnið þeirra sem fast.
Uppruni og SBOM: Bygging fyrir Post-SolarWinds heiminn
Aðfangakeðjuöryggi hugbúnaðar færðist frá fræðilegu áhyggjuefni yfir í forgang stjórnarstigs eftir SolarWinds brotið árið 2020 og Log4Shell varnarleysið árið 2021. Framkvæmdatilskipun Bandaríkjastjórnar 14028 um netöryggi, gefin út í maí 2021, kveður á um hugbúnaðarsamninga fyrir sambandsríki. Upprunavottorð BuildKit og SBOM kynslóðareiginleikar eru bein viðbrögð við þessu reglugerðar- og öryggislandslagi.
Með --provenance=true og --sbom=true fánum býr BuildKit til dulritunar undirritaðar vottanir sem lýsa nákvæmlega hvað fór inn í gámamynd - hvaða grunnmyndir voru notaðar, hvaða Dockerfile leiðbeiningar framkvæmdu, hvaða frumskrár voru til staðar og hvaða ytri ósjálfstæði voru sótt. Þessar vottanir fylgja SLSA (Supply chain Levels for Software Artifacts) ramma og staðfestingarsniði í heild, sem gerir þær vélsannprófanlegar af stefnumótum eins og Sigstore's Cosign og OPA (Open Policy Agent).
Hið hagnýta verkflæði sem þetta gerir lítur svona út:
- Hönnuði ýtir inn kóða; CI leiðsla kveikir á BuildKit byggingu með uppruna virkt.
- BuildKit býr til undirritaða SBOM sem sýnir alla íhluti og útgáfur þeirra.
- SBOM er birt í gámaskránni ásamt myndskránni.
- Aðgangsstjórar í Kubernetes klasanum sannreyna uppruna áður en þeir leyfa dreifingu.
- Varnleikaskannarar spyrja SBOM til að bera kennsl á myndir sem verða fyrir áhrifum þegar nýjar CVEs eru birtar.
Teymi sem innleiða þessa fullu leiðslu geta brugðist við uppljóstrun um varnarleysi á klukkustundum frekar en dögum, vegna þess að þau eru með nákvæmt, véllesanlegt kort af öllum íhlutum í hverjum íláti sem er í gangi. Fyrir fyrirtæki eins og Mewayz sem aðlagast djúpt inn í verkflæði viðskiptavina - keyra launaskrá, stjórna flotagögnum, vinna reikninga - er hæfileikinn til að sýna fram á stranga, endurskoðanlega aðfangakeðju í auknum mæli forsenda fyrir sölusamræðum fyrirtækja, ekki bara gott að hafa.
Hefst: Frá sjálfgefnum byggingum í háþróaðar leiðslur
BuildKit er nú þegar í gangi í Docker umhverfinu þínu ef þú ert að nota nýlega útgáfu - Docker 23.0 og síðar virkja það sjálfgefið. Fyrsta hagnýta skrefið fyrir flest lið er að virkja Docker Buildx viðbótina, sem afhjúpar alla eiginleika BuildKit í gegnum docker buildx undirskipunina. Að keyra docker buildx create --use setur upp BuildKit smiðjutilvik með meiri getu en sjálfgefinn bílstjóri. Þaðan er skynsamlegt að taka upp háþróaða eiginleika stigvaxandi frekar en að reyna að samþykkja allt í einu.
Sanngjarn innleiðingarleið fyrir teymi sem nú stundar grunn dock build boð lítur út fyrir að bæta skyndiminni útflutningi við CI fyrst – þetta skilar tafarlausum, mælanlegum hraðabótum með lágmarksbreytingum á stillingum. Byggingar á mörgum vettvangi verða verðmætar þegar teymið byrjar að miða á ARM innviði. Leynileg uppsetning er þess virði að nota hvenær sem einkapakkaskrár eða SSH lyklar birtast í byggingarsamhengi. Upprunavottorð eru skynsamleg til að virkja þegar fylgnikröfur eða kröfur viðskiptavina fyrirtækja gera skjöl aðfangakeðju nauðsynleg.
Dýpri lærdómur BuildKit snýst um að byggja vísvitandi. Hvort sem þú ert að senda gám fyrir örþjónustu, ályktunarendapunkt fyrir vélanám eða flókinn vettvang eins og Mewayz pakkann af 207 viðskiptaeiningum, þá er byggingarferlið ekki formsatriði sem þú flýtir þér í gegnum á leiðinni til dreifingar – það er verkfræðilegur gripur sem endurspeglar gæði, öryggisstöðu og rekstrarþroska alls sem kemur út úr því. BuildKit gefur þér tækin til að gera þann grip framúrskarandi. Spurningin er einfaldlega hvort þú gefir þér tíma til að nota þau.
Algengar spurningar
Hvað er BuildKit og hvernig er það frábrugðið hinu klassíska Docker smíðakerfi?
BuildKit er næstu kynslóðar byggingarvél Docker, kynnt í Docker 18.09 og gerð sjálfgefið í Docker 23.0. Ólíkt klassíska smiðinum styður BuildKit framkvæmd samhliða lags, háþróaðar skyndiminnisaðferðir, uppsetningu leyndarmála og smíði á milli vettvanga. Það meðhöndlar byggingarferlið sem stýrt ósýklískt graf (DAG), sem gerir snjallari upplausn ósjálfstæðis og verulega hraðari byggingartíma fyrir flóknar, fjölþrepa Dockerfiles.
Þarf ég að setja upp eitthvað aukalega til að byrja að nota BuildKit með Docker?
Engin viðbótaruppsetning er nauðsynleg ef þú ert að keyra Docker 23.0 eða nýrri - BuildKit er sjálfgefið virkt. Í eldri útgáfum geturðu virkjað hana með því að stilla umhverfisbreytuna DOCKER_BUILDKIT=1 áður en þú keyrir smíðaskipanirnar þínar. Fyrir háþróaða notkunartilvik eins og skyndiminni fyrir fjarsmíðar eða smíði á mörgum vettvangi gætirðu viljað stilla sérstakt Buildx smiðjutilvik með því að nota docker buildx create.
Er hægt að nota BuildKit til að smíða gripi umfram venjulegar gámamyndir?
Já, og þetta er einn af vanmetnustu eiginleikum BuildKit. Með því að nota sérsniðna framenda og --output fánann, getur BuildKit framleitt hráa binaries, tarballs, kyrrstæðar vefsíður og aðra handahófskennda skráargripi - ekki bara OCI myndir. Þetta gerir hana að almennri smíðavél sem passar náttúrulega inn í marglita einhliða og flóknar CI leiðslur þar sem mismunandi teymi þurfa mismunandi úttakssnið frá sameinðri verkfærakeðju.
Hvernig passar BuildKit inn í breiðari DevOps vettvang ásamt verkfærum eins og Mewayz?
BuildKit sér um byggingarlagið á lágu stigi, en nútíma þróunarteymi þurfa einnig að stjórna verkflæði fyrirtækja, afhendingu viðskiptavina og rekstrarferla. Pallar eins og Mewayz — 207 eininga viðskiptastýrikerfi sem byrjar á $19/mán — bæta við innviðaverkfæri með því að fjalla um rekstrarhlið hugbúnaðarfyrirtækja. Með því að para saman skilvirkar byggingarleiðslur sem knúnar eru af BuildKit við allt-í-einn vettvang eins og Mewayz gefur teymum heilan stafla frá kóðagripi til afhendingar viðskiptavina.
We use cookies to improve your experience and analyze site traffic. Cookie Policy