[viide Ameerika lastejutule âVĂ€ike rong, kes uskus endasseâ â tĂ”lkija mĂ€rkus]*

Kuidas automaatselt luua vÀikesi Dockeripilte oma vajaduste jaoks
Ebatavaline kinnisidee
Viimased paar kuud olen olnud kinnisideest vaevatud: kui vÀikseks ma Dockeripilti saan vÀhendada, et rakendus siiski töötaks?
MÔistan, et idee on kummaline.
Enne, kui sĂŒvenen detailidesse ja tehnilistesse nĂŒanssidesse, tahaksin selgitada, miks see probleem mind nii palju puudutas ja kuidas see teid mĂ”jutab.
Miks on suurus oluline
Dockeripildi sisu vÀhendamisega vÀhendame ka haavatavuste nimekirja. Lisaks muudame pildid puhtamaks, kuna need sisaldavad vaid seda, mis on vajalik rakenduste kÀivitamiseks.
On veel ĂŒks vĂ€ike eelis â pildid laevad natuke kiiremini, kuid minu arvates ei ole see nii oluline.
Oluline mÀrkus: kui teid huvitab suurus, sobivad Alpine'i pildid iseenesest hÀsti, kuna need on vÀiksed.
Distroless-pildid
pakub kogumit pĂ”hjalikke âdistrolessâ-pilte, mis ei sisalda paketihaldureid, kestasid ega muid utiliite, millega olete harjunud kĂ€sureal töötama. SeetĂ”ttu ei saa kasutada paketihaldureid nagu pip ja apt ei Ă”nnestu:
FROM gcr.io/distroless/python3
RUN pip3 install numpyDockerfile, mis kasutab distroless-pilti Python 3
Saadan ehituskonteksti Docker daemonile 2.048kB
Samm 1/2 : FROM gcr.io/distroless/python3
---> 556d570d5c53
Samm 2/2 : RUN pip3 install numpy
---> KĂ€ivitatakse dbfe5623f125
/bin/sh: 1: pip3: ei leitudPip'i pilt ei sisalda
Tavaliselt lahendatakse see probleem mitme etapi koostamisega:
FROM python:3 as builder
RUN pip3 install numpy
FROM gcr.io/distroless/python3
COPY --from=builder /usr/local/lib/python3.7/site-packages /usr/local/lib/python3.5/Mitme etapi koostamine
Tulemusena saame 130MB suuruse pildi. Mitte nii halb! VĂ”rdluseks, vaikimisi Pythonipilt kaalub 929MB, ja 'kavandatud' (3,7-slim) â 179MB, Alpine'i pilt (3,7-alpine) â 98,6MB, kuid nĂ€ites kasutatud aluspilt distroless on 50,9MB.
On Ôigustatud mÀrkida, et eelmises nÀites kopeerime terve katalooge, /usr/local/lib/python3.7/site-packageskus vÔivad olla meile mittevajalikud sÔltuvused. Kuigi on selge, et erinevus olemasolevate Pythonipiltide vahel varieerub.
KÀesoleva kirjutamise hetkel toetab Google distroless mitte vÀga palju pilte: Java ja Python on veel katsetamise faasis ning Python eksisteerib vaid 2,7 ja 3,5 jaoks.
VĂ€ikesed pildid
RÀÀgime tagasi minu kinnisideest vĂ€ikeste piltide loomise ĂŒle.
Ma tahtsin tegelikult vaadata, kuidas distroless-pildid on korraldatud. Distroless projekt kasutab Google'i koostööriista bazel. Siiski, et Bazel installida ja oma pilte kirjutada, tuli kĂ”vasti vaeva nĂ€ha (ja et tĂ€iesti aus olla, siis tuli ratast uuesti leiutada â see on lĂ”bus ja hariv). Tundsin vajadust lihtsustada vĂ€hendatud piltide loomist: pildi loomise akt peaks olema ÀÀrmiselt lihtne, banalne. Et poleks mingeid konfiguratsioonifaile, ainult ĂŒks rida konsolis: lihtsalt loo pilt <rakenduse> jaoks.
Nii et kui soovid oma pilte luua, siis tea: on olemas selline ainulaadne docker-pilt, scratch. Scratch on "tĂŒhi" pilt, selles pole faile, kuigi selle suurus on vaikimisi â ohjah! â 77 baiti.
FROM scratchScratch pilt
Scratch pildi idee on see, et saad kopeerida sinna kĂ”ik sĂ”ltuvused masina-hostist ja kas kasutada neid Dockerfile'is (nagu kopeerida need ja installeerida nullist) vĂ”i hiljem, kui Docker pilt on realiseeritud. See vĂ”imaldab tĂ€ielikult kontrollida Docker konteineri sisu ning seelĂ€bi ka pildi suurust. apt NĂŒĂŒd peame kuidagi need sĂ”ltuvused kokku panema. Olemasolevad tööriistad nagu
lubavad alla laadida pakette, kuid need on seotud praeguse masinaga ja lÔpuks ei toeta Windows vÔi MacOS. apt Ja nii hakkasin kokku panema oma tööriista, mis automaatselt koguks pÔhja pildi vÀikseima vÔimaliku suurusega ning ka kÀivitaks mis tahes rakenduse. Kasutasin Ubuntu/Debiani pakette, tÔmbasin valikuid (saades pakette otse hoidlatest) ja leidsin nende sÔltuvusi retsitiivsete meetoditega. Programm pidi automaatselt alla laadima uusima stabiilse versiooni paketti, minimeerides turvariskid.
Tööriista nimeks panin
fetchy , sest see⊠leiab ja toob⊠vajaliku [inglise keeles âfetchâ, âtoomaâ â tĂ€iendav mĂ€rkus.]. Tööriist töötab kĂ€surealiidese kaudu, kuid samas pakub ka API-d.Pildi kogumiseks, kasutades
(vĂ”tame seekord Python pildi), tuleb sul lihtsalt CLI kasutada jĂ€rgmiselt: , sest see⊠leiab ja toob⊠vajaliku [ fetchy dockerize python . Sinult vĂ”idakse kĂŒsida siht-operatsioonisĂŒsteemi ja koodinime, kunahetkel toetab see ainult Debian ja Ubuntu baasil pakette. , sest see⊠leiab ja toob⊠vajaliku [ ĐżĐŸĐșа ĐžŃĐżĐŸĐ»ŃĐ·ŃĐ”Ń ŃĐŸĐ»ŃĐșĐŸ паĐșĐ”ŃŃ ĐœĐ° базД Debian Đž Ubuntu.
NĂŒĂŒd saab valida, millised sĂ”ltuvused on tĂ€iesti ĂŒleliigsed (meie konteksti raames) ja need vĂ€lja jĂ€tta. NĂ€iteks, Python sĂ”ltub perl'ist, kuigi töötab suurepĂ€raselt ka ilma installitud Perlita.
tulemused nÀitasid ainult nelja ebaolulise koodibloki kattuvust, mis olid tingitud POSIX ja ANSI C nÔuetest.
Python'i kujutis, mis on loodud kÀsuga fetchy dockerize python3.5 kaalub vaid 35 MB (olen enam kui kindel, et tulevikus saab seda veelgi kergemaks muuta). Tundub, et distroless pildilt saime 'Àra lÔigata' veel 15 MB.
Kogu praegu kokku kogutud pilte saab vaadata .
Projekt â .
Kui teil on funktsioonidest puudu, looge lihtsalt taotlus â olen rÔÔmus teid aidata đ Veel enam, ma töötan hetkel integreerimise kallal fetchy jaoks teiste pakihalduritega, et mitmeastmelised kogumised enam ei oleks vajalikud.
Allikas: habr.com
