BuildKit: Докеровиот скриен скапоцен камен што може да изгради речиси сè
Коментари
Mewayz Team
Editorial Team
BuildKit: скриениот скапоцен камен на Docker што може да изгради речиси сè
Повеќето програмери го знаат Docker како време на траење на контејнер што го промени начинот на испорака на софтверот. Многу помалку знаат за моторот што тивко потпевнува под површината на секоја модерна конструкција на Docker - BuildKit, следната генерација на систем за градење што се испорачува со Docker од верзијата 18.09 и стана стандардна заднина во Docker 23.0. Додека инженерите бескрајно се расправаат за конфигурациите и шемите на микросервис на Kubernetes, BuildKit постојано се развива во еден од најмоќните, флексибилни системи за градење во екосистемот DevOps. Ако сте го третирале како само побрза докер build, оставате огромна способност на масата. Компаниите кои работат на CI/CD цевководи со висока пропусност го намалија времето на изградба за 50-70% едноставно со тоа што разбраа што всушност нуди BuildKit - и тоа е само почеток.
Што го прави BuildKit фундаментално различен од класичниот Builder
Оригиналниот мотор за изградба на Docker ги извршуваше инструкциите за Dockerfile последователно, еден слој во исто време, без свесност за тоа каква работа може безбедно да се случи паралелно. BuildKit го заменува тој линеарен модел на извршување со насочен ацикличен график (DAG) - графикон на зависност кој разбира кои чекори на градење се потпираат еден на друг, а кои не. Независните фази се извршуваат истовремено, неискористените фази се целосно прескокнати, а целата изработка станува декларативен опис на она што го сакате наместо императивна низа чекори што треба да ги изрецитирате по правилен редослед.
Оваа архитектонска промена има практични последици кои ја надминуваат брзината. Кога повеќестепен Dockerfile составува Go бинарно во една фаза, презема зависности на Node.js во друга и составува слика за производство во трета, BuildKit може да ги извршува првите две фази истовремено. Изградбата која претходно траеше четири минути на моќниот CI тркач сега завршува за помалку од деведесет секунди. Stripe, Shopify и голем број други инженерски тимови од висок размер документираа слични придобивки во нивните внатрешни ретроспективи за алатки. Моделот DAG, исто така, значи дека BuildKit може да генерира многу прецизни метаподатоци за изградба - основа за карактеристики како што се потврди за потекло и генерирање софтверска сметка за материјали (SBOM) кои се многу важни за безбедноста на синџирот на снабдување.
Постои и концептуална промена во начинот на кој функционира неважењето на кешот. Класичниот builder го поништи секој слој под секоја изменета инструкција. BuildKit ги следи хашовите на содржината на секој влез, така што менувањето коментар во Dockerfile не го отфрла записот во кешот што претставува триесет минути компилација. Кога вашата кеш меморија е разликата помеѓу петминутната и четириесетминутната јамка за повратни информации за вашиот инженерски тим, оваа прецизност е многу повеќе важна отколку што првично може да изгледа.
Изградби на повеќе платформи: една команда, секоја архитектура
Знамето --platform на BuildKit и интеграцијата QEMU го трансформираат она што некогаш беше болен проблем за координација на повеќе системи во една команда. Извршувањето на docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 . произведува три слики подготвени за производство паралелно од едно повикување на изградбата. Оваа способност стана критична бидејќи индустријата се префрла кон ARM - примероците на AWS Graviton3 постојано обезбедуваат 40% подобри перформанси во цената на оптоварувањата, како што се веб сервисирање и обработка на податоци, а Apple Silicon ја направи ARM стандардна машина за развој за милиони инженери.
Пред да созрее поддршката за повеќе платформи на BuildKit, одржувањето на одделни цевководи за изградба за различни архитектури беше вистински центар за трошоци. Тимовите или одржуваа повеќе Dockerfiles, работеа одделни CI цевководи на различно архитектонски тркачи или едноставно испраќаа x86 слики насекаде и ја платија казната за изведба на инфраструктурата на ARM. Со BuildKit, вие ја дефинирате вашата градба еднаш и му дозволувате на системот транспарентно да се справи со компилацијата специфична за архитектурата. Rust проекти кои бараат вкрстена компилација, Go проекти со CGO зависности, Python пакети со C екстензии - BuildKit се справува со слојот за емулација без да бара од вас да ги разберете деталите за секоја целна платформа.
Практичната деловна вредност овде е мерлива. Тим кој работи со 200 контејнери на примероци на AWS Graviton со 0,04 $ по vCPU-час наспроти еквивалентниот пример x86 од 0,056 $ по vCPU-час заштедува приближно 11.520 $ годишно на 100 vCPU - чисто од изборот на вистинската архитектура. Да се направи тој избор достапен без напор за повторно инженерство е токму таков вид на оптимизација на инфраструктурата што се исплати веднаш.
Тајно управување без протекување во слоевите на сликата
Една од најнеценетите карактеристики на BuildKit е неговиот тајни API. Класичниот градител на Docker немаше чист начин да ги пренесе ингеренциите во верзија без тие акредитиви потенцијално да завршат во слој на слика. Програмерите работеа околу ова со изработка на повеќе фази, инструкции ARG и внимателно нарачување - но ризикот од случајно печење клуч API или приватен SSH клуч во испратената слика остана непријатно висок. Безбедносните скенери рутински наоѓаат тврдокодирани ингеренции во сликите на контејнери објавени во јавните регистри, а многу од тие протекувања директно се навраќаат на несмасното ракување со тајни за време на изработката.
--secret на BuildKit ги монтира чувствителните податоци во околината за градење како привремена патека на датотечен систем што постои само за времетраењето на специфичната инструкција RUN на која и е потребна и никогаш не допира ниту еден слој на слика. Инструкција за Dockerfile како RUN --mount=type=secret,id=npmrc cat /run/secrets/npmrc > ~/.npmrc && npm install му дава пристап на процесот на градење до приватните npm ингеренциите без тие акредитиви да се појавуваат на последната слика или било кој средно слој. Истата шема работи за ингеренциите за PyPI, поставките за Maven, клучевите SSH за приватните складишта на Git и кој било друг чувствителен материјал што го бара вашиот процес на градење.
За тимови кои градат софтвер кој допира регулирани индустрии - здравствени платформи, производи за финална технологија, софтвер за човечки ресурси - разликата помеѓу „акредитациите може да се на сликата“ и „акредитивите не може да се докажуваат на сликата“ е разликата помеѓу полагање безбедносна ревизија и трошење три недели за поправање на наодите. Платформите како Mewayz, кои ги напојуваат деловните операции за над 138.000 корисници низ индустриите како што се платен список, човечки ресурси и фактурирање, зависат токму од овој вид докажлива безбедносна положба во нивните цевководи за изградба и распоредување за да ја задржат довербата што тие клиенти ја даваат на нивните чувствителни финансиски и персонални податоци.
Извоз на кеш: правење CI Pipelines всушност брзи
ЦИ цевководите се местата каде што перформансите на изградбата се најважни и каде стандардното искуство за изградба на Docker историски било најболно. Свежите CI тркачи обично започнуваат со празни кешови, што значи дека секое пуштање на нафтоводот прекомпајлира сè од нула. За Java-услуга со стотици зависности од Maven, проект Rust или апликација Python со тешки природни екстензии, ова значи дека времето на градење се мери во десетици минути наместо во секунди. Деловната цена на бавниот CI е огромна - намалена фреквенција на распоредување, подолги циклуси за повратни информации и инженери кои седат во мирување чекајќи да завршат цевководите пред да можат да се спојат и да продолжат понатаму.
Функцијата за извоз на кешот на BuildKit го решава ова со манифестации за извезување на кешот. Користејќи --cache-to type=registry,ref=myregistry/myapp:cache и --cache-from type=registry,ref=myregistry/myapp:cache, BuildKit турка детална слика од кешот во регистарот по секое наредно изградување и повлекување на следното изградување. Кешот е адресиран со содржина, така што само вистински променетите слоеви повторно се преземаат. Тимовите што ја користат оваа шема во GitHub Actions, GitLab CI и CircleCI рутински го намалуваат времето на цевководот од петнаесет минути на помалку од три на следните работи. Сопствената документација на GitHub за напредните работни текови на изградбата на Docker во голема мера ја препорачува оваа шема токму поради оваа причина.
Најбрзата изработка е онаа што никогаш повеќе не треба да ја извршите. Слоевитиот кеш систем на BuildKit, адресиран со содржина, не само што ги забрзува градбите - го прави целиот концепт на „изградба“ попаметен, претворајќи ја повторената компилација во зголемена разлика на точно она што се променило.
Извозот на кеш исто така чисто се интегрира со работните текови за развој базирани на гранки. Можете да го конфигурирате вашиот гасовод CI да се враќа од кешот специфичен за гранка во кешот на главната гранка кога нема кеш на гранка, што значи дека новите гранки веднаш имаат корист од топлиот кеш акумулиран од вашата главна развојна линија. Инженерите добиваат брзи повратни информации од нивното прво извршување на нова гранка наместо да чекаат казна за ладен почеток.
💡 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 →Frontends на BuildKit: Building Beyond Dockerfiles
Можеби најмалку познатата способност на BuildKit е тоа што Dockerfiles се само еден можен влезен формат - не и единствениот. BuildKit има приклучлива архитектура на предниот дел што овозможува целосно приспособени јазици и формати за дефиниција за градба. Предниот дел е одреден со директивата # syntax= на врвот на вашата датотека за изградба, која му кажува на BuildKit да повлече одредена слика на предниот дел и да ја користи за анализа и извршување на остатокот од датотеката.
Оваа архитектура овозможи неколку привлечни проекти. Интеграцијата на Buildpacks му овозможува на BuildKit да создава слики од контејнери од изворниот код на апликацијата без воопшто Dockerfile - го детектира јазикот, избира соодветни основни слики и автоматски составува контејнер подготвен за производство. HPC и научните компјутерски заедници користеа прилагодени предни делови за опишување на градби на јазици специфични за домен кои се компајлираат до внатрешната репрезентација на LLB (Изградба на ниско ниво) на BuildKit. Експериментите на предниот дел на синтаксата docker/dockerfile:labs со функции како поддршка за heredoc, контрола на --network по инструкција и подобрени навестувања за кешот пред да слетаат во стабилна синтакса на Dockerfile.
Способноста да го дефинирате вашиот сопствен фронт, исто така, значи дека организациите со необични барања за градба не мора да избираат помеѓу „сè да префрлат во синтаксата на Dockerfile“ и „целосно да ги напуштат контејнерите“. Фирмверот на FPGA за градење тим, слики од вградени системи или специјализирани контејнери за ML модели може да ја опишат нивната градба со термини што имаат смисла за нивниот домен, додека сè уште произведуваат стандардни слики од контејнери усогласени со OCI кои се распоредуваат насекаде каде што се извршуваат контејнерите. Оваа екстензибилност е вистинска архитектонска предност во однос на системите за градење кои го третираат нивниот влезен формат како фиксен.
Извор и SBOM: Градење за пост-Соларни ветрови светот
Безбедноста на синџирот на снабдување на софтвер се пресели од теоретска грижа на приоритет на ниво на табла по пробивањето на SolarWinds во 2020 година и ранливоста на Log4Shell во 2021 година. Атестирањата за потекло на BuildKit и карактеристиките за генерирање SBOM се директен одговор на овој регулаторен и безбедносен пејзаж.
Со знаменцата --provenance=true и --sbom=true, BuildKit генерира криптографски потпишани потврди кои точно опишуваат што влегувало во сликата на контејнер - кои основни слики биле користени, кои инструкции на Dockerfile биле извршени, кои изворни датотеки биле присутни и кои надворешни датотеки биле присутни. Овие потврди ја следат рамката SLSA (Нивоа на синџирот на снабдување за софтверски артефакти) и форматот за атестирање во тото, што ги прави машински проверливи од мотори на политики како што се Sigstore's Cosign и OPA (Отворен агент за политики).
Практичниот работен тек што го овозможува ова изгледа вака:
- Програмерот го турка кодот; CI гасоводот активира BuildKit со овозможена потекло.
- BuildKit генерира потпишан SBOM кој ги наведува сите компоненти и нивните верзии.
- SBOM се објавува во регистарот на контејнери заедно со манифестот на сликата.
- Контролорите за прием во кластерот Kubernetes ја потврдуваат потеклото пред да дозволат распоредување.
- Скенерите за ранливост го бараат SBOM за да ги идентификуваат погодените слики кога се откриваат нови CVE.
Тимовите што го имплементираат овој целосен гасовод може да одговорат на обелоденувањата на ранливоста за часови, а не за денови, бидејќи имаат прецизна, машински читлива карта на секоја компонента во секој контејнер што работи. За бизнисите како Mewayz кои длабоко се интегрираат во оперативните работни процеси на клиентите - водење на платен список, управување со податоци за флотата, обработка на фактури - способноста да се демонстрира ригорозен синџир на снабдување што може да се ревидира е сè повеќе предуслов за разговори за продажба на претпријатието, а не само за пријатен.
Започнување: од стандардни градби до напредни цевководи
BuildKit веќе работи во вашата Docker околина ако користите неодамнешна верзија - Docker 23.0 и подоцна овозможете ја стандардно. Првиот практичен чекор за повеќето тимови е овозможување на додатокот Docker Buildx, кој го изложува целосниот сет на функции на BuildKit преку подкомандата docker Buildx. Извршувањето на docker buildx create --use поставува примерок на градител на BuildKit со поголема способност од стандардниот двигател. Оттука, постепеното усвојување на напредните функции има смисла наместо да се обидувате да прифатите сè одеднаш.
Разумната патека за усвојување за тим што моментално врши основни повикувања на docker build изгледа како прво додавање извоз на кеш во CI - ова обезбедува моментални, мерливи подобрувања на брзината со минимална промена на конфигурацијата. Изградбите со повеќе платформи стануваат вредни кога тимот ќе почне да ја таргетира инфраструктурата на АРМ. Тајното монтирање вреди да се усвои во секое време кога се појавуваат приватни регистри на пакети или клучеви SSH во контекст на изградбата. Потврдите за потеклото имаат смисла да се овозможат кога барањата за усогласеност или барањата на клиентите на претпријатието ја прават потребна документацијата за синџирот на снабдување.
Подлабоката лекција на BuildKit е за намерно градење. Без разлика дали испраќате контејнер за микросервис, крајна точка за заклучоци за машинско учење или сложена платформа како што е пакетот на Mewayz од 207 деловни модули, процесот на градење не е формалност преку која брзате на патот до распоредувањето - тоа е инженерски артефакт што го одразува квалитетот, безбедносната положба и оперативната зрелост на сè што е тоа. BuildKit ви ги дава алатките за да го направите тој артефакт одличен. Прашањето е едноставно дали одвојувате време да ги користите.
Често поставувани прашања
Што е BuildKit и како се разликува од класичниот систем за градење Docker?
BuildKit е следната генерација на моторот за градење на Docker, претставен во Docker 18.09 и стана стандарден во Docker 23.0. За разлика од класичниот градител, BuildKit поддржува паралелно извршување на слоеви, напредни стратегии за кеширање, монтажа на тајни и градби на повеќе платформи. Тој го третира процесот на градење како насочен ацикличен график (DAG), овозможувајќи попаметна резолуција на зависноста и драматично побрзо време на градење за сложени, повеќестепени Dockerfiles.
Дали треба да инсталирам нешто дополнително за да почнам да го користам BuildKit со Docker?
Не е потребна дополнителна инсталација ако користите Docker 23.0 или понова верзија - BuildKit е стандардно овозможен. На постарите верзии, можете да го активирате со поставување на променливата на околината DOCKER_BUILDKIT=1 пред да ги извршите командите за изградба. За случаи на напредна употреба, како што се кешовите за далечинско градење или градбите со повеќе платформи, можеби ќе сакате да конфигурирате посебен примерок на градител на Buildx користејќи docker buildx create.
Дали BuildKit може да се користи за создавање артефакти надвор од стандардните слики од контејнери?
Да, и ова е една од најнеценетите способности на BuildKit. Користејќи прилагодени предни страници и знаменцето --output, BuildKit може да произведува необработени бинарни датотеки, тарболи, статични веб-локации и други произволни артефакти на датотеки - не само OCI слики. Ова го прави мотор за општа намена, кој природно се вклопува во полиглотни монорепо и сложени CI цевководи каде што на различни тимови им требаат различни излезни формати од унифициран синџир на алатки.
Како BuildKit се вклопува во поширока платформа DevOps заедно со алатки како Mewayz?
BuildKit се справува со слојот за градење на ниско ниво, но современите развојни тимови исто така треба да управуваат со деловните работни текови, испораката на клиентите и оперативните процеси. Платформите како Mewayz - деловен оперативен систем со 207 модули со почеток од 19 $/месечно - ја надополнуваат опремата за инфраструктура со покривање на оперативната страна на софтверските бизниси. Спарувањето на ефикасни цевководи за изградба напојувани од BuildKit со платформа сè-во-едно како Mewayz им дава на тимовите целосен куп од артефакт на код до испорака на клиентите.
.Try Mewayz Free
All-in-one platform for CRM, invoicing, projects, HR & more. No credit card required.
Get more articles like this
Weekly business tips and product updates. Free forever.
You're subscribed!
Start managing your business smarter today
Join 30,000+ businesses. Free forever plan · No credit card required.
Ready to put this into practice?
Join 30,000+ businesses using Mewayz. Free forever plan — no credit card required.
Start Free Trial →Related articles
Hacker News
The tool that won't let AI say anything it can't cite
Apr 10, 2026
Hacker News
YouTube locked my accounts and I can't cancel my subscription
Apr 10, 2026
Hacker News
CollectWise (YC F24) Is Hiring
Apr 10, 2026
Hacker News
Afrika Bambaataa, hip-hop pioneer, has died
Apr 10, 2026
Hacker News
Installing OpenBSD on the Pomera DM250{,XY?}
Apr 10, 2026
Hacker News
The Raft consensus algorithm explained through "Mean Girls" (2019)
Apr 10, 2026
Ready to take action?
Start your free Mewayz trial today
All-in-one business platform. No credit card required.
Start Free →14-day free trial · No credit card · Cancel anytime