„Docker“ versijos kontekstas reiškia failus ir katalogus, kurie bus pasiekiami „Docker“ varikliui, kai jis paleis. |_+_|. Viskas, kas neįtraukta į kūrimo kontekstą, nebus pasiekiama jūsų |_+_| komandoms failą.
Turėtumėte patikrinti, ar naudojate |_+_| kad statybos kontekstai būtų nedideli. Atsitiktinai įtraukus nereikalingus failus, gali susidaryti pernelyg didelis kūrimo kontekstas, dėl kurio gali būti ilgesnės versijos.
Kas yra kūrimo kontekstas?
Štai paprastas |_+_| Siunčiu:
|_+_|Tai sukuria „Docker“ vaizdą naudojant |_+_| esantį jūsų darbo kataloge. Gautas vaizdas bus pažymėtas kaip |_+_|, nors ši detalė nėra svarbi šiai mokymo programai.
Savo |_+_| viduje tikriausiai naudosite |_+_| Norėdami pridėti failų ir aplankų prie vaizdo:
|_+_|Šis pavyzdys nukopijuoja failą |_+_| failą ir |_+_| katalogą savo konteineryje. Iš pirmo žvilgsnio atrodo, kad |_+_| deklaracija tiesiog nurodo kelią, kuris buvo išspręstas darbo katalogo atžvilgiu.
Taip nėra. |_+_| galite pasiekti tik kūrimo kontekste turimus išteklius. Šiame pavyzdyje kūrimo kontekstas yra darbinis katalogas, todėl jame esantys failai ir aplankai yra prieinami. Pagal numatytuosius nustatymus „Docker“ naudoja katalogo, perduoto |_+_|, turinį kaip statybos kontekstas.
Kodėl naudojamas statybos kontekstas?
Kūrimo kontekstas yra svarbus, nes „Docker“ CLI ir „Docker Engine“ gali neveikti tame pačiame įrenginyje. Kai paleidžiate |_+_|, CLI siunčia failus ir aplankus, kuriuos reikia sukurti, į Docker modulį. Šis failų ir aplankų rinkinys tampa kūrimo kontekstu.
Be to, ne visi kūrimo kontekstai yra tokie paprasti, kaip pakartotinis darbo katalogo naudojimas. „Docker“ taip pat palaiko „Git“ saugyklos URL kaip nurodytą kelią į |_+_|. Šiuo atveju kūrimo kontekstas tampa nurodytos saugyklos turiniu.
Numatytasis „įtraukti viską“ kūrimo konteksto elgesys tinka daugeliui mažų saugyklų. Problemos išryškėja, kai į savo darbo katalogą pridedate failus, kurių jūsų nenaudoja |_+_|. Ištekliai, tokie kaip numatytieji dvejetainiai failai, dokumentacijos failai ir priklausomybės bibliotekos, bus įtraukti į kūrimo kontekstą, net jei jie yra pertekliniai.
Per daug išteklių įtraukimas į kūrimo kontekstą gali pabloginti našumą. Be reikalo kopijuojate failus, kurie niekada nebus naudojami. Sulėtėjimas bus ypač pastebimas, jei esate prisijungę prie nuotolinio Docker demono arba jei naudojate lėtą mechaninį standųjį diską. Kai kopijavimas bus baigtas, savo apvalkale pamatysite užrašą „siunčiamas kūrimo kontekstas į Docker demoną“.
„Docker“ bando pati sumažinti perteklines kopijas. BuildKit build backend: naudojama nuo Docker 18.09 – Pridėta laipsniško pervedimo parama. Tai reiškia, kad „Docker“ paprastai turės tik kopijuoti failus, pridėtus arba pakeistus po paskutinio kūrimo. Jis ir toliau kopijuos visą paketą pirmoje versijoje.
Išteklių neįtraukimas į kūrimo kontekstą
Norėdami visam laikui ištaisyti kopijų švaistymą, turite nurodyti „Docker“, ką praleisti kūrimo kontekste. Pradėkime nuo failo kūrimo. |_+_|:
|_+_|Tai paprasta |_+_| gali būti naudojamas Node.js parašyta programa. Node.js programos naudoja |_+_| kaip paketų valdytojas. Paketai įdiegiami faile |_+_| rišiklis. Kai bėgate |_+_| lokaliai, kūrimo metu paketai bus atsisiunčiami į |_+_| aplanką darbo kataloge.
|_+_| lenktynes |_+_| pati įgyti priklausomybes. Tai užtikrina, kad vaizdas būtų visiškai savarankiškas. Nereikia kopijuoti į failą Vietinis |_+_| aplanką, nes jo nenaudoja |_+_| failą.
Nepaisant to, „Docker“ vis tiek įtrauks |_+_| aplanką numatytame kūrimo kontekste. Norėdami jį pašalinti, sukurkite failą. |_+_| failą darbo kataloge. Šio failo sintaksė panaši į |_+_|.
|_+_|Visi maršrutai, išvardyti |_+_| bus pašalintas iš kūrimo konteksto. Turėtumėte įsitikinti, kad |_+_| neatsilieka nuo projekto failų sistemos struktūros pokyčių. Galite žymiai sutrumpinti „Docker“ kūrimo konteksto kopijavimo laiką, patikrinę, ar kūrimo kontekste yra tik atitinkami keliai (tie, kuriuos iš tikrųjų naudoja jūsų |_+_|).
Mūsų pavyzdžio atveju |_+_| Aplanke gali būti tūkstančiai failų, jei mūsų projekte yra daug priklausomybių. Jų kopijavimas į „Docker“ demoną kaip kūrimo konteksto dalį gali užtrukti kelias sekundes ir būti brangus. |_+_| ji visiškai jų nepaiso ir pareiškia apie jų priklausomybę per |_+_| vietoj.
Kitos kūrimo konteksto problemos
Nenaudojamas |_+_| tai taip pat gali sukelti kitų problemų. Dockerfile su šia eilute yra ypač problemiškas:
|_+_|Tai nukopijuos visi savo darbo kataloge. Tai gali atrodyti gera idėja, kol neįsisavinsite savo. |_+_| istorija ir visi slapti failai taip pat pateks į jūsų konteinerį.
Kopijuojant nefiltruotą kūrimo kontekstą, Docker lygio talpyklos kaupimas taip pat neveikia efektyviai. man tai patinka kažkas jūsų darbo kataloge tikriausiai keisis versijos, Docker turėtų paleisti failą |_+_| nurodymus kiekvieną kartą. Taip būtų sukurtas naujas lygis ir nauji lygiai visoms vėlesnėms instrukcijoms, net jei jus dominantys ištekliai nepasikeitė.
Suspausti kūrimo kontekstą
Galite suglaudinti kūrimo kontekstą, kad dar labiau pagerintumėte kūrimo našumą. Praleiskite |_+_| pažymėkite |_+_| taikyti gzip glaudinimą. Suspaudimas įvyksta prieš kontekstą siunčiant į Docker demoną.
|_+_|Tai gali pagerinti našumą kai kuriais atvejais. Tačiau glaudinimas prideda papildomų išlaidų: dabar sistema turi suspausti kontekstą, o priimantis Docker demonas turi jį išskleisti. Tam tikromis aplinkybėmis glaudinimo naudojimas gali būti lėtesnis nei originalių failų kopijavimas. Eksperimentuokite su kiekvienu vaizdu, kad pamatytumėte, ar matote pagerėjimą.
išvada
„Docker“ kūrimo kontekstas apibrėžia failus, kuriuos bus galima nukopijuoti į jūsų |_+_| archyvas. Kūrimo kontekstas nukopijuojamas į Docker demoną prieš pradedant kūrimą.
Pagal numatytuosius nustatymus kūrimo kontekstai apima „Git“ saugyklos arba katalogo, kurį pakeitėte į |_+_|, turinį. Galite praleisti kūrimo konteksto elementus, sukurdami |_+_| procesus. Tai padidina efektyvumą, nes sumažina perteklinių duomenų, perduodamų „Docker“ demonui, kiekį.
Ką tu manai?