Hacker News

BuildKit: Докерның яшерен асылташы, теләсә нәрсә диярлек төзи ала

Аңлатмалар

2 min read Via tuananh.net

Mewayz Team

Editorial Team

Hacker News

BuildKit: Докерның яшерен асылташы, ул теләсә нәрсә диярлек төзи ала

Күпчелек уйлап табучылар Докерны контейнер эш вакыты дип беләләр, бу программа тәэминатының ничек җибәрелүен үзгәртте. Motorәрбер заманча Docker корпусы - BuildKit, 18.09 версиясеннән Docker белән җибәрелә торган һәм Docker 23.0'ның демократик арткы өлеше булган двигатель турында тыныч кына тавыш ишетә. Инженерлар Кубернетес конфигурацияләре һәм микросервис үрнәкләре турында чиксез бәхәсләшсәләр дә, BuildKit тотрыклы рәвештә DevOps экосистемасында иң көчле, сыгылмалы төзелеш системасына әверелә. Әгәр дә сез аны тизрәк <код> докер төзү кебек кабул итәсез икән, сез өстәлдә бик зур мөмкинлек калдырасыз. Cгары үткәргеч CI / CD торба үткәргечләре белән эшләүче компанияләр BuildKitның нәрсә тәкъдим иткәнен аңлап кына төзү вакытын 50-70% кыскарттылар - һәм бу әле башлангыч кына.

BuildKit классик төзүчедән төптән нәрсә аера

Оригиналь Docker двигателе Dockerfile күрсәтмәләрен эзлекле рәвештә башкарды, параллель рәвештә нинди эшнең куркынычсыз була алуын белмичә. BuildKit бу сызыклы башкару моделен юнәлтелгән аклик график (DAG) белән алыштыра - бәйләнешле график, ул адымнарның бер-берсенә таянганын һәм булмаганын аңлый. Бәйсез этаплар бер үк вакытта башкарыла, кулланылмаган этаплар бөтенләй атлап китәләр, һәм бөтен төзү дөрес тәртиптә укырга тиеш адымнарның эзлекле эзлеклелеге түгел, ә сез теләгән әйбернең декларатив тасвирламасына әверелә.

Бу архитектур сменаның тизлектән арткан практик нәтиҗәләре бар. Күп этаплы Dockerfile бер этапта Go бинарын туплаганда, Node.js бәйләнешләрен икенчесендә йөкләгәндә һәм өченчесендә җитештерү образын җыйганда, BuildKit беренче ике этапны берьюлы эшли ала. Моңарчы көчле CI йөгерүчегә дүрт минут вакыт кирәк булган төзелеш хәзер туксан секунд эчендә тәмамлана. Стрип, Шопифе һәм башка бик зур масштаблы инженер коллективлары эчке кораллау ретроспективаларында охшаш табышны документлаштырдылар. DAG моделе шулай ук BuildKit бик төгәл төзү мета-мәгълүматларын булдыра алуын аңлата - прованс аттестациясе һәм программа тәэминаты кәгазе (SBOM) буыннары тәэмин итү чылбыры куркынычсызлыгы өчен бик мөһим.

Кэшны инвалидлаштыруның эшләвендә концептуаль смена бар. Классик төзүче үзгәртелгән күрсәтмә астындагы һәр катламны юкка чыгарды. BuildKit һәр кертүдә эчтәлек хэшләрен күзәтә, шуңа күрә Dockerfile'тагы аңлатманы үзгәртү утыз минутлык компиляцияне күрсәтүче кэш язмасын шартлатмый. Сезнең кэш сезнең инженер коллективыгыз өчен биш минутлык һәм кырык минутлык кире әйләнеш арасындагы аерма булганда, бу төгәллек башта күренгәннән күпкә мөһимрәк.

Күп платформа төзи: бер боерык, һәр архитектура

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 ярдәмендә сез үз төзелешегезне бер тапкыр билгелисез һәм системага архитектура компиляциясен ачык итеп эшләргә рөхсәт итәсез. Кросс-компиляция таләп итә торган дат проектлары, CGO бәйләнешләре булган проектлар, C киңәйтмәләре белән Python пакетлары - BuildKit һәрбер максатлы платформаның детальләрен аңлавыгызны таләп итмичә эмуляция катламын эшкәртә.

Монда практик бизнес бәясе үлчәнә. AWS Graviton инстанцияләрендә 200 контейнер эшли торган команда, vCPU сәгатенә 0,04 $, эквивалент x86 инстанциясенә каршы vCPU сәгатенә 0,056 $ белән, ел саен 100 vCPU өчен 11,520 $ экономияли - дөрес архитектураны сайлаудан. Бу сайлауны яңадан инженерлык тырышлыгысыз куллану - нәкъ инфраструктура оптимизациясе, ул үзе өчен түли.

Рәсем катламнарына кермичә яшерен идарә итү

Иң кадерле булмаган BuildKit үзенчәлекләренең берсе - аның серләре API. Классик Докер төзүчесенең таныклыкларын рәсем катламына тапшыру өчен чиста ысулы юк иде. Эшләүчеләр моның тирәсендә күп этаплы корылмалар, <код> ARG күрсәтмәләре, һәм сакчыл заказлар белән эшләделәр - ләкин очраклы рәвештә API ачкычын яки шәхси SSH ачкычын җибәрелгән рәсемгә пешерү куркынычы уңайсыз булып калды. Куркынычсызлык сканерлары регуляр рәвештә җәмәгать реестрларына бастырылган контейнер рәсемнәрендә каты кодлы таныклыкларны табалар, һәм бу ачыклыкларның күбесе турыдан-туры төзелеш вакытында яшерен эшкәртүгә карый.

BuildKit'ның - сере флагы сизгер мохитне вакытлыча файл системасы юлы итеп урнаштыра, ул кирәк булган һәм беркайчан да рәсем катламына кагылмый торган RUN күрсәтмәсе дәвамында гына бар. Dockerfile күрсәтмәсе RUN --mount = type = secret, id = npmrc cat / run / secrets / npmrc> ~ / .npmrc && npm урнаштыру төзү процессына шәхси npm таныклыкларына соңгы рәсемдә яки арадаш катламда күренми. Шул ук үрнәк PyPI таныклыклары, Maven көйләүләре, шәхси Git саклагычлары өчен SSH ачкычлары һәм сезнең төзү процессы таләп иткән бүтән сизгер материал өчен эшли.

җайга салынган тармакларга кагылган программа төзүче командалар өчен - сәламәтлек саклау платформалары, финтех продуктлары, кадр программалары - "таныклык образда булырга мөмкин" һәм "таныклык образда була алмый" арасындагы аерма - куркынычсызлык аудиты үткәрү һәм нәтиҗәләрне төзәтү өчен өч атна үткәрү арасындагы аерма. Мевайз кебек платформалар, хезмәт хакы, кадрлар, фактуралар кебек тармаклар буенча 138,000 кулланучы өчен бизнес-операцияләр ясыйлар, бу клиентларның сизгер финанс һәм персонал мәгълүматларына булган ышанычны саклап калу өчен, төзү һәм урнаштыру торбаларында нәкъ шундый расланган куркынычсызлык торышына бәйле.

Кэш экспорты: CI торбаларын чыннан да тиз ясау

CI торбалары - монда эш башкару иң мөһим булган һәм Docker төзү тәҗрибәсе тарихи яктан иң авырткан урында. Яңа CI йөгерүчеләр, гадәттә, буш кэшлардан башлыйлар, димәк, һәр торба үткәргече бар нәрсәне баштан ук кабатлый. Йөзләгән Maven бәйләнеше булган Java сервисы өчен, Рөстәм проекты, яисә авыр туган киңәйтелгән Python кушымтасы өчен, бу секундлар түгел, дистәләрчә минутларда үлчәнгән вакытны аңлата. Акрын CI-ның бизнес бәясе бик зур - урнаштыру ешлыгы кимеде, озаграк кире әйләнешләр, һәм инженерлар торбаларның бетүен көтеп утыралар, алар кушылыр алдыннан.

BuildKit кэш экспорт үзенчәлеге моны экспортка кертелә торган кэш манифестлары белән чишә. --cache-to type = реестр, ref = myregistry / myapp: кэш һәм --cache-from type = registry, ref = myregistry / myapp: cache кулланып, BuildKit җентекле кэш скриншотын реестрга этәрә һәм киләсе башында тарта. Кэш эчтәлеккә юнәлтелгән, шуңа күрә чын үзгәртелгән катламнар гына яңадан алына. GitHub Actions, GitLab CI, һәм CircleCI бу үрнәкне кулланган командалар торба үткәргеч вакытын унбиш минуттан алып өчкә кадәр кисәләр. Алга киткән Docker төзү процессында GitHub'ның үз документлары нәкъ менә шуңа күрә бу үрнәкне тәкъдим итә.

Иң тиз төзү - сез бүтән эшләргә тиеш түгел. 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 →

BuildKit фронтлары: Докерфайллар артында төзү

Бәлки, BuildKit-ның иң билгеле мөмкинлеге - Dockerfiles - мөмкин булган кертү форматы - бердәнбер түгел. BuildKit-ның алгы архитектурасы бар, ул телләрне һәм форматларны тулысынча төзергә мөмкинлек бирә. Фронтовик сезнең төзү файлының башындагы # синтаксис = күрсәтмәсе белән күрсәтелә, бу BuildKitка билгеле фронтенд рәсемен тартырга һәм файлның калган өлешен анализлау һәм куллану өчен кулланырга куша.

Бу архитектура берничә кызыклы проектка мөмкинлек бирде. Buildpacks интеграциясе BuildKitка бернинди Dockerfileсыз кушымта чыганагы контейнер рәсемнәрен ясарга мөмкинлек бирә - ул телне ачыклый, төп рәсемнәрне сайлый һәм җитештерүгә әзер контейнерны автоматик рәвештә җыя. HPC һәм фәнни исәпләү җәмгыятьләре махсус фронтовиклар кулландылар, домен-специаль телләрдә BuildKit-ның эчке LLB (Түбән дәрәҗәдәге Build) вәкиллегенә тупланалар. docker / dockerfile: лабораторияләр синтаксис фронтенд экспериментлары, гередок ярдәме, --network инструкция буенча контроль, һәм тотрыклы Dockerfile синтаксисына төшкәнче көчәйтелгән кэш күрсәтмәләре.

frзегезнең фронтовикны билгеләү сәләте шулай ук гадәти булмаган төзелеш таләпләре булган оешмаларга "аяк киемен барысын да Dockerfile синтаксисына" һәм "контейнерларны бөтенләй ташларга" сайларга тиеш түгел дигәнне аңлата. Команда төзүче FPGA программа тәэминаты, урнаштырылган система рәсемнәре, яки махсус ML модель контейнерлары, аларның конструкцияләрен домены өчен мәгънәле итеп тасвирлый алалар, шул ук вакытта контейнерлар эшли торган стандарт OCI контейнер рәсемнәрен җитештерәләр. Бу киңәйтү, кертү форматын тотрыклы дип саный торган төзү системаларына караганда чын архитектура өстенлеге.

Прованс һәм SBOM: Кояштан соңгы Дөнья өчен төзү

Программа тәэминаты чылбыры куркынычсызлыгы теоретик борчылудан 2020-нче елда SolarWinds бозылганнан соң һәм 2021-нче елда Log4Shell зәгыйфьлегенә күчте. АКШ хакимиятенең кибер куркынычсызлык турындагы 14028 боерыгы, 2021 елның маенда чыгарылган, федераль подрядчиклар өчен материаллар проекты. BuildKit-ның раслау аттестацияләре һәм SBOM буын үзенчәлекләре бу көйләү һәм куркынычсызлык ландшафтына турыдан-туры җавап.

--provenance = true һәм --sbom = true флаглары белән, BuildKit контейнер рәсеменә нәрсә кергәнен - нинди төп рәсемнәр кулланылганын, Докерфайл күрсәтмәләре башкарылганын, нинди чыганак файллары булганын һәм нинди тышкы бәйләнешләр алынганын тасвирлаучы криптографик имзаланган аттестацияләр ясый. Бу аттестацияләр SLSA (Программа Артефактлары өчен Тапшыру Чылбыры дәрәҗәләре) һәм тотто-аттестация форматына иярәләр, аларны Sigstore's Cosign һәм OPA (Ачык Сәясәт Агенты) кебек политик двигательләр белән тикшереп була.

Бу мөмкин булган практик эш процессы шуңа охшаган:

  1. Төзүче кодны этәрә; CI торбасы производство кушылган BuildKit төзелешен башлый.
  2. BuildKit барлык компонентларны һәм аларның версияләрен күрсәткән SBOM имзаланган
  3. SBOM контейнер реестрына рәсем манифесты белән бергә бастырыла.
  4. Кубернетес кластерындагы кабул итү контроллерлары урнаштыруга рөхсәт биргәнче тикшерүне тикшерәләр.
  5. Зәгыйфьлек сканерлары яңа CVEлар ачылганда тәэсир ителгән рәсемнәрне ачыклау өчен SBOM-ны сорыйлар.

Бу тулы торбаны тормышка ашыручы командалар зәгыйфьлекне ачуга берничә көн түгел, ә берничә сәгать эчендә җавап бирә алалар, чөнки һәр контейнерда һәр компонентның төгәл, машина белән укылырлык картасы бар. Клиентларның оператив эш процессына тирән интеграцияләнгән Mewayz кебек бизнес өчен - хезмәт хакы белән идарә итү, флот мәгълүматлары белән идарә итү, счет-фактураларны эшкәртү - катгый, аудиторлык тәэмин итү чылбырын күрсәтү сәләте көннән-көн предпринимательство сөйләшүләре өчен алшарт булып тора.

Башлау: Килешү корылмалардан алып Алдынгы торбаларга кадәр

BuildKit сезнең Docker мохитендә эшли, әгәр сез соңгы версияне кулланасыз икән - Docker 23.0 һәм соңрак аны килешү буенча эшләгез. Күпчелек командалар өчен беренче практик адым - Docker Buildx плагинын эшләтеп җибәрү, ул BuildKit'ның тулы үзенчәлеген docker buildx субкомандасы аша фаш итә. docker buildx create --use эшләве, BuildKit төзүче инстанциясен көйли, драйверга караганда күбрәк мөмкинлек бирә. Аннан, алдынгы функцияләрне арта бару, берьюлы барысын да кабул итәр урынына мәгънәле.

Хәзерге вакытта төп <код> докер төзү чакырулары белән эшләүче команда өчен акыллы кабул итү юлы CIга кэш экспортын өстәгән кебек - бу минималь конфигурация үзгәреше белән тиз, үлчәнә торган тизлекне яхшырта. Команда ARM инфраструктурасын максат итә башлагач, күп платформа төзү кыйммәтләнә. Яшерен монтаж шәхси пакет регистрлары яки SSH ачкычлары төзү контекстында барлыкка килгән вакытта кабул ителергә тиеш. Прованс аттестацияләре таләпләр яки предприятия клиентлары таләпләре тәэмин итү чылбыры документларын кирәк булганда эшләтеп җибәрү өчен мәгънәле.

BuildKitның тирән дәресе белә торып төзү турында. Сез микросервис өчен контейнер җибәрәсезме, машинаны өйрәнүнең соңгы ноктасы, яисә Мевайзның 207 бизнес модуле комплекты кебек катлаулы платформа, төзү процессы сез урнаштыру формасында түгел - бу инженер артифакты, аның сыйфатын, куркынычсызлыгын, оператив җитлеккәнлеген күрсәтә. BuildKit сезгә бу артифактны искиткеч итү өчен кораллар бирә. Сорау - сез аларны кулланырга вакыт бүлеп куясызмы.

Еш бирелә торган сораулар

BuildKit нәрсә ул һәм ул классик Docker төзү системасыннан нәрсә белән аерылып тора?

BuildKit - Docker-ның киләсе буын төзү двигателе, Docker 18.09 белән кертелгән һәм Docker 23.0'да килешү ясаган. Классик төзүчедән аермалы буларак, BuildKit параллель катлам башкаруны, алдынгы кэш стратегияләрен, серләрне монтажлау һәм кросс-платформа төзүне хуплый. Ул төзү процессына юнәлтелгән аклик график (DAG) кебек карый, акыллырак бәйләнеш резолюциясен бирә һәм катлаулы, күп этаплы Dockerfiles өчен тизрәк төзү вакытын булдыра.

Докер белән BuildKit куллана башлау өчен миңа өстәмә нәрсә куярга кирәкме?

Docker 23.0 яки соңрак эшлисез икән, өстәмә урнаштыру кирәк түгел - BuildKit килешү буенча кушылган. Иске версияләрдә сез аны төзү командаларын эшләгәнче DOCKER_BUILDKIT = 1 әйләнә-тирә үзгәрүчене куеп активлаштыра аласыз. Дистанцион кэшлар яки күп платформа корылмалары кебек алдынгы куллану очраклары өчен, сез docker buildx create .

ярдәмендә махсус Buildx төзүче инстанциясен конфигурацияләргә теләрсез.

BuildKit стандарт контейнер рәсемнәреннән тыш экспонатлар төзү өчен кулланыла аламы?

Әйе, һәм бу BuildKit-ның иң бәяләнмәгән мөмкинлекләренең берсе. Заказлы фронтовиклар һәм <код> - чыгару флагын кулланып, BuildKit чимал бинарлар, тарболлар, статик вебсайтлар һәм башка үзенчәлекле файл экспонатлары җитештерә ала - OCI рәсемнәре генә түгел. Бу аны гомуми максатлы төзү двигателе итә, ул полиглот монорепосына һәм катлаулы CI торбаларына туры килә, анда төрле командаларга бердәм кораллар челтәреннән төрле форматлар кирәк.

BuildKit Mewayz кебек кораллар белән киңрәк DevOps платформасына ничек туры килә?

BuildKit түбән дәрәҗәдәге төзелеш катламы белән эш итә, ләкин заманча үсеш коллективларына шулай ук бизнес-процесслар, клиентлар җибәрү, оператив процесслар белән идарә итәргә кирәк. Mewayz кебек платформалар - 207 модульле бизнес ОС $ 19 / айдан башлана - программа тәэминаты бизнесының оператив ягын каплап инфраструктура коралларын тулыландыра. BuildKit белән эшләнгән эффектив төзү торбаларын Mewayz кебек платформа белән парлаштыру командаларга код артифактыннан клиентлар җибәрүгә кадәр тулы юл бирә.

Try Mewayz Free

All-in-one platform for CRM, invoicing, projects, HR & more. No credit card required.

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 →

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