BuildKit: a gemma nascosta di Docker chì pò custruisce quasi tuttu
Cumenti
Mewayz Team
Editorial Team
BuildKit: a gemma nascosta di Docker chì pò custruisce quasi tuttu
A maiò parte di i sviluppatori cunnosci Docker cum'è u tempu di esecuzione di u containeru chì hà cambiatu cumu u software hè speditu. Moltu menu cunnosci di u mutore chì canticchiava in silenziu sottu à a superficia di ogni custruzzione moderna di Docker - BuildKit, u sistema di creazione di a prossima generazione chì hè stata spedita cù Docker da a versione 18.09 è hè diventata u backend predeterminatu in Docker 23.0. Mentre l'ingegneri discute senza fine nantu à e cunfigurazioni di Kubernetes è i mudelli di microserviziu, BuildKit hè statu in evoluzione constantemente in unu di i sistemi di costruzione più putenti è flessibili in l'ecosistema DevOps. Se l'avete trattatu cum'è solu un docker build più veloce, lasciate enormi capacità nantu à a tavula. L'imprese chì gestiscenu pipeline CI/CD d'alta produzzione anu riduciutu i tempi di creazione da 50-70% solu per capiscenu ciò chì BuildKit offre in realtà - è questu hè solu u principiu.
Ciò chì BuildKit hè fundamentalmente sfarente da u Classic Builder
U mutore di creazione di Docker originale hà eseguitu l'istruzzioni di Dockerfile in sequenza, una capa à a volta, senza sapè ciò chì u travagliu puderia accade in modu sicuru in parallelu. BuildKit rimpiazza quellu mudellu di esecuzione lineale cù un gràficu aciclicu direttu (DAG) - un gràficu di dipendenza chì capisce quale passi di custruzzione si basanu l'un à l'altru è quale ùn sò micca. I tappe indipindenti eseguite simultaneamente, e tappe inutilizate sò saltate interamente, è tutta a custruzione diventa una descrizzione dichjarazione di ciò chì vulete piuttostu cà una sequenza imperativa di passi chì duvete recità in l'ordine ghjusta.
Questu cambiamentu architettonicu hà cunsequenze pratiche chì vanu oltre a velocità. Quandu un Dockerfile multi-stage compile un Go binariu in una tappa, scarica e dipendenze Node.js in un altru, è assemble una maghjina di produzzione in un terzu, BuildKit pò eseguisce i primi dui tappe simultaneamente. Una custruzzione chì prima durava quattru minuti nantu à un putente corridore CI si compie avà in menu di novanta seconde. Stripe, Shopify è decine di altre squadre di ingegneria di alta scala anu documentatu guadagni simili in i so retrospettivi interni di l'uttellu. U mudellu DAG significa ancu chì BuildKit pò generà metadati di custruzzione assai precisi - una basa per funzioni cum'è l'attestazione di provenienza è a generazione di fattura di software (SBOM) chì importa enormamente per a sicurità di a catena di supply.
Ci hè ancu un cambiamentu conceptuale in u funziunamentu di l'invalidazione di cache. U custruttore classicu hà invalidatu ogni strata sottu à qualsiasi struzzione cambiata. BuildKit traccia l'hash di cuntenutu à ogni input, cusì cambià un cumentu in un Dockerfile ùn sguassate micca una entrata di cache chì rapprisenta trenta minuti di compilazione. Quandu u vostru cache di creazione hè a diffarenza trà un loop di feedback di cinque minuti è di quaranta minuti per a vostra squadra di ingegneria, sta precisione importa assai più di ciò chì puderia pare inizialmente.
Custruzioni multipiattaforma: un cumandamentu, ogni architettura
U flag --platform di BuildKit è l'integrazione QEMU trasformanu ciò chì una volta era un prublema di coordinazione multi-sistema doloroso in un solu cumandamentu. Eseguisce docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 . produce trè imagine pronte per a produzzione in parallelu da una sola invucazione di custruzzione. Sta capacità hè diventata critica cum'è l'industria si sposta versu ARM - L'istanze AWS Graviton3 offrenu sempre un rendimentu di prezzu 40% megliu nantu à carichi di travagliu cum'è u serviziu web è l'elaborazione di dati, è Apple Silicon hà fattu ARM a macchina di sviluppu predeterminata per milioni di ingegneri.
Prima chì u supportu multi-piattaforma di BuildKit sia maturatu, u mantenimentu di pipeline di custruzzione separati per diverse architetture era un veru centru di costu. E squadre anu mantenutu più Dockerfiles, eseguiu pipeline CI separati in corridori di architettura diversa, o simpricimenti spedite l'imaghjini x86 in ogni locu è paganu a penalità di prestazione nantu à l'infrastruttura ARM. Cù BuildKit, definisce a vostra custruzione una volta è lasciate chì u sistema gestisce a compilazione specifica di l'architettura in modo trasparente. Prughjetti Rust chì necessitanu di cumpilazione incruciata, Prughjetti Go cù dipendenze CGO, Pacchetti Python cù estensioni C - BuildKit gestisce a strata di emulazione senza bisognu di capisce i dettagli di ogni piattaforma di destinazione.
U valore praticu cummerciale quì hè misurabile. Un squadra chì gestisce 200 containeri in istanze AWS Graviton à $ 0,04 per ora vCPU versus l'istanza x86 equivalente à $ 0,056 per ora vCPU risparmia circa $ 11,520 annu per 100 vCPU - puramente da a scelta di l'architettura ghjusta. Fà sta scelta accessibile senza un sforzu di reingenieria hè esattamente u tipu di ottimisazione di l'infrastruttura chì si paga immediatamente.
Gestione secreta senza filtrazione in strati d'imaghjini
Una di e funzioni BuildKit più sottovalutate hè a so API di secreti. U custruttore Docker classicu ùn avia micca un modu pulitu per passà credenziali in una custruzzione senza chì queste credenziali puderanu finiscinu in una capa d'imaghjini. I sviluppatori anu travagliatu annantu à questu cù custruzzioni in più fasi, istruzioni ARG, è ordine attentu - ma u risicu di coce accidentalmente una chjave API o una chjave privata SSH in una maghjina spedita restava sgradamente altu. I scanners di sicurezza trovanu di routine credenziali codificate in l'imaghjini di u containeru publicate in i registri publichi, è parechji di quelli fughe rintraccianu direttamente à a gestione segreta goffa durante e custruzzioni.
U flag --secret di
BuildKit monta dati sensibili in l'ambienti di custruzzione cum'è un percorsu tempurale di u sistema di filesystem chì esiste solu per a durata di l'istruzzione specifica RUN chì ne hà bisognu è ùn tocca mai alcuna capa d'imaghjini. Una struzzione di Dockerfile cum'è RUN --mount=type=secret,id=npmrc cat /run/secrets/npmrc > ~/.npmrc && npm install dà à u prucessu di custruzzione l'accessu à e credenziali private npm senza chì queste credenziali appariscenu mai in l'imaghjini finali o qualsiasi strata intermediata. U listessu mudellu funziona per e credenziali PyPI, paràmetri Maven, chjavi SSH per repositori Git privati, è qualsiasi altru materiale sensibile chì u vostru prucessu di creazione necessita.
Per i squadre chì custruiscenu software chì tocca à l'industrie regulate - piattaforme sanitarie, prudutti fintech, software HR - a diffarenza trà "i credenziali ponu esse in l'imaghjini" è "i credenziali ùn ponu micca esse in l'imaghjini" hè a diffarenza trà passà un auditu di sicurezza è passà trè settimane per rimediare i risultati. Piattaforme cum'è Mewayz, chì alimentanu l'operazioni cummerciale per più di 138.000 utenti in settori cum'è a paga, HR, è fatturazione, dipendenu esattamente da stu tipu di postu di sicurezza dimostrabile in i so pipeline di custruzzione è implementazione per mantene a fiducia chì i clienti stendenu à i so dati finanziarii è persunali sensibili.
Esportazioni di cache: rende i pipeline CI veramente veloci
I pipelines CI sò induve u rendiment di creazione importa più è induve l'esperienza di creazione di Docker predeterminata hè stata storicamente più dolorosa. I corridori CI freschi di solitu cumincianu cù cache vioti, chì significa chì ogni corsa di pipeline ricompile tuttu da zero. Per un serviziu Java cù centinaie di dipendenze Maven, un prughjettu Rust, o una applicazione Python cù estensioni native pesanti, questu significa i tempi di custruzzione misurati in decine di minuti invece di seconde. U costu cummerciale di CI lento hè enormu - frequenza di implementazione ridotta, cicli di feedback più longu, è ingegneri chì stanu inattivu aspittendu chì i pipelines finiscinu prima di pudè unisce è avanzà.
A funzione di esportazione di cache di BuildKit risolve questu cù manifesti di cache esportabili. Utilizendu --cache-to type=registry,ref=myregistry/myapp:cache è --cache-from type=registry,ref=myregistry/myapp:cache, BuildKit spinge un snapshot cache detallatu à un registru dopu ogni custruzzione è tira à l'iniziu di u prossimu. A cache hè indirizzata à u cuntenutu, cusì solu i strati veramente cambiati sò ricuperati. E squadre chì utilizanu stu mudellu in GitHub Actions, GitLab CI, è CircleCI taglianu rutinariamente i tempi di pipeline da quindici minuti à menu di trè in corse successive. A documentazione propria di GitHub nantu à i flussi di travagliu avanzati di creazione di Docker ricumanda assai stu mudellu per esattamente questu mutivu.
A custruzione più veloce hè quella chì ùn avete mai più eseguitu. U sistema di cache di BuildKit in strati, indirizzatu à u cuntenutu ùn hè micca solu accelerà e custruzzioni - rende l'interu cuncettu di una "custruzzione" più intelligente, trasfurmendu una compilazione ripetuta in una differenza incrementale di esattamente ciò chì hà cambiatu.
L'esportazioni di cache si integranu ancu in modu pulitu cù i flussi di travagliu di sviluppu basatu in filiale. Pudete cunfigurà u vostru pipeline CI per falà da un cache specificu di ramu à a cache di ramu principale quandu ùn esiste micca cache di ramu, chì significa chì e rami novi benefizianu immediatamente da a cache calda accumulata da a vostra linea di sviluppu principale. L'ingegneri ricevenu un feedback rapidu da u so primu impegnu nantu à una nova filiale invece di aspittà per una penalità di partenza à freddo.
💡 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: Custruisce oltre i Dockerfiles
Forse a capacità menu cunnisciuta di BuildKit hè chì i Dockerfiles sò solu un furmatu di input pussibule - micca l'unicu. BuildKit hà una architettura di frontend pluggable chì permette lingue è formati di definizione di custruzzione cumpletamente persunalizati. U frontend hè specificatu da a direttiva
# syntax=à a cima di u vostru schedariu di custruzzione, chì dice à BuildKit di piglià una maghjina di frontend particulare è l'utilizanu per analizà è eseguisce u restu di u schedariu.Questa architettura hà permessu parechji prughjetti cunvincenti. L'integrazione di Buildpacks permette à BuildKit di custruisce l'imaghjini di u containeru da u codice fonte di l'applicazione senza alcun Dockerfile - rileva a lingua, sceglie l'imaghjini di basa adattate, è assembla automaticamente un containeru prontu per a produzzione. L'HPC è e cumunità di l'informatica scientifica anu utilizatu frontends persunalizati per descriverà e custruzzioni in lingue specifiche di u duminiu chì compilanu finu à a rapprisintazioni interna LLB (Low-Level Build) di BuildKit. A sintassi di u frontend di
docker/dockerfile:labssperimenta cù funzioni cum'è supportu heredoc,--networkcuntrollu per istruzzioni, è cunsiglii di cache rinfurzati prima di sbarcà in una sintassi stabile di Dockerfile.A capacità di definisce u vostru propiu frontend significa ancu chì l'urganisazioni cù esigenze di custruzzione inusual ùn anu micca bisognu di sceglie trà "shoehorn everything into Dockerfile syntax" è "abbandunà i cuntenituri cumpletamente". Un firmware FPGA di team building, l'imaghjini di sistemi integrati, o cuntenituri di mudelli ML specializati ponu descriverà a so custruzzione in termini chì anu un sensu per u so duminiu mentre pruducenu l'imaghjini standard di cuntainer conformi à l'OCI chì implementanu in ogni locu chì i cuntenituri scorri. Questa estensibilità hè un veru vantaghju architettonicu annantu à i sistemi di custruzzione chì trattanu u so formatu di input cum'è fissu.
Province and SBOM: Building for the Post-SolarWinds World
A sicurezza di a catena di fornitura di u software si trasfirìu da a preoccupazione teorica à a priorità à livellu di bordu dopu a violazione di SolarWinds in 2020 è a vulnerabilità di Log4Shell in 2021. L'Ordine Esecutivu 14028 di u guvernu di i Stati Uniti nantu à a cibersecurità, emessu in maghju 2021, hà mandatu una fattura di materiale di software per i contractanti federali. L'attestazioni di provenienza di BuildKit è e funzioni di generazione SBOM sò una risposta diretta à stu paisaghju di regulazione è di sicurità.
Cù i bandieri
--provenance=trueè--sbom=true, BuildKit genera attestazioni firmate criptograficamente chì descrizanu esattamente ciò chì hè andatu in una maghjina di cuntainer - quali imaghjini di basa sò stati aduprati, quali struzzioni Dockerfile eseguite, quali fugliali fonte eranu prisenti, è quali dipendenze esterne sò state pigliate. Queste attestazioni seguitanu u framework SLSA (Livelli di supply-chain for Software Artifacts) è u formatu di attestazione in-toto, facenduli verificabili da a macchina da i mutori di pulitica cum'è Cosign di Sigstore è OPA (Agente di pulitica aperta).U flussu di travagliu praticu chì permette questu hè cusì:
- U sviluppatore spinge u codice; A pipeline CI attiva una build BuildKit cù a provenienza attivata.
- BuildKit genera un SBOM firmatu chì lista tutti i cumpunenti è e so versioni.
- U SBOM hè publicatu à u registru di u containeru à fiancu à u manifestu di l'imaghjini.
- I cuntrolli di ammissione in u cluster Kubernetes verificanu a provenienza prima di permette l'implementazione.
- Scanners di vulnerabilità dumandanu u SBOM per identificà l'imaghjini affettati quandu i novi CVE sò divulgati.
E squadre chì implementanu stu pipeline cumpletu ponu risponde à divulgazioni di vulnerabilità in ore piuttostu chè in ghjorni, perchè anu una mappa precisa, leggibile da a macchina di ogni cumpunente in ogni containeru in esecuzione. Per l'imprese cum'è Mewayz chì s'integranu profondamente in i flussi di travagliu operativi di i clienti - gestione di paghe, gestione di dati di flotta, trasfurmazioni di fatture - l'abilità di dimustrà una catena di fornitura rigorosa è verificabile hè sempre più un prerequisitu per e conversazioni di vendita di l'impresa, micca solu un piacevule à avè.
Inizià: da e versioni predefinite à i pipeline avanzati
BuildKit hè digià in esecuzione in u vostru ambiente Docker s'è vo aduprate una versione recente - Docker 23.0 è più tardi attivate per automaticamente. U primu passu praticu per a maiò parte di e squadre hè di attivà u plugin Docker Buildx, chì espone l'inseme cumpletu di funzioni di BuildKit attraversu u sottucumandamentu
docker buildx. L'esecuzione didocker buildx create --usecrea un'istanza di costruttore BuildKit con più capacità che il driver predefinito. Da quì, l'adopzione incrementale di funzioni avanzate hè sensu piuttostu chè di pruvà à aduttà tuttu in una volta.Un percorsu d'adopzione raghjone per una squadra chì attualmente face invucazioni basiche di
docker buildpare chì aghjunghjenu prima esportazioni di cache à CI - questu furnisce miglioramenti di velocità immediati, misurabili cù un cambiamentu minimu di cunfigurazione. E custruzzioni multipiattaforma diventanu preziose quandu a squadra principia à indirizzà l'infrastruttura ARM. A muntazione secreta vale a pena aduttà ogni volta chì i registri di pacchetti privati o e chjave SSH appariscenu in u cuntestu di custruzzione. L'attestazioni di provenienza anu sensu per attivà quandu i requisiti di cunfurmità o e richieste di i clienti di l'impresa rende necessaria a documentazione di a catena di fornitura.A lezione più profonda di BuildKit hè di custruisce deliberatamente. Sia chì spedite un containeru per un microserviziu, un endpoint di inferenza di apprendimentu di macchina, o una piattaforma cumplessa cum'è a suite di Mewayz di 207 moduli di cummerciale, u prucessu di creazione ùn hè micca una formalità chì vi precipite in a strada di implementazione - hè un artefattu ingegneria chì riflette a qualità, a postura di sicurezza è a maturità operativa di tuttu ciò chì spedisce fora di questu. BuildKit vi dà l'arnesi per fà quellu artefattu eccellente. A quistione hè simplicemente se pigliate u tempu per aduprà.
Domande Frequenti
Chì hè BuildKit è cumu hè diversu da u classicu sistema di creazione Docker?
BuildKit hè u mutore di creazione di a prossima generazione di Docker, introduttu in Docker 18.09 è hà fattu u predefinitu in Docker 23.0. A cuntrariu di u builder classicu, BuildKit supporta l'esecuzione di strati paralleli, strategie avanzate di caching, muntazione di secreti è custruzzioni multipiattaforma. Tratta u prucessu di creazione cum'è un graficu aciclicu direttu (DAG), chì permette una risoluzione di dependenza più intelligente è tempi di creazione drammaticamente più veloci per Dockerfiles cumplessi è multi-stadi.
Aghju bisognu di installà qualcosa extra per cumincià à aduprà BuildKit cù Docker?
Nessuna installazione supplementaria hè necessaria se eseguite Docker 23.0 o più tardi - BuildKit hè attivatu per difettu. Nant'à e versioni più vechje, pudete attivà si stabilisce a variabile d'ambiente
DOCKER_BUILDKIT=1prima di eseguisce i vostri cumandamenti di custruzzione. Per i casi d'utilizazione avanzati cum'è cache di custruzzione remota o build multi-piattaforma, pudete vulete cunfigurà una istanza di Buildx Buildx dedicata utilizendudocker buildx create.U BuildKit pò esse usatu per custruisce artefatti oltre l'imaghjini standard di u containeru ?
Iè, è questu hè una di e capacità più sottovalutate di BuildKit. Utilizendu frontends persunalizati è a bandiera
--output, BuildKit pò pruduce binari crudi, tarballs, siti web statici, è altri artefatti di fugliali arbitrarii - micca solu imagine OCI. Questu face un mutore di custruzzione di u scopu generale chì si inserisce naturalmente in monorepos poliglotti è pipeline CI cumplessi induve e diverse squadre necessitanu formati di output differenti da una catena di strumenti unificata.Come si inserisce BuildKit in una piattaforma DevOps più larga cù strumenti cum'è Mewayz?
BuildKit gestisce u livellu di custruzzione di bassu livellu, ma i squadre di sviluppu muderni anu ancu bisognu di gestisce i flussi di travagliu cummerciale, a consegna di i clienti è i prucessi operativi. Piattaforme cum'è Mewayz - un SO cummerciale di 207 moduli chì partenu da $ 19 / mo - cumplementanu l'uttellu di l'infrastruttura coprendu u latu operativu di l'imprese di software. L'accoppiamentu di pipeline di costruzione efficienti alimentati da BuildKit cù una piattaforma all-in-one cum'è Mewayz dà à e squadre una pila cumpleta da l'artefattu di codice à a consegna à i clienti.
We use cookies to improve your experience and analyze site traffic. Cookie Policy