BuildKit: Dockerning deyarli hamma narsani qura oladigan yashirin marvarid
Fikrlar
Mewayz Team
Editorial Team
BuildKit: Deyarli hamma narsani qura oladigan Dockerning yashirin marvaridlari
Ko'pchilik ishlab chiquvchilar Docker-ni dasturiy ta'minotni jo'natish usulini o'zgartirgan konteyner ish vaqti sifatida bilishadi. Har bir zamonaviy Docker konstruktsiyasi ostida jimgina jim turgan dvigatel haqida kam odam biladi - BuildKit, 18.09 versiyasidan beri Docker bilan yetkazib berilgan va Docker 23.0 da standart backend bo'lgan yangi avlod qurish tizimi. Muhandislar Kubernetes konfiguratsiyasi va mikroservis modellari haqida tinimsiz bahslashsa-da, BuildKit doimiy ravishda DevOps ekotizimidagi eng kuchli, moslashuvchan qurilish tizimlaridan biriga aylanib bormoqda. Agar siz uni tezroq docker build deb hisoblagan bo'lsangiz, stolda ulkan imkoniyatlar qoldirasiz. Yuqori samarali CI/CD quvurlari bilan ishlaydigan kompaniyalar BuildKit aslida nimani taklif qilayotganini tushunib, qurilish vaqtlarini 50–70% ga qisqartirishdi — bu hali boshlanishi.
BuildKit-ni Klassik Quruvchidan tubdan farq qiladigan narsa
Asl Docker quruvchi vosita Dockerfile ko'rsatmalarini ketma-ket, bir vaqtning o'zida bir qatlamda bajardi, parallel ravishda qanday ishlar xavfsiz bajarilishini bilmaydi. BuildKit ushbu chiziqli ijro modelini yo'naltirilgan asiklik grafik (DAG) bilan almashtiradi - qaysi qurilish bosqichlari bir-biriga tayanishini va qaysi biri yo'qligini tushunadigan bog'liqlik grafigi. Mustaqil bosqichlar bir vaqtning o'zida bajariladi, foydalanilmagan bosqichlar butunlay o'tkazib yuboriladi va butun tuzilish to'g'ri tartibda o'qishingiz kerak bo'lgan qadamlarning imperativ ketma-ketligi emas, balki siz xohlagan narsaning deklarativ tavsifiga aylanadi.
Ushbu me'moriy siljish tezlikdan tashqari amaliy natijalarga ega. Ko'p bosqichli Dockerfile bir bosqichda Go ikkilik faylini kompilyatsiya qilsa, boshqasida Node.js bog'liqliklarini yuklaydi va uchinchi bosqichda ishlab chiqarish tasvirini yig'sa, BuildKit bir vaqtning o'zida dastlabki ikki bosqichni ishga tushirishi mumkin. Ilgari kuchli CI yuguruvchisida to‘rt daqiqa davom etgan qurilish endi to‘qson soniya ichida yakunlanadi. Stripe, Shopify va boshqa ko'plab yuqori miqyosli muhandislik guruhlari o'zlarining ichki asboblar retrospektivlarida shunga o'xshash yutuqlarni hujjatlashtirdilar. DAG modeli, shuningdek, BuildKit yuqori aniqlikdagi qurilish metamaʼlumotlarini yaratishi mumkinligini bildiradi – bu taʼminot zanjiri xavfsizligi uchun juda muhim boʻlgan manba sertifikatlari va dasturiy taʼminot hujjatlarini (SBOM) yaratish kabi xususiyatlar uchun asosdir.
Shuningdek, keshni bekor qilish qanday ishlashida ham kontseptual o'zgarishlar mavjud. Klassik quruvchi har qanday o'zgartirilgan ko'rsatma ostidagi har bir qatlamni bekor qildi. BuildKit har bir kirishda kontent xeshlarini kuzatib boradi, shuning uchun Dockerfile-dagi sharhni o'zgartirish kompilyatsiyaning o'ttiz daqiqasini aks ettiruvchi kesh yozuvini yo'qotmaydi. Qurilish keshi sizning muhandislik guruhingiz uchun besh daqiqa va qirq daqiqalik fikr-mulohaza davri o‘rtasidagi farq bo‘lsa, bu aniqlik dastlab tuyulganidan ham muhimroqdir.
Ko'p platformali tuzilmalar: bitta buyruq, har bir arxitektura
BuildKit-ning --platform bayrog'i va QEMU integratsiyasi bir vaqtlar og'riqli ko'p tizimli muvofiqlashtirish muammosini bitta buyruqqa aylantiradi. docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 . ishga tushirilsa, bitta qurish chaqiruvidan parallel ravishda uchta ishlab chiqarishga tayyor tasvir ishlab chiqariladi. Sanoat ARM tomon siljishi bilan bu qobiliyat juda muhim bo‘lib qoldi — AWS Graviton3 namunalari veb-servis va ma’lumotlarni qayta ishlash kabi ish yuklarida doimiy ravishda 40% yaxshi narx unumdorligini ta’minlaydi, Apple Silicon esa ARM’ni millionlab muhandislar uchun standart ishlab chiqish mashinasiga aylantirdi.
BuildKit-ning ko'p platformali qo'llab-quvvatlashi etuk bo'lishidan oldin, turli arxitekturalar uchun alohida qurilish quvurlarini saqlash haqiqiy xarajatlar markazi edi. Jamoalar bir nechta Dockerfilllarni saqlab turishdi, turli xil arxitekturali yuguruvchilarda alohida CI quvurlarini ishga tushirishdi yoki shunchaki x86 tasvirlarni hamma joyga jo'natishdi va ARM infratuzilmasida ishlash uchun jarima to'lashdi. BuildKit yordamida siz qurilmangizni bir marta aniqlaysiz va tizimga arxitekturaga xos kompilyatsiyani shaffof tarzda boshqarishiga ruxsat berasiz. Oʻzaro kompilyatsiya qilishni talab qiluvchi Rust loyihalari, CGOga bogʻliqliklari boʻlgan Go loyihalari, C kengaytmali Python paketlari — BuildKit emulyatsiya qatlamini har bir maqsadli platforma tafsilotlarini tushunishingizni talab qilmasdan boshqaradi.
Bu erda biznesning amaliy qiymatini o'lchash mumkin. AWS Graviton protsessorlarida 200 ta konteynerni vCPU-soati uchun $0,04 va x86-ning vCPU-soati uchun 0,056 dollarga ishlayotgan jamoa har 100 vCPU uchun yiliga taxminan 11,520 dollarni tejaydi — faqat to‘g‘ri arxitekturani tanlashdan. Bu tanlovni qayta loyihalashsiz foydalanish mumkin qilish infratuzilmani optimallashtirishning o‘ziga xos turi bo‘lib, o‘zini darhol to‘laydi.
Tasvir qatlamlariga oqib chiqmasdan maxfiy boshqaruv
Eng qadrlanmagan BuildKit xususiyatlaridan biri bu uning maxfiy APIsidir. Klassik Docker quruvchisi hisobga olish ma'lumotlarini tasvir qatlamida tugashi mumkin bo'lmagan holda tuzilishga o'tkazishning toza usuliga ega emas edi. Ishlab chiquvchilar buning atrofida ko‘p bosqichli tuzilmalar, ARG ko‘rsatmalari va ehtiyotkorlik bilan buyurtma berish bilan ishladilar — lekin tasodifan API kaliti yoki shaxsiy SSH kalitini yuborilgan tasvirga yoqish xavfi noqulay darajada yuqori bo‘lib qoldi. Xavfsizlik skanerlari muntazam ravishda ommaviy registrlarda chop etilgan konteyner tasvirlarida qattiq kodlangan hisobga olish maʼlumotlarini topadi va bu oqishlarning koʻpchiligi toʻgʻridan-toʻgʻri qurish paytida yashirin ishlov berishdan kelib chiqadi.
BuildKit-ning --secret bayrog'i nozik ma'lumotlarni yaratish muhitiga vaqtinchalik fayl tizimi yo'li sifatida o'rnatadi, u faqat maxsus RUN yo'riqnomasi davomida mavjud bo'ladi va hech qachon tasvir qatlamiga tegmaydi. RUN --mount=type=secret,id=npmrc cat /run/secrets/npmrc > ~/.npmrc && npm install kabi Dockerfile koʻrsatmasi qurish jarayoniga shaxsiy npm hisobga olish maʼlumotlariga oʻsha hisobga olish maʼlumotlari oxirgi rasmda yoki har qanday oraliq qatlamda koʻrinmasdan kirish imkonini beradi. Xuddi shu naqsh PyPI hisob maʼlumotlari, Maven sozlamalari, shaxsiy Git omborlari uchun SSH kalitlari va yaratish jarayoni talab qiladigan boshqa har qanday nozik materiallar uchun ishlaydi.
Tartibga solinadigan sohalarga - sog'liqni saqlash platformalari, fintech mahsulotlari, HR dasturiy ta'minotiga taalluqli dasturiy ta'minotni yaratuvchi jamoalar uchun "hisob ma'lumotlari rasmda bo'lishi mumkin" va "hisob ma'lumotlari rasmda bo'lishi mumkin emas" o'rtasidagi farq xavfsizlik tekshiruvidan o'tish va topilmalarni tuzatishga uch hafta sarflash o'rtasidagi farqdir. 138 000 dan ortiq foydalanuvchilarga ish haqi, HR va hisob-faktura kabi sohalarda biznes operatsiyalarini amalga oshiradigan Mewayz kabi platformalar mijozlarning moliyaviy va xodimlarga oid nozik maʼlumotlariga boʻlgan ishonchini saqlab qolish uchun ularni qurish va oʻrnatish jarayonida aynan shu tarzda tasdiqlangan xavfsizlik holatiga bogʻliq.
Kesh eksporti: CI quvurlarini haqiqatda tez qilish
CI quvurlari qurilish unumdorligi eng muhim va standart Docker qurish tajribasi tarixan eng og'riqli bo'lgan joydir. Yangi CI yuguruvchilari odatda bo'sh keshlar bilan boshlanadi, ya'ni har bir quvur liniyasi hamma narsani noldan qayta kompilyatsiya qiladi. Yuzlab Mavenga bog'liqliklarga ega Java xizmati, Rust loyihasi yoki og'ir mahalliy kengaytmalarga ega Python ilovasi uchun bu qurilish vaqtini soniyalarda emas, o'nlab daqiqalarda o'lchaganini anglatadi. Sekin CIning biznes xarajatlari juda katta — oʻrnatish chastotasining qisqarishi, uzoqroq fikr-mulohaza zanjiri va muhandislar quvurlarni birlashtirish va davom ettirishdan oldin ishlamay qolishini kutishadi.
BuildKit-ning keshni eksport qilish xususiyati buni eksport qilinadigan kesh manifestlari bilan hal qiladi. --cache-to type=registry,ref=myregistry/myapp:cache va --cache-from type=registry,ref=myregistry/myapp:cache-dan foydalanib, BuildKit batafsil kesh snapshotini har bir tuzilishdan so‘ng registrga o‘tkazadi. Kesh kontent-manzilli, shuning uchun faqat haqiqiy o'zgartirilgan qatlamlar qayta olinadi. GitHub Actions, GitLab CI va CircleCI-da ushbu naqshdan foydalanadigan jamoalar keyingi yugurishlarda muntazam ravishda quvur vaqtini o'n besh daqiqadan uchgacha qisqartiradilar. GitHub’ning ilg‘or Docker qurish ish oqimlari bo‘yicha o‘z hujjatlari aynan shu sababga ko‘ra ushbu namunani tavsiya qiladi.
Eng tez tuzilma - bu siz hech qachon qayta ishga tushirishingiz shart emas. BuildKit-ning qatlamli, kontent-manzilli kesh tizimi qurilishni tezlashtiribgina qolmay, balki butun "qurilish" kontseptsiyasini aqlli qiladi va takroriy kompilyatsiyani aynan nima o'zgarganligining ortib boruvchi farqiga aylantiradi.
Kesh eksporti, shuningdek, tarmoqqa asoslangan ish oqimlari bilan toza integratsiyalashgan. Siz CI quvur liniyasini filial keshidan asosiy tarmoq keshiga qaytish uchun sozlashingiz mumkin, agar filial keshi mavjud bo'lmasa, yangi filiallar sizning asosiy rivojlanish liniyasida to'plangan issiq keshdan darhol foyda ko'radi. Muhandislar jazoni kutish o‘rniga, yangi filial bo‘yicha o‘zlarining birinchi majburiyatlaridan tezda javob oladilar.
💡 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: Docker-fayllardan tashqari qurilish
Ehtimol, BuildKit-ning eng kam ma'lum bo'lgan qobiliyati shundaki, Dockerfiles faqat bitta mumkin bo'lgan kiritish formatidir - bu yagona emas. BuildKit to'liq moslashtirilgan ta'rif tillari va formatlarini yaratishga imkon beruvchi ulanadigan frontend arxitekturasiga ega. Frontend konstruksiya faylingizning yuqori qismidagi # syntax= direktivasi bilan belgilanadi, bu BuildKit-ga ma'lum bir frontend tasvirini olish va undan faylning qolgan qismini tahlil qilish va bajarish uchun foydalanishni bildiradi.
Ushbu arxitektura bir nechta jozibali loyihalarni ishga tushirdi. Buildpacks integratsiyasi BuildKit-ga hech qanday Dockerfilesiz ilova manba kodidan konteyner tasvirlarini yaratish imkonini beradi — u tilni aniqlaydi, tegishli asosiy tasvirlarni tanlaydi va ishlab chiqarishga tayyor konteynerni avtomatik ravishda yig‘adi. HPC va ilmiy hisoblash jamoalari BuildKit-ning ichki LLB (Past darajali Build) taqdimotiga qadar kompilyatsiya qilinadigan domenga xos tillardagi tuzilmalarni tavsiflash uchun maxsus frontendlardan foydalangan. docker/dockerfile:labs sintaksisi frontend heredoc qo‘llab-quvvatlashi, har bir ko‘rsatma uchun --tarmoq boshqaruvi va barqaror Dockerfile sintaksisiga kirishdan oldin kengaytirilgan kesh ko‘rsatmalari kabi xususiyatlar bilan tajriba o‘tkazadi.
O'z old tomonini aniqlash qobiliyati, shuningdek, noodatiy tuzilish talablari bo'lgan tashkilotlar "hamma narsani Dockerfile sintaksisiga kiritish" yoki "konteynerlardan butunlay voz kechish" o'rtasida tanlov qilishlari shart emasligini anglatadi. FPGA dasturiy ta'minoti, o'rnatilgan tizim tasvirlari yoki ixtisoslashtirilgan ML model konteynerlarini yaratish jamoasi ularning tuzilishini o'z domenlari uchun mantiqiy bo'lgan atamalar bilan tavsiflashi mumkin, shu bilan birga konteynerlar ishlaydigan istalgan joyda o'rnatiladigan standart OCI-mos konteyner tasvirlarini ishlab chiqaradi. Bu kengaytmalilik kirish formatini sobit deb hisoblaydigan tuzilma tizimlariga nisbatan haqiqiy arxitektura ustunligidir.
Tabiiy va SBOM: SolarWindsdan keyingi dunyo uchun qurilish
Dasturiy taʼminot taʼminoti zanjiri xavfsizligi 2020-yilda SolarWinds buzilishi va 2021-yilda Log4Shell zaifligidan soʻng nazariy tashvishdan kengash darajasidagi ustuvorlikka oʻtdi. AQSh hukumatining kiberxavfsizlik boʻyicha 14028-sonli Farmoni, 2021-yilning may oyida chiqarilgan, federal dasturiy taʼminot shartnomalari uchun majburiy hujjatlar. BuildKit-ning kelib chiqish sertifikatlari va SBOM yaratish xususiyatlari ushbu tartibga solish va xavfsizlik landshaftiga bevosita javobdir.
--provenance=true va --sbom=true bayroqlari bilan BuildKit kriptografik imzolangan attestatsiyalarni hosil qiladi, ularda konteyner tasviriga aynan nima kirganligi — qaysi asosiy tasvirlar ishlatilganligi, qaysi Dockerfile ko‘rsatmalari bajarilganligi, qaysi manba fayllari mavjudligi va qanday tashqi bog‘liqliklar olinganligi tasvirlangan. Bu attestatsiyalar SLSA (Dasturiy taʼminot artefaktlari uchun taʼminot zanjiri darajalari) tizimi va in-toto attestatsiya formatiga mos keladi, bu ularni Sigstore’s Cosign va OPA (Ochiq siyosat agenti) kabi siyosat mexanizmlari tomonidan mashinada tekshirish imkonini beradi.
Bu imkon beradigan amaliy ish jarayoni quyidagicha ko'rinadi:
- Dasturchi kodni bosadi; CI quvur liniyasi BuildKit qurilmasini ishga tushiradi va kelib chiqishi yoqilgan.
- BuildKit barcha komponentlar va ularning versiyalari roʻyxati bilan imzolangan SBOMni yaratadi.
- SBOM tasvir manifesti bilan birga konteyner registrida chop etiladi.
- Kubernetes klasteridagi qabul nazoratchilari joylashtirishga ruxsat berishdan oldin kelib chiqishini tekshiradi.
- Yangi CVElar oshkor qilinganda, zaiflik skanerlari ta'sirlangan tasvirlarni aniqlash uchun SBOMni so'raydi.
Ushbu toʻliq quvur liniyasini amalga oshiruvchi jamoalar zaifliklarni aniqlashga kunlar emas, bir necha soat ichida javob berishlari mumkin, chunki ular har bir ishlaydigan konteynerdagi har bir komponentning aniq, mashina oʻqiy oladigan xaritasiga ega. Mewayz kabi mijozlarning operativ ish jarayonlariga chuqur integratsiyalashgan – ish haqi hisobini yuritish, avtopark ma’lumotlarini boshqarish, hisob-fakturalarni qayta ishlash – qat’iy, tekshiriladigan ta’minot zanjirini namoyish etish qobiliyati kompaniya savdosi bo‘yicha suhbatlar uchun zarur shart bo‘lib bormoqda.
Ishga kirishish: standart tuzilmalardan kengaytirilgan quvurlargacha
Agar siz oxirgi Docker 23.0 va undan keyingi versiyasidan foydalansangiz, BuildKit allaqachon Docker muhitida ishlamoqda. Ko'pgina jamoalar uchun birinchi amaliy qadam Docker Buildx plaginini yoqish bo'lib, u docker buildx kichik buyrug'i orqali BuildKit-ning to'liq funksiyalarini ochib beradi. docker buildx create --use ishga tushirilishi standart drayverdan ko'ra ko'proq imkoniyatlarga ega BuildKit quruvchi namunasini o'rnatadi. Shu sababli, bir vaqtning o‘zida hamma narsani o‘zlashtirishga urinishdan ko‘ra, ilg‘or funksiyalarni bosqichma-bosqich qabul qilish mantiqiy bo‘ladi.
Hozirda asosiy docker build chaqiruvlarini bajarayotgan jamoa uchun qabul qilishning oqilona yo‘li birinchi navbatda CI-ga kesh eksportini qo‘shishga o‘xshaydi — bu konfiguratsiyani minimal o‘zgartirish bilan tezkor, o‘lchanadigan tezlikni yaxshilash imkonini beradi. Ko'p platformali tuzilmalar jamoa ARM infratuzilmasini nishonga olishni boshlaganda qimmatga tushadi. Yashirin o'rnatish har qanday vaqtda shaxsiy paket registrlari yoki SSH kalitlari kontekstda paydo bo'lganda foydalanishga arziydi. Muvofiqlik talablari yoki korporativ mijozlar talablari ta'minot zanjiri hujjatlarini zarur bo'lganda, kelib chiqish sertifikatlarini yoqish mantiqiy.
BuildKit-ning chuqurroq saboqlari ataylab qurish haqida. Mikroservis uchun konteyner, mashinani o'rganish yakuniy nuqtasi yoki Mewayzning 207 biznes modul to'plami kabi murakkab platformani jo'natayotgan bo'lsangiz ham, qurish jarayoni siz joylashtirish yo'lida shoshiladigan rasmiyatchilik emas - bu etkazib beriladigan barcha narsalarning sifati, xavfsizlik holati va operatsion etukligini aks ettiruvchi muhandislik artefaktidir. BuildKit sizga artefaktni mukammal qilish uchun vositalarni taqdim etadi. Savol shunchaki, ulardan foydalanishga vaqt ajratasizmi?
Ko'p beriladigan savollar
BuildKit nima va u klassik Docker qurish tizimidan nimasi bilan farq qiladi?
BuildKit - bu Dockerning yangi avlod qurish mexanizmi bo'lib, Docker 18.09 da taqdim etilgan va Docker 23.0 da sukut bo'yicha qilingan. Klassik quruvchidan farqli o'laroq, BuildKit qatlamlarni parallel bajarishni, ilg'or keshlash strategiyalarini, sirlarni o'rnatishni va o'zaro platformalar qurishni qo'llab-quvvatlaydi. U qurish jarayonini yoʻnaltirilgan asiklik grafik (DAG) sifatida koʻrib chiqadi, bu esa murakkab, koʻp bosqichli Docker-fayllar uchun bogʻliqlikni yanada oqilona hal qilish va tez qurish vaqtlarini sezilarli darajada tezlashtirish imkonini beradi.
Docker bilan BuildKit-dan foydalanishni boshlash uchun qo'shimcha biror narsa o'rnatishim kerakmi?
Agar siz Docker 23.0 yoki undan keyingi versiyalarida ishlayotgan bo‘lsangiz, qo‘shimcha o‘rnatish talab qilinmaydi — BuildKit sukut bo‘yicha yoqilgan. Eski versiyalarda qurish buyruqlarini ishga tushirishdan oldin DOCKER_BUILDKIT=1 muhit oʻzgaruvchisini oʻrnatish orqali uni faollashtirishingiz mumkin. Masofaviy qurish keshlari yoki koʻp platformali tuzilmalar kabi ilgʻor foydalanish holatlari uchun docker buildx create yordamida maxsus Buildx quruvchi nusxasini sozlashingiz mumkin.
BuildKit-dan standart konteyner tasvirlaridan tashqari artefaktlar yaratish uchun foydalanish mumkinmi?
Ha, va bu BuildKit-ning eng qadrlanmagan imkoniyatlaridan biridir. Maxsus frontendlar va --output bayrog'idan foydalangan holda BuildKit nafaqat OCI tasvirlarini emas, balki ikkilik fayllar, tarballlar, statik veb-saytlar va boshqa ixtiyoriy fayl artefaktlarini ishlab chiqishi mumkin. Bu uni poliglot monorepo va murakkab CI quvurlariga tabiiy ravishda mos keladigan umumiy maqsadli qurilish dvigateliga aylantiradi, bunda turli jamoalar birlashtirilgan asboblar zanjiridan turli chiqish formatlarini talab qiladi.
Qanday qilib BuildKit Mewayz kabi vositalar bilan bir qatorda kengroq DevOps platformasiga mos keladi?
BuildKit past darajadagi qurilish qatlamini boshqaradi, ammo zamonaviy ishlab chiqish guruhlari biznes jarayonlarini, mijozlarni yetkazib berishni va operatsion jarayonlarni boshqarishi kerak. Mewayz kabi platformalar — oyiga $19 dan boshlanadigan 207 modulli biznes OT — dasturiy taʼminot biznesining operatsion tomonini qamrab olgan holda infratuzilma vositalarini toʻldiradi. BuildKit tomonidan ishlab chiqarilgan samarali qurilish quvurlarini Mewayz kabi yaxlit platforma bilan bog‘lash jamoalarga kod artefaktidan tortib mijozga yetkazib berishgacha bo‘lgan to‘liq stekni beradi.
We use cookies to improve your experience and analyze site traffic. Cookie Policy