BuildKit: Докердин дээрлик бардыгын кура ала турган жашыруун асыл ташы | Mewayz Blog Skip to main content
Hacker News

BuildKit: Докердин дээрлик бардыгын кура ала турган жашыруун асыл ташы

Комментарийлер

2 min read Via tuananh.net

Mewayz Team

Editorial Team

Hacker News

BuildKit: Докердин дээрлик бардык нерсени кура ала турган жашыруун асыл ташы

Көпчүлүк иштеп чыгуучулар Dockerди программалык камсыздоонун кантип жөнөтүлүшүн өзгөрткөн контейнердин иштөө убактысы катары билишет. Ар бир заманбап Docker түзүлүшүнүн астындагы кыймылдаткычтын үнсүз ызы-чуулары жөнүндө азыраак билишет — BuildKit, кийинки муундагы куруу системасы, ал 18.09 версиясынан бери Docker менен жөнөтүлүп, Docker 23.0 демейки бэкэнд болуп калды. Инженерлер Kubernetes конфигурациялары жана микросервис үлгүлөрү жөнүндө чексиз талашып-тартышып жатканда, BuildKit DevOps экосистемасындагы эң күчтүү, ийкемдүү куруу системаларынын бирине ырааттуу түрдө өнүгүп келе жатат. Эгер сиз аны жөн гана тезирээк докердин курулушу катары карап жатсаңыз, анда сиз столдо эбегейсиз мүмкүнчүлүктөрдү калтырып жатасыз. Жогорку өндүрүмдүүлүктөгү CI/CD түтүктөрүн иштеткен компаниялар BuildKit эмнени сунуштап жатканын түшүнүү менен куруу убактысын 50–70% кыскартты — бул башталышы гана.

BuildKit классикалык куруучудан эмнеси менен айырмаланат

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

Бул архитектуралык жылыш ылдамдыктын чегинен ашкан практикалык натыйжаларга ээ. Көп баскычтуу Dockerfile Go бинардык файлын бир этапта түзсө, экинчисинде Node.js көз карандылыктарын жүктөсө жана үчүнчүсүндө өндүрүш сүрөтүн чогултканда, BuildKit бир эле учурда биринчи эки этапты иштете алат. Мурда күчтүү CI жөө күлүгүнө төрт мүнөт талап кылынган куруу азыр токсон секунданын ичинде бүтөт. Stripe, Shopify жана башка көптөгөн масштабдуу инженердик командалар өздөрүнүн ички шаймандык ретроспективасында ушундай жетишкендиктерди документтешти. DAG модели ошондой эле BuildKit жогорку так куруу метаберилиштерин түзө аларын билдирет — бул камсыздоо чынжырчасынын коопсуздугу үчүн абдан маанилүү болгон прованстарды тастыктаган жана материалдардын программалык эсебин (SBOM) түзүү сыяктуу функциялардын негизи.

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

Мульти-платформалар: бир буйрук, ар бир архитектура

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

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

Сүрөт катмарларына кирбестен жашыруун башкаруу

Эң бааланбаган BuildKit өзгөчөлүктөрүнүн бири анын сырлары API болуп саналат. Классикалык Docker куруучусунун ишеним грамоталарын курууга өткөрүүнүн эч кандай таза жолу болгон эмес. Иштеп чыгуучулар мунун тегерегинде көп баскычтуу куруулар, ARG нускамалары жана кылдат заказ кылуу менен иштешкен — бирок кокусунан API ачкычын же жеке SSH ачкычын жөнөтүлгөн сүрөткө бышыруу коркунучу ыңгайсыздык менен жогору бойдон калууда. Коопсуздук сканерлери мамлекеттик реестрлерге жарыяланган контейнер сүрөттөрүнөн катаал коддолгон эсептик дайындарды табат жана бул агып чыгуулардын көбү түз куруу учурунда олдоксон жашыруун иштөөгө байланыштуу.

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

Жөнгө салынуучу тармактарга - саламаттыкты сактоо платформаларына, финтех продуктыларына, HR программалык камсыздоосуна тийешелүү программалык камсыздоону куруп жаткан командалар үчүн "ишеним маалыматтары сүрөттө болушу мүмкүн" жана "ишеним маалыматтары сүрөттө болушу мүмкүн эмес" ортосундагы айырма бул коопсуздук аудитинен өтүү менен тыянактарды оңдоо үчүн үч жуманын ортосундагы айырма. Mewayz сыяктуу платформалар, эмгек акы, HR жана эсеп-фактура сыяктуу тармактар боюнча 138 000ден ашык колдонуучулар үчүн бизнес операцияларын иштетип, кардарлардын каржылык жана персоналдык купуя маалыматтарына болгон ишенимди сактап калуу үчүн алардын куруу жана жайылтуу түтүктөрүндөгү дал ушул далилденген коопсуздук абалынан көз каранды.

Кэш экспорту: CI түтүктөрүн чындыгында тез кылуу

CI түтүктөрү - куруунун натыйжалуулугу эң маанилүү жана демейки Docker куруу тажрыйбасы тарыхый жактан эң оор болгон жерде. Жаңы CI жөө күлүктөрү, адатта, бош кэштер менен башталат, башкача айтканда, ар бир түтүк өткөргүч баарын нөлдөн баштап кайра түзөт. Жүздөгөн Maven көз карандылыгы бар Java кызматы, 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'тун Докердин өркүндөтүлгөн иш процесстери боюнча документтери дал ушул себептен улам бул үлгүнү катуу сунуштайт.

Эң тез түзүүчү - бул кайра иштетүүнүн кереги жок. 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 Frontends: Докер файлдарынан тышкары куруу

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

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

Өзүңүздүн жеке фронтуңузду аныктоо мүмкүнчүлүгү, ошондой эле адаттан тыш курулуш талаптары бар уюмдар "бардыгын Dockerfile синтаксисине өтүү" жана "контейнерлерден толугу менен баш тартуу" ортосунда тандоонун кереги жок дегенди билдирет. FPGA микропрограммасы, орнотулган системалардын сүрөттөрү же адистештирилген ML моделинин контейнерлери алардын түзүлүшүн алардын домени үчүн мааниси бар терминдер менен сүрөттөп бере алат, ошол эле учурда контейнерлер иштеген бардык жерде жайгаштырылган стандарттуу OCI-ылайыктуу контейнер сүрөттөрүн чыгарат. Бул кеңейтүү мүмкүнчүлүктөрү киргизүү форматын туруктуу деп эсептеген куруу тутумдарынан чыныгы архитектуралык артыкчылык болуп саналат.

Прованс жана SBOM: Пост-SolarWinds дүйнөсү үчүн курулуш

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

--provenance=true жана --sbom=true желектери менен BuildKit криптографиялык кол коюлган аттестацияларды түзөт, алар контейнердин сүрөтүнө эмне киргенин - кайсы негизги сүрөттөр колдонулганын, кайсы Dockerfile көрсөтмөлөрү аткарылганын, кайсы булак файлдары бар экенин жана тышкы көз карандылыктарды алып турат. Бул аттестациялар SLSA (Программалык артефакттар үчүн камсыз кылуу чынжырынын деңгээли) негизине жана ин-тото аттестация форматына ылайык келет, бул аларды Sigstore's Cosign жана OPA (Ачык саясат агенти) сыяктуу саясат кыймылдаткычтары аркылуу машина аркылуу текшере алат.

Бул иштеткен практикалык иш процесси төмөнкүдөй көрүнөт:

<ол>
  • Иштеп чыгуучу кодду түртөт; CI конвейери BuildKit түзүмүн иштетет.
  • BuildKit бардык компоненттерди жана алардын версияларын көрсөткөн кол коюлган SBOM түзөт.
  • SBOM сүрөт манифестинин жанында контейнер реестрине жарыяланат.
  • Kubernetes кластериндеги кабыл алуу контроллерлору жайылтууга уруксат берүүдөн мурун келип чыгышын текшеришет.
  • Жаңы CVE'лер ачылганда, жабыр тарткан сүрөттөрдү аныктоо үчүн, аялуу сканерлери SBOMдан сурайт.
  • Бул толук түтүктү ишке ашырган командалар аялуу жерлердин ачыкка чыгышына бир нече күндө эмес, бир нече саатта жооп бере алышат, анткени аларда ар бир иштеп жаткан контейнерде ар бир компоненттин так, машина окуй турган картасы бар. Mewayz сыяктуу кардарлардын оперативдүү иш процесстерине терең интеграцияланган ишканалар үчүн эмгек акынын эсебин жүргүзүү, автопарк маалыматтарын башкаруу, эсеп-фактураларды иштетүү — катаал, текшерилүүчү жеткирүү чынжырын көрсөтүү жөндөмү ишкананын сатуу боюнча сүйлөшүүлөрүнүн негизги шарты болуп калды.

    Баштоо: Демейки түзүлүштөрдөн өркүндөтүлгөн түтүктөргө чейин

    Эгер сиз акыркы Docker 23.0 жана андан кийинки версиясын колдонуп жатсаңыз, BuildKit Docker чөйрөңүздө мурунтан эле иштеп жатат. Көпчүлүк командалар үчүн биринчи практикалык кадам - ​​бул docker buildx подкомандасы аркылуу BuildKitтин толук мүмкүнчүлүктөрүн ачып берүүчү Docker Buildx плагинин иштетүү. docker buildx create --use иштетүү BuildKit куруучу инстанциясын демейки драйверге караганда көбүрөөк мүмкүнчүлүккө ээ кылат. Ошондон улам, бардыгын бир эле учурда кабыл алганга аракет кылбай, өркүндөтүлгөн функцияларды акырындык менен кабыл алуу акылга сыярлык.

    Учурда негизги докер куруу чакырыктарын аткарып жаткан команда үчүн акылга сыярлык кабыл алуу жолу, адегенде CIге кэш экспортун кошуу сыяктуу көрүнөт — бул конфигурацияны минималдуу өзгөртүү менен тез арада өлчөнө турган ылдамдыкты жакшыртат. Команда ARM инфраструктурасын бутага ала баштаганда көп платформалуу түзүлүштөр баалуу болуп калат. Жашыруун монтаждоо контекстте жеке пакет реестрлери же SSH ачкычтары пайда болгон учурда кабыл алынышы керек. Качан гана шайкештик талаптары же ишкананын кардарларынын суроо-талаптары жеткирүү чынжырынын документтерин талап кылса, келип чыгышын ырастоо маанисин берет.

    BuildKitтин тереңирээк сабагы атайылап куруу жөнүндө. Микросервис үчүн контейнерди, машинаны үйрөнүү боюнча жыйынтыктоочу чекитти же Mewayzдин 207 бизнес модулдарынын топтому сыяктуу татаал платформаны жөнөтүп жатасызбы, куруу процесси сиз жайылтуу жолунда шашыла турган формалдуулук эмес — бул инженердик артефакт, ал сапатты, коопсуздук абалын жана жөнөтүлгөн бардык нерселердин ыкчам жетилгендигин чагылдырат. BuildKit сизге артефактты эң сонун кылуу үчүн куралдарды берет. Бул жөн гана сиз аларды колдонууга убакыт бөлүп жатасызбы?

    Көп берилүүчү суроолор

    BuildKit деген эмне жана ал классикалык Docker куруу системасынан эмнеси менен айырмаланат?

    BuildKit - бул Dockerдин кийинки муундагы куруу кыймылдаткычы, Docker 18.09да киргизилген жана Docker 23.0де демейкиге айланды. Классикалык куруучудан айырмаланып, BuildKit параллелдүү катмарларды аткарууну, өнүккөн кэштөө стратегияларын, сырларды орнотууну жана платформалар аралык түзүүнү колдойт. Ал куруу процессин багытталган ациклдик график (DAG) катары карап, көз карандылыкты акылдуу чечүүгө жана татаал, көп баскычтуу Docker-файлдар үчүн куруу убакыттарын кескин тездетүүгө мүмкүндүк берет.

    BuildKitти Docker менен колдоно баштоо үчүн мага кошумча бир нерсе орнотуу керекпи?

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

    BuildKitти стандарттуу контейнер сүрөттөрүнөн тышкары артефакттарды куруу үчүн колдонсо болобу?

    Ооба, бул BuildKitтин эң бааланбаган мүмкүнчүлүктөрүнүн бири. Ыңгайлаштырылган фронтондорду жана --output желегин колдонуп, BuildKit OCI сүрөттөрүн эле эмес, чийки бинарларды, tarballs, статикалык веб-сайттарды жана башка ыктыярдуу файл артефакттарын чыгара алат. Бул аны полиглот монореполоруна жана татаал CI түтүктөрүнө табигый түрдө туура келген жалпы максаттагы куруу кыймылдаткычы кылат, мында ар кандай командалар бирдиктүү инструменттер тизмегинен ар кандай чыгаруу форматтарын талап кылат.

    BuildKit кандайча Mewayz сыяктуу куралдар менен бирге кененирээк DevOps платформасына туура келет?

    BuildKit төмөнкү деңгээлдеги куруу катмарын иштетет, бирок заманбап иштеп чыгуу топтору бизнес процесстерин, кардарларды жеткирүү жана операциялык процесстерди башкаруусу керек. Mewayz сыяктуу платформалар — айына $19дан башталган 207 модулдук бизнес ОС — программалык камсыздоо бизнесинин операциялык тарабын камтуу менен инфраструктура куралдарын толуктайт. 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 6,207+ businesses. Free forever plan · No credit card required.

    Ready to put this into practice?

    Join 6,207+ 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