BuildKit: Gem Siri ya Docker Ambayo Inaweza Kuunda Karibu Chochote
Maoni
Mewayz Team
Editorial Team
BuildKit: Kito Kilichofichwa cha Docker Kinachoweza Kuunda Karibu Chochote
Watengenezaji wengi wanajua Docker kama muda wa matumizi wa kontena ambao ulibadilisha jinsi programu inavyosafirishwa. Ni wachache sana wanaofahamu kuhusu injini inayovuma kwa utulivu chini ya kila jengo la kisasa la Docker - BuildKit, mfumo wa ujenzi wa kizazi kijacho ambao umekuwa ukisafirishwa kwa kutumia Docker tangu toleo la 18.09 na ukawa njia mbadala katika Docker 23.0. Ingawa wahandisi wanabishana bila kikomo kuhusu usanidi wa Kubernetes na mifumo ya huduma ndogo, BuildKit imekuwa ikibadilika kwa kasi na kuwa mojawapo ya mifumo yenye nguvu zaidi, inayonyumbulika katika mfumo ikolojia wa DevOps. Ikiwa umekuwa ukiichukulia kama ujenzi wa kizimbani haraka zaidi, unaacha uwezo mkubwa kwenye jedwali. Kampuni zinazotumia mabomba ya CI/CD zenye ubora wa juu zimepunguza nyakati za ujenzi kwa 50-70% kwa kuelewa ni nini hasa BuildKit inatoa - na huo ni mwanzo tu.
Nini Hufanya BuildKit kuwa Tofauti Kimsingi na Kijenzi cha Kawaida
Injini asili ya kutengeneza Docker ilitekeleza maagizo ya Dockerfile kwa mfuatano, safu moja baada ya nyingine, bila ufahamu wa kazi gani inaweza kufanyika kwa usalama sambamba. BuildKit inachukua nafasi ya muundo huo wa utekelezaji kwa grafu ya acyclic iliyoelekezwa (DAG) - grafu tegemezi inayoelewa ni hatua zipi za muundo zinategemeana na zipi hazitegemei. Hatua huru hutekelezwa kwa wakati mmoja, hatua ambazo hazijatumika hutupwa kabisa, na muundo mzima unakuwa maelezo ya kutangaza kile unachotaka badala ya mlolongo wa lazima wa hatua unazopaswa kukariri kwa mpangilio ufaao.
Mabadiliko haya ya usanifu yana matokeo ya kiutendaji ambayo yanapita kasi. Wakati Dockerfile ya hatua nyingi inapokusanya mfumo wa jozi wa Go katika hatua moja, kupakua vitegemezi vya Node.js katika hatua nyingine, na kukusanya picha ya uzalishaji katika awamu ya tatu, BuildKit inaweza kutekeleza hatua mbili za kwanza kwa wakati mmoja. Ujenzi ambao hapo awali ulichukua dakika nne kwenye mkimbiaji mwenye nguvu wa CI sasa unakamilika kwa chini ya sekunde tisini. Stripe, Shopify, na timu zingine nyingi za uhandisi za kiwango cha juu zimeandika faida sawa katika mitazamo yao ya ndani ya zana. Muundo wa DAG pia unamaanisha kuwa BuildKit inaweza kutoa metadata ya ujenzi iliyo sahihi sana - msingi wa vipengele kama vile uthibitisho wa asili na uundaji wa bili ya vifaa vya programu (SBOM) ambavyo ni muhimu sana kwa usalama wa ugavi.
Pia kuna mabadiliko ya kimawazo katika jinsi ubatilifu wa akiba unavyofanya kazi. Mjenzi wa kawaida alibatilisha kila safu chini ya maagizo yoyote yaliyobadilishwa. BuildKit hufuatilia heshi za maudhui katika kila ingizo, kwa hivyo kubadilisha maoni kwenye Dockerfile hakuondoi ingizo la akiba ambalo linawakilisha dakika thelathini za mkusanyiko. Wakati akiba yako ya muundo ni tofauti kati ya kitanzi cha maoni cha dakika tano na dakika arobaini kwa timu yako ya wahandisi, usahihi huu ni muhimu zaidi kuliko inavyoweza kuonekana mwanzoni.
Uundaji wa Majukwaa mengi: Amri Moja, Kila Usanifu
Bendera ya --platform ya BuildKit na muunganisho wa QEMU hubadilisha lililokuwa tatizo chungu la uratibu wa mifumo mingi kuwa amri moja. Running docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 . hutoa picha tatu zilizo tayari kwa utayarishaji sambamba kutoka kwa ombi moja la ujenzi. Uwezo huu umekuwa muhimu kadri tasnia inavyoelekea kwenye ARM - Matukio ya AWS Graviton3 mara kwa mara hutoa utendakazi bora wa 40% wa bei kwenye mizigo ya kazi kama vile huduma ya wavuti na usindikaji wa data, na Apple Silicon imefanya ARM kuwa mashine chaguo-msingi ya ukuzaji kwa mamilioni ya wahandisi.
Kabla ya usaidizi wa majukwaa mengi ya BuildKit kukomaa, kudumisha mabomba tofauti ya ujenzi kwa usanifu tofauti ilikuwa kituo cha gharama halisi. Timu ama zilidumisha faili nyingi za Docker, ziliendesha mabomba tofauti ya CI kwa wakimbiaji waliobuniwa kwa njia tofauti, au zilisafirisha picha za x86 kila mahali na kulipa adhabu ya utendakazi kwenye miundombinu ya ARM. Ukiwa na BuildKit, unafafanua muundo wako mara moja na kuruhusu mfumo kushughulikia mkusanyiko wa usanifu mahususi kwa uwazi. Miradi ya kutu inayohitaji ujumuishaji mtambuka, Miradi ya Go yenye tegemezi za CGO, vifurushi vya Python vilivyo na viendelezi vya C — BuildKit hushughulikia safu ya uigaji bila kukuhitaji uelewe maelezo ya kila jukwaa lengwa.
Thamani halisi ya biashara hapa inaweza kupimika. Timu inayoendesha makontena 200 kwenye matukio ya AWS Graviton kwa $0.04 kwa kila vCPU-saa dhidi ya mfano sawa wa x86 kwa $0.056 kwa kila saa ya vCPU huokoa takriban $11,520 kila mwaka kwa vCPU 100 - kutokana na kuchagua usanifu sahihi. Kufanya chaguo hilo kufikiwa bila juhudi za uhandisi upya ni aina hasa ya uboreshaji wa miundombinu ambayo hujilipia mara moja.
Usimamizi wa Siri Bila Kuvuja kwenye Tabaka za Picha
Moja ya vipengele ambavyo havithaminiwi sana vya BuildKit ni API yake ya siri. Mjenzi wa kawaida wa Docker hakuwa na njia safi ya kupitisha vitambulisho kwenye jengo bila sifa hizo ambazo zinaweza kuishia kwenye safu ya picha. Wasanidi programu walishughulikia hili kwa miundo ya hatua nyingi, ARG maagizo, na kuagiza kwa uangalifu - lakini hatari ya kuoka kwa bahati mbaya ufunguo wa API au ufunguo wa kibinafsi wa SSH kwenye picha iliyosafirishwa iliendelea kuwa juu sana. Vichanganuzi vya usalama mara kwa mara hupata kitambulisho chenye msimbo gumu katika picha za kontena zilizochapishwa kwa sajili za umma, na nyingi za uvujaji huo hurejea moja kwa moja kwenye ushughulikiaji wa siri wakati wa ujenzi.
Alama ya
--siri ya BuildKit huweka data nyeti katika mazingira ya muundo kama njia ya muda ya mfumo wa faili ambayo ipo tu kwa muda wa maagizo mahususi ya RUN ambayo yanaihitaji na kamwe haigusi safu yoyote ya picha. Maagizo ya Dockerfile kama RUN --mount=type=secret,id=npmrc cat /run/secrets/npmrc > ~/.npmrc && npm install huipa mchakato wa ujenzi ufikiaji wa vitambulisho vya npm vya kibinafsi bila vitambulisho hivyo kuwahi kuonekana kwenye picha ya mwisho au safu yoyote ya kati. Mchoro sawa hufanya kazi kwa vitambulisho vya PyPI, mipangilio ya Maven, funguo za SSH za hazina za kibinafsi za Git, na nyenzo nyingine yoyote nyeti mchakato wako wa kujenga unahitaji.
Kwa timu zinazounda programu zinazogusa tasnia zinazodhibitiwa - mifumo ya afya, bidhaa za fintech, programu ya Utumishi - tofauti kati ya "vitambulisho vinaweza kuwa kwenye picha" na "kitambulisho hakika hakiwezi kuwa kwenye picha" ni tofauti kati ya kupitisha ukaguzi wa usalama na kutumia wiki tatu kurekebisha matokeo. Mifumo kama vile Mewayz, ambayo huendesha shughuli za biashara kwa zaidi ya watumiaji 138,000 katika sekta zote kama vile malipo, HR, na ankara, inategemea hasa aina hii ya mkao wa usalama unaoweza kuthibitishwa katika ujenzi na usambazaji wao ili kudumisha imani ambayo wateja hao wanaweka kwa data zao nyeti za kifedha na wafanyikazi.
Usafirishaji wa Akiba: Kufanya Mabomba ya CI Haraka
Mabomba ya CI ni mahali ambapo utendakazi wa muundo ndio jambo muhimu zaidi na ambapo utumiaji wa muundo msingi wa Doka umekuwa chungu zaidi kihistoria. Wakimbiaji wapya wa CI kwa kawaida huanza na akiba tupu, kumaanisha kwamba kila bomba linaloendeshwa hukusanya kila kitu kutoka mwanzo. Kwa huduma ya Java iliyo na mamia ya tegemezi za Maven, mradi wa Rust, au programu ya Python iliyo na viendelezi vizito vya asili, hii inamaanisha nyakati za ujenzi zilizopimwa kwa makumi ya dakika badala ya sekunde. Gharama ya biashara ya CI ya polepole ni kubwa sana - kupunguzwa kwa marudio ya utumaji, misururu mirefu ya maoni, na wahandisi kukaa bila kufanya kitu wakingojea mabomba kukamilika kabla ya kuunganishwa na kuendelea.
Kipengele cha kuhamisha akiba cha BuildKit hutatua hili kwa vielelezo vya akiba vinavyoweza kuhamishwa. Kwa kutumia --cache-to type=registry,ref=myregistry/myapp:cache na --cache-from type=registry,ref=myregistry/myapp:cache, BuildKit inasukuma snapshot ya kina ya kache kwenye sajili baada ya kila muundo wa kuanza na kuvuta unaofuata. Akiba inashughulikiwa na maudhui, kwa hivyo ni safu zilizobadilishwa kihalisi pekee ndizo zinazoletwa tena. Timu zinazotumia mchoro huu katika GitHub Actions, GitLab CI, na CircleCI mara kwa mara hukata muda wa bomba kutoka dakika kumi na tano hadi chini ya tatu kwa kukimbia zinazofuata. Hati za GitHub kwenye utiririshaji wa kazi wa hali ya juu wa Docker unapendekeza sana muundo huu kwa sababu hii haswa.
Muundo wa haraka zaidi ni ule ambao hutalazimika kuuendesha tena. Mfumo wa akiba wa BuildKit uliowekwa tabaka, unaoshughulikiwa na maudhui hauharakishi tu ujenzi - unafanya dhana nzima ya "kujenga" kuwa nadhifu, na kugeuza mkusanyiko unaorudiwa kuwa tofauti ya ongezeko la kile kilichobadilika.
Uhamishaji wa akiba pia huunganishwa kwa usafi na utiririshaji wa kazi wa ukuzaji wa msingi wa tawi. Unaweza kusanidi bomba lako la CI kurudi kutoka kwa akiba maalum ya tawi hadi kashe kuu ya tawi wakati hakuna akiba ya tawi, ikimaanisha kuwa matawi mapya yananufaika mara moja kutoka kwa akiba ya joto iliyokusanywa na laini yako kuu ya ukuzaji. Wahandisi hupata maoni ya haraka kutoka kwa ahadi yao ya kwanza kwenye tawi jipya badala ya kungoja adhabu ya kuanza bila shida.
💡 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 →Mipaka ya mbele ya BuildKit: Jengo Zaidi ya Faili za Docker
Pengine uwezo usiojulikana sana wa BuildKit ni kwamba Dockerfiles ni umbizo moja tu la ingizo linalowezekana - sio pekee. BuildKit ina usanifu wa mandhari ya mbele unaoweza kuchomekwa ambao unaruhusu lugha na umbizo za ufafanuzi wa muundo maalum. Sehemu ya mbele imebainishwa na maagizo ya # syntax= iliyo juu ya faili yako ya ujenzi, ambayo inaiambia BuildKit kuvuta picha fulani ya sehemu ya mbele na kuitumia kuchanganua na kutekeleza faili iliyosalia.
Usanifu huu umewezesha miradi kadhaa ya kuvutia. Uunganishaji wa Buildpacks huruhusu BuildKit kuunda picha za kontena kutoka kwa msimbo wa chanzo cha programu bila Dockerfile hata kidogo - hutambua lugha, huchagua picha za msingi zinazofaa, na kukusanya kontena iliyotayari kwa uzalishaji kiotomatiki. HPC na jumuiya za kompyuta za kisayansi zimetumia mandhari ya mbele maalum kuelezea miundo katika lugha mahususi ya kikoa ambayo inajumuisha uwakilishi wa ndani wa LLB (Low-Level Build) ya BuildKit. docker/dockerfile:labs majaribio ya sintaksia ya mbele yenye vipengele kama vile usaidizi wa heredoc, udhibiti wa --network kwa kila maagizo, na vidokezo vilivyoimarishwa vya akiba kabla ya kutua katika sintaksia thabiti ya Dockerfile.
Uwezo wa kufafanua mandhari ya mbele yako pia inamaanisha mashirika yenye mahitaji ya muundo yasiyo ya kawaida hayahitaji kuchagua kati ya "shoehorn kila kitu kwenye syntax ya Dockerfile" na "kuacha vyombo kabisa." Timu inayounda programu dhibiti ya FPGA, picha za mifumo iliyopachikwa, au kontena maalum za muundo wa ML zinaweza kuelezea muundo wao kwa maneno ambayo yanaeleweka kwa kikoa chao huku zikiendelea kutoa picha za kawaida za kontena zinazotii OCI ambazo hutuma popote makontena yanaendeshwa. Upanuzi huu ni faida halisi ya usanifu juu ya mifumo ya ujenzi ambayo inachukulia umbizo lao la ingizo kama lisilobadilika.
Mazoezi na SBOM: Kujenga Ulimwengu wa Baada ya Upepo wa Jua
Usalama wa ugavi wa programu ulihamishwa kutoka wasiwasi wa kinadharia hadi kipaumbele cha bodi baada ya ukiukaji wa SolarWinds mwaka wa 2020 na uwezekano wa kuathiriwa wa Log4Shell mwaka wa 2021. Agizo Kuu la serikali ya Marekani la 14028 kuhusu usalama wa mtandao, lililotolewa Mei 2021, liliamuru muswada wa nyenzo za programu kwa wakandarasi wa shirikisho. Uthibitisho wa asili wa BuildKit na vipengele vya uzalishaji wa SBOM ni jibu la moja kwa moja kwa mazingira haya ya udhibiti na usalama.
Ikiwa na --provenance=true na --sbom=true bendera, BuildKit hutoa uthibitisho uliotiwa sahihi kwa njia fiche ambao unaelezea hasa kile kilichoingia kwenye picha ya chombo - ni picha zipi za msingi zilitumika, maagizo ya Dockerfile yalitekelezwa, faili za chanzo zilikuwepo, na ni vitegemezi vipi vya nje vilivyoletwa. Uthibitisho huu unafuata mfumo wa SLSA (Ngazi za Msururu wa Ugavi kwa Vizalia vya Programu) na umbizo la uthibitisho wa ndani ya toto, na kuzifanya ziweze kuthibitishwa na mashine za kisera kama vile Sigstore's Cosign na OPA (Open Policy Agent).
Mtiririko wa vitendo unaowashwa na hii unaonekana kama hii:
- Msanidi programu anasukuma msimbo; Bomba la CI huanzisha muundo wa BuildKit na asili imewezeshwa.
- BuildKit hutengeneza orodha ya SBOM iliyotiwa saini ya vipengele vyote na matoleo yake.
- SBOM inachapishwa kwenye sajili ya kontena kando ya faili ya maelezo.
- Vidhibiti vya uandikishaji katika nguzo ya Kubernetes huthibitisha asili kabla ya kuruhusu kupelekwa.
- Vichanganuzi vya mazingira magumu huuliza SBOM ili kutambua picha zilizoathiriwa wakati CVE mpya zinapofichuliwa.
Timu zinazotekeleza mpango huu kamili zinaweza kujibu ufumbuzi wa athari kwa saa badala ya siku, kwa sababu zina ramani sahihi, inayoweza kusomeka na mashine ya kila sehemu katika kila chombo kinachoendeshwa. Kwa biashara kama vile Mewayz zinazojumuika kwa kina katika mtiririko wa kazi wa wateja - kuendesha mishahara, kudhibiti data ya meli, kuchakata ankara - uwezo wa kuonyesha msururu wa ugavi unaoweza kukaguliwa unazidi kuwa hitaji la lazima kwa mazungumzo ya mauzo ya biashara, si tu kuwa na kitu kizuri.
Kuanza: Kutoka kwa Miundo Chaguomsingi hadi Mabomba ya Kina
BuildKit tayari inafanya kazi katika mazingira yako ya Docker ikiwa unatumia toleo la hivi majuzi - Docker 23.0 na baadaye iwashe kwa chaguo-msingi. Hatua ya kwanza ya vitendo kwa timu nyingi ni kuwezesha programu-jalizi ya Docker Buildx, ambayo inafichua kipengele kamili cha BuildKit kilichowekwa kupitia docker buildx amri ndogo. Kuendesha docker buildx create --use huanzisha mfano wa mjenzi wa BuildKit wenye uwezo zaidi kuliko kiendeshi chaguo-msingi. Kuanzia hapo, upitishaji wa vipengele vya kina unaleta maana badala ya kujaribu kupitisha kila kitu mara moja.
Njia ifaayo ya kuasili kwa timu inayofanya maombi ya msingi ya uundaji wa kizio inaonekana kama kuongeza uhamishaji wa akiba kwa CI kwanza — hii italeta maboresho ya haraka, yanayoweza kupimika na mabadiliko madogo ya usanidi. Miundo ya majukwaa mengi huwa ya thamani wakati timu inapoanza kulenga miundombinu ya ARM. Uwekaji wa siri unafaa kupitisha wakati wowote sajili za kifurushi cha kibinafsi au funguo za SSH zinaonekana katika muktadha wa muundo. Uthibitisho wa asili una mantiki kuwezesha wakati mahitaji ya kufuata au matakwa ya mteja wa biashara yanafanya hati za mnyororo wa usambazaji kuwa muhimu.
Somo la kina la BuildKit ni kuhusu kujenga kimakusudi. Iwe unasafirisha kontena kwa ajili ya huduma ndogo, sehemu ya mwisho ya ujifunzaji wa mashine, au jukwaa changamano kama safu ya Mewayz ya moduli 207 za biashara, mchakato wa uundaji sio utaratibu unaoharakisha wakati wa kupelekwa - ni vizalia vya uhandisi vinavyoakisi ubora, mkao wa usalama, na ukomavu wa kufanya kazi kati ya kila kitu kinachosafirishwa. BuildKit hukupa zana za kufanya vizalia vya programu hiyo kuwa bora zaidi. Swali ni kama unachukua muda kuzitumia.
Maswali Yanayoulizwa Sana
BuildKit ni nini na ina tofauti gani na mfumo wa kawaida wa kutengeneza Docker?
BuildKit ni injini ya ujenzi ya kizazi kijacho ya Docker, iliyoletwa katika Docker 18.09 na kufanya chaguomsingi katika Docker 23.0. Tofauti na kijenzi cha kawaida, BuildKit inaauni utekelezaji wa safu sambamba, mikakati ya hali ya juu ya kuweka akiba, kuweka siri na miundo ya majukwaa mbalimbali. Inachukulia mchakato wa uundaji kama grafu ya acyclic iliyoelekezwa (DAG), inayowezesha azimio nadhifu la utegemezi na nyakati za uundaji wa haraka sana kwa Dockerfiles changamano, za hatua nyingi.
Je, ninahitaji kusakinisha chochote cha ziada ili kuanza kutumia BuildKit na Docker?
Hakuna usakinishaji wa ziada unaohitajika ikiwa unatumia Docker 23.0 au matoleo mapya zaidi - BuildKit imewashwa kwa chaguomsingi. Kwenye matoleo ya zamani, unaweza kuiwasha kwa kuweka utofauti wa mazingira DOCKER_BUILDKIT=1 kabla ya kutekeleza amri zako za uundaji. Kwa hali za utumiaji wa hali ya juu kama kache za uundaji wa mbali au miundo ya majukwaa mengi, unaweza kutaka kusanidi mfano maalum wa mjenzi wa Buildx ukitumia docker buildx create.
Je, BuildKit inaweza kutumika kutengeneza vizalia vya programu zaidi ya picha za kawaida za kontena?
Ndiyo, na huu ni mojawapo ya uwezo wa BuildKit ambao hauthaminiwi sana. Kwa kutumia sehemu za mbele maalum na alama ya --output, BuildKit inaweza kutoa jozi mbichi, mipira ya lami, tovuti tuli, na vizalia vya faili vingine kiholela - si tu picha za OCI. Hii inaifanya kuwa injini ya kujenga yenye madhumuni ya jumla ambayo inatoshea kawaida katika polyglot monorepos na mabomba changamano ya CI ambapo timu tofauti zinahitaji miundo tofauti ya kutoa kutoka kwa msururu wa zana uliounganishwa.
Je, BuildKit inaingiaje kwenye jukwaa pana la DevOps pamoja na zana kama vile Mewayz?
BuildKit hushughulikia safu ya ujenzi ya kiwango cha chini, lakini timu za kisasa za maendeleo zinahitaji pia kudhibiti utendakazi wa biashara, uwasilishaji wa wateja na michakato ya uendeshaji. Mifumo kama vile Mewayz — Mfumo wa uendeshaji wa biashara wa moduli 207 unaoanzia $19/mo - hukamilisha zana za miundombinu kwa kuangazia upande wa uendeshaji wa biashara za programu. Kuoanisha mabomba ya ujenzi yenye ufanisi yanayoendeshwa na BuildKit na jukwaa la kila mtu kama Mewayz huzipa timu rundo kamili kutoka kwa vizalia vya programu vya msimbo hadi uwasilishaji wa wateja.
We use cookies to improve your experience and analyze site traffic. Cookie Policy