Hacker News

BuildKit: Gem kache Docker a ki ka bati prèske nenpòt bagay

Kòmantè

16 min read Via tuananh.net

Mewayz Team

Editorial Team

Hacker News

BuildKit: Gem kache Docker a ki ka bati prèske nenpòt bagay

Pifò devlopè yo konnen Docker kòm tan veso ki te chanje fason yo te voye lojisyèl an. Anpil mwens konnen sou motè a trankilman fredi anba sifas chak modèn Docker build - BuildKit, sistèm nan pwochen jenerasyon konstriksyon ki te anbake ak Docker depi vèsyon 18.09 epi ki te vin backend default nan Docker 23.0. Pandan ke enjenyè yo ap diskite san rete sou konfigirasyon Kubernetes ak modèl mikwosèvis, BuildKit te piti piti evolye nan youn nan sistèm konstriksyon ki pi pwisan ak fleksib nan ekosistèm DevOps la. Si ou te trete li kòm jis yon docker build pi rapid, w ap kite gwo kapasite sou tab la. Konpayi ki gen gwo debi CI/CD te redwi tan konstriksyon yo pa 50–70% tou senpleman lè yo konprann sa BuildKit ofri aktyèlman — e sa se jis kòmansman an.

Ki sa ki fè BuildKit fondamantalman diferan de Classic Builder la

Motè Docker orijinal la te egzekite enstriksyon Dockerfile an sekans, yon kouch alafwa, san yo pa konnen ki travay ki ka fèt an paralèl. BuildKit ranplase modèl ekzekisyon lineyè sa a ak yon graf asilik dirije (DAG) — yon graf depandans ki konprann ki etap konstriksyon depann youn sou lòt e ki pa. Etap endepandan yo egzekite ansanm, etap ki pa itilize yo sote nèt, epi tout bati a vin tounen yon deskripsyon deklaratif sou sa ou vle olye ke yon sekans enperatif etap ou dwe resite nan bon lòd.

Chanjman achitekti sa a gen konsekans pratik ki ale pi lwen pase vitès. Lè yon Dockerfile milti-etap konpile yon binè Go nan yon etap, telechaje depandans Node.js nan yon lòt, epi rasanble yon imaj pwodiksyon nan yon twazyèm, BuildKit ka kouri de premye etap yo ansanm. Yon bati ki te deja pran kat minit sou yon kourè pwisan CI kounye a fini nan mwens pase katrevendis segonn. Stripe, Shopify, ak nòt lòt ekip jeni wo-echèl te dokimante pwogrè ki sanble nan retrospektiv zouti entèn yo. Modèl DAG la vle di tou BuildKit ka jenere metadata konstriksyon ki trè egzak — yon fondasyon pou karakteristik tankou atestasyon pwovens ak jenerasyon bill of materials (SBOM) lojisyèl ki enpòtan anpil pou sekirite chèn ekipman pou.

Genyen tou yon chanjman konseptyèl nan fason envalidasyon kachèt travay. Mason klasik la anile chak kouch anba a nenpòt enstriksyon chanje. BuildKit swiv hashes kontni nan chak opinyon, kidonk chanje yon kòmantè nan yon Dockerfile pa soufle yon antre kachèt ki reprezante trant minit nan konpilasyon. Lè kachèt bati ou an se diferans ki genyen ant yon bouk fidbak senk minit ak yon karant minit pou ekip jeni ou a, presizyon sa a enpòtan anpil plis pase sa li ta ka okòmansman sanble.

Konstriksyon milti-platfòm: yon sèl kòmand, chak achitekti

--platform BuildKit la ak entegrasyon QEMU transfòme sa ki te yon fwa yon pwoblèm kowòdinasyon plizyè sistèm douloure nan yon sèl kòmand. Kouri docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 . pwodui twa imaj ki pare pou pwodiksyon an paralèl apati yon sèl envokasyon bati. Kapasite sa a vin enpòtan pandan endistri a ap deplase nan direksyon ARM — Enstans AWS Graviton3 toujou bay 40% pi bon pri-pèfòmans sou chaj travay tankou sèvis entènèt ak pwosesis done, epi Apple Silicon te fè ARM machin devlopman default pou plizyè milyon enjenyè.

Avan sipò milti-platfòm BuildKit te gen matirite, kenbe tiyo konstriksyon separe pou diferan achitekti se te yon sant pri reyèl. Ekip yo swa kenbe plizyè Dockerfile, yo te kouri separe tiyo CI sou kourè ki gen achitekti diferan, oswa tou senpleman te anbake imaj x86 toupatou epi yo te peye penalite pèfòmans sou enfrastrikti ARM. Avèk BuildKit, ou defini konstriksyon ou yon fwa epi kite sistèm nan okipe konpilasyon espesifik achitekti yo transparan. Pwojè Rust ki mande pou kwa-konpilasyon, pwojè Go ak depandans CGO, pake Python ak ekstansyon C — BuildKit okipe kouch imitasyon an san yo pa mande w konprann detay chak platfòm sib.

Valè biznis pratik isit la se mezirab. Yon ekip k ap dirije 200 kontenè sou egzanp AWS Graviton nan $0.04 pou chak vCPU-èdtan kont ekivalan x86 egzanp lan nan $0.056 pou chak vCPU-èdtan ekonomize apeprè $11,520 chak ane pou chak 100 vCPU - piman nan chwazi bon achitekti. Fè chwa sa a aksesib san yon efò re-enjenieri se egzakteman kalite optimize enfrastrikti ki peye pou tèt li imedyatman.

Jesyon sekrè san koule nan kouch imaj

Youn nan karakteristik BuildKit ki pi pa apresye se API sekrè li yo. Mason Docker klasik la pa te gen okenn fason pwòp yo pase kalifikasyon nan yon bati san yo pa kalifikasyon sa yo ki kapab fini nan yon kouch imaj. Devlopè yo te travay alantou sa a ak bati plizyè etap, ARG enstriksyon, ak lòd atansyon - men risk pou aksidantèlman kwit yon kle API oswa yon kle prive SSH nan yon imaj anbake rete alèz. Scanners sekirite yo regilyèman jwenn kalifikasyon ki kode nan imaj veso yo pibliye nan rejis piblik yo, e anpil nan fwit sa yo remonte dirèkteman nan manyen sekrè maladwa pandan konstriksyon yo.

Drapo --sekrè

BuildKit la monte done sansib nan anviwònman konstriksyon an kòm yon chemen sistèm fichye tanporè ki egziste sèlman pou dire enstriksyon espesifik RUN ki bezwen li epi ki pa janm manyen okenn kouch imaj. Yon enstriksyon Dockerfile tankou RUN --mount=type=secret,id=npmrc cat /run/secrets/npmrc > ~/.npmrc &&npm install bay pwosesis konstriksyon aksè nan kalifikasyon prive npm san yo pa janm parèt nan imaj final la oswa nan nenpòt kouch entèmedyè. Menm modèl la ap travay pou kalifikasyon PyPI, paramèt Maven, kle SSH pou depo Git prive, ak nenpòt lòt materyèl sansib pwosesis konstriksyon ou mande.

Pou ekip ki kreye lojisyèl ki touche endistri reglemante yo - platfòm swen sante, pwodwi fintech, lojisyèl HR - diferans ki genyen ant "kalifikasyon yo ta ka nan imaj la" ak "kalifikasyon yo pa ka nan imaj la" se diferans ki genyen ant pase yon odit sekirite ak depanse twa semèn pou ratrapaj rezilta yo. Platfòm tankou Mewayz, ki mache ak operasyon biznis pou plis pase 138,000 itilizatè atravè endistri tankou pewòl, HR, ak fakti, depann egzakteman sou kalite sekirite sa a ki pwouve nan kanalizasyon konstriksyon ak deplwaman yo pou kenbe konfyans kliyan sa yo pwolonje nan done finansye ak pèsonèl sansib yo.

Ekspòtasyon kachèt: Fè CI Pipelines aktyèlman rapid

Tuyo CI yo se kote pèfòmans konstriksyon ki pi enpòtan epi kote eksperyans konstriksyon Docker default te istorikman pi douloure. Kourè CI fre tipikman kòmanse ak kachèt vid, sa vle di chak kouri tiyo rekonpile tout bagay soti nan grafouyen. Pou yon sèvis Java ki gen plizyè santèn depandans Maven, yon pwojè Rust, oswa yon aplikasyon Python ak gwo ekstansyon natif natal, sa vle di tan konstriksyon yo mezire an dè dizèn de minit olye ke segonn. Pri biznis nan CI ralanti se menmen — frekans deplwaman redwi, bouk fidbak pi long, ak enjenyè chita san fè anyen konsa ap tann pou tiyo yo fini anvan yo ka rantre epi kontinye.

Kachèt ekspòtasyon kachèt BuildKit la rezoud sa ak manifeste kachèt ekspòte. Sèvi ak --cache-to type=registry,ref=myregistry/myapp:cache ak --cache-from type=registry,ref=myregistry/myapp:cache, BuildKit pouse yon snapshot kachèt detaye nan yon rejis apre chak bati epi rale li nan kòmansman an nan pwochen an. Kachèt la adrese kontni, kidonk sèlman kouch ki vrèman chanje yo jwenn re-chache. Ekip ki itilize modèl sa a nan GitHub Actions, GitLab CI, ak CircleCI regilyèman koupe tan tiyo soti nan kenz minit pou mwens pase twa sou kouri ki vin apre yo. Pwòp dokiman GitHub sou workflows avanse Docker yo rekòmande anpil modèl sa a pou rezon sa a egzakteman.

Konstriksyon ki pi rapid la se youn ou pa janm oblije kouri ankò. Sistèm kachèt BuildKit an kouch, ki adrese kontni an pa jis akselere bati, li fè tout konsèp yon "konstriksyon" pi entelijan, vire yon konpilasyon repete nan yon diferans enkreman nan egzakteman sa ki chanje.

Ekspòtasyon kachèt yo tou entegre pwòp ak workflows devlopman ki baze sou branch yo. Ou ka konfigirasyon tiyo CI ou a tounen soti nan yon kachèt branch espesifik nan kachèt branch prensipal la lè pa gen okenn kachèt branch ki egziste, sa vle di nouvo branch imedyatman benefisye de kachèt cho akimile nan liy devlopman prensipal ou a. Enjenyè yo jwenn fidbak rapid nan premye angajman yo sou yon nouvo branch olye yo ap tann nan yon penalite demaraj frèt.

💡 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

Petèt kapasite ki pi piti a nan BuildKit se ke Dockerfiles se sèlman yon fòma antre posib - pa youn nan sèlman. BuildKit gen yon achitekti entèfas pluggable ki pèmèt totalman personnalisé bati definisyon lang ak fòma. Se direktiv # sentaks= ki espesifye entèfas a ki anlè fichye konstriksyon an, ki di BuildKit pou l rale yon imaj an patikilye epi sèvi ak li pou analize ak egzekite rès fichye a.

Achitekti sa a te pèmèt plizyè pwojè konvenkan. Entegrasyon Buildpacks pèmèt BuildKit bati imaj veso ki soti nan kòd sous aplikasyon an san okenn Dockerfile ditou - li detekte lang nan, chwazi imaj ki apwopriye yo, epi rasanble yon veso ki pare pou pwodiksyon otomatikman. HPC ak kominote enfòmatik syantifik yo te itilize entèfas koutim pou dekri bati nan lang espesifik domèn ki konpile jiska reprezantasyon entèn LLB (Low-Level Build) BuildKit la. docker/dockerfile:labs eksperimantasyon entèfas sentaks ak karakteristik tankou sipò heredoc, --network kontwòl pou chak enstriksyon, ak sijesyon kachèt amelyore anvan yo ateri nan sentaks Dockerfile ki estab.

Kapasite pou defini pwòp entèfas ou vle di tou òganizasyon ki gen kondisyon konstriksyon etranj yo pa oblije chwazi ant "shoehorn tout bagay nan sentaks Dockerfile" ak "abandone veso yo nèt." Yon ekip ki konstwi firmwèr FPGA, imaj sistèm embedded, oswa resipyan modèl espesyalize ML ka dekri bati yo an tèm ki fè sans pou domèn yo pandan y ap toujou pwodwi imaj veso estanda OCI ki deplwaye nenpòt kote resipyan yo kouri. Ekstansiblite sa a se yon avantaj achitekti otantik sou sistèm konstriksyon ki trete fòma D 'yo kòm fiks.

Provenance ak SBOM: Building for the Post-SolarWinds World

Sekirite chèn ekipman pou lojisyèl te deplase soti nan enkyetid teyorik nan priyorite nan nivo konsèy apre vyolasyon SolarWinds la an 2020 ak vilnerabilite Log4Shell nan 2021. Dekrè Egzekitif 14028 gouvènman ameriken an sou sibèsekirite, ki te pibliye an Me 2021, te obligatwa bòdwo lojisyèl pou kontraktè federal yo. Atestasyon pwovens BuildKit yo ak karakteristik jenerasyon SBOM yo se yon repons dirèk nan peyizaj regilasyon ak sekirite sa a.

Avèk drapo --provenance=true ak --sbom=true, BuildKit jenere atestasyon kriptografik siyen ki dekri egzakteman sa ki te antre nan yon imaj veso — ki imaj de baz yo te itilize, ki enstriksyon Dockerfile egzekite, ki dosye sous yo te prezan, ak ki depandans ekstèn yo te chèche. Atestasyon sa yo swiv kad SLSA (Nivo chèn ekipman pou artefacts lojisyèl) ak fòma ateste konplè a, sa ki fè yo verifye nan machin nan pa motè politik tankou Cosign Sigstore a ak OPA (Open Policy Agent).

Flux travay pratik sa a pèmèt sanble sa a:

  1. Devlopè pouse kòd; Tiyo CI deklannche yon konstriksyon BuildKit ak pwovens ki pèmèt.
  2. BuildKit jenere yon SBOM siyen ki bay lis tout konpozan ak vèsyon yo.
  3. SOM a pibliye nan rejis veso a ansanm ak manifest imaj la.
  4. Kontwòl admisyon nan gwoup Kubernetes la verifye pwovens anvan yo pèmèt deplwaman.
  5. Eskanè vilnerabilite yo mande SBOM pou idantifye imaj ki afekte yo lè yo divilge nouvo CVE yo.

Ekip ki aplike tiyo konplè sa a ka reponn a divilgasyon vilnerabilite yo nan èdtan olye ke jou, paske yo gen yon kat egzak, lizib pou machinn nan chak eleman nan chak veso k ap kouri. Pou biznis tankou Mewayz ki entegre pwofondman nan workflows operasyonèl kliyan yo — kouri pewòl, jere done flòt yo, trete fakti — kapasite pou yo demontre yon chèn apwovizyonman solid, ki ka verifye se de pli zan pli yon kondisyon pou konvèsasyon lavant antrepriz, pa sèlman yon bon bagay pou genyen.

Kòmanse: Depi Default Builds to Advanced Pipelines

BuildKit deja ap fonksyone nan anviwònman Docker ou a si w ap itilize yon dènye vèsyon — Docker 23.0 ak pita pèmèt li pa defo. Premye etap pratik pou pifò ekip yo se pèmèt Plugin Docker Buildx la, ki montre tout karakteristik BuildKit la atravè sou kòmand docker buildx. Kouri docker buildx create --use mete kanpe yon egzanp BuildKit builder ki gen plis kapasite pase chofè default la. Apati de sa, adopsyon incrémentielle de fonctionnalités avanse fè sans olye ke yo eseye adopte tout bagay an konnye a.

Yon chemen adopsyon rezonab pou yon ekip ki aktyèlman ap fè envokasyon debaz docker build sanble ajoute ekspòtasyon kachèt nan CI an premye - sa a bay amelyorasyon vitès imedya, mezirab ak chanjman konfigirasyon minim. Bati milti-platfòm vin gen anpil valè lè ekip la kòmanse vize enfrastrikti ARM. Sekrè aliye vo adopte nenpòt lè rejis pake prive oswa kle SSH parèt nan yon kontèks bati. Atestasyon pwovens yo gen sans pou pèmèt lè egzijans konfòmite oswa demann kliyan antrepriz fè dokiman chèn ekipman pou nesesè.

Pi pwofon leson BuildKit se sou bati espre. Kit w ap voye yon veso pou yon mikwosèvis, yon pwen final aprantisaj machin, oswa yon platfòm konplèks tankou suite 207 modil biznis Mewayz, pwosesis konstriksyon an se pa yon fòmalite w ap kouri sou wout deplwaman - se yon zafè jeni ki reflete bon jan kalite, pwèstans sekirite, ak matirite operasyonèl nan tout sa ki anbake soti nan li. BuildKit ba ou zouti pou fè zafè sa a ekselan. Kesyon an se tou senpleman si ou pran tan pou itilize yo.

Kesyon yo poze souvan

Kisa BuildKit ye ak ki jan li diferan de sistèm Docker klasik la?

BuildKit se motè konstriksyon pwochen jenerasyon Docker, ki te prezante nan Docker 18.09 e ki te fè defo a nan Docker 23.0. Kontrèman ak mason klasik la, BuildKit sipòte ekzekisyon kouch paralèl, estrateji avanse kachèt, aliye sekrè, ak bati kwa-platfòm. Li trete pwosesis konstriksyon an kòm yon graf acyclic dirije (DAG), ki pèmèt rezolisyon depandans pi entelijan ak tan konstriksyon dramatikman pi rapid pou dosye Dockerfile konplèks, ki gen plizyè etap.

Èske mwen bezwen enstale nenpòt bagay anplis pou kòmanse itilize BuildKit ak Docker?

Okenn enstalasyon anplis nesesè si w ap kouri Docker 23.0 oswa pita — BuildKit aktive pa default. Sou ansyen vèsyon, ou ka aktive li lè w mete varyab anviwònman DOCKER_BUILDKIT=1 anvan ou kouri kòmandman konstriksyon ou yo. Pou ka itilize avanse tankou kachèt konstriksyon aleka oswa bati milti-platfòm, ou ka vle konfigirasyon yon egzanp Buildx dedye lè l sèvi avèk docker buildx create.

Èske BuildKit ka itilize pou konstwi zafè pi lwen pase imaj veso estanda?

Wi, epi sa a se youn nan kapasite BuildKit ki pi pa apresye. Sèvi ak entèfas koutim ak drapo --output, BuildKit ka pwodui binè anvan tout koreksyon, tarballs, sit entènèt estatik, ak lòt zafè dosye abitrè - pa sèlman imaj OCI. Sa fè li yon motè konstriksyon jeneral ki anfòm natirèlman nan monorepo poliglot ak tiyo CI konplèks kote diferan ekip bezwen diferan fòma pwodiksyon nan yon chèn zouti inifye.

Ki jan BuildKit anfòm nan yon platfòm DevOps ki pi laj ansanm ak zouti tankou Mewayz?

BuildKit jere kouch konstriksyon nivo ki ba a, men ekip devlopman modèn yo bezwen tou jere workflows biznis, livrezon kliyan, ak pwosesis operasyonèl yo. Platfòm tankou Mewayz — yon eksplwatasyon biznis 207 modil ki kòmanse nan $ 19 / mwa — konpleman zouti enfrastrikti pa kouvri bò operasyonèl nan biznis lojisyèl. Aparey tiyo konstriksyon efikas ki mache ak BuildKit ak yon platfòm tout-an-yon tankou Mewayz bay ekip yo yon pil konplè soti nan artifact kòd jiska livrezon kliyan.