[atsauce uz amerikÄÅu bÄrnu pasaku "The Little Engine That Could" - apm. josla]*
KÄ automÄtiski izveidot nelielus Docker attÄlus savÄm vajadzÄ«bÄm
Neparasta apsÄstÄ«ba
PÄdÄjos pÄris mÄneÅ”us esmu bijis apsÄsts ar to, cik mazs var bÅ«t Docker attÄls, un lietojumprogramma joprojÄm darbojas?
Saprotu, doma dīvaina.
Pirms Ä·eros pie detaļÄm un tehniskajiem aspektiem, es vÄlos paskaidrot, kÄpÄc Ŕī problÄma mani tik ļoti uztrauca un kÄ tÄ attiecas uz jums.
KÄpÄc izmÄram ir nozÄ«me
Samazinot Docker attÄla saturu, mÄs tÄdÄjÄdi samazinÄm ievainojamÄ«bu sarakstu. TurklÄt mÄs padarÄm attÄlus tÄ«rÄkus, jo tajos ir tikai tas, kas nepiecieÅ”ams lietojumprogrammu palaiÅ”anai.
Ir vÄl viena neliela priekÅ”rocÄ«ba - attÄli tiek lejupielÄdÄti nedaudz ÄtrÄk, bet, manuprÄt, tas nav tik svarÄ«gi.
LÅ«dzu, Åemiet vÄrÄ: ja jÅ«s uztrauc izmÄrs, Alpine izskatÄs mazs un, visticamÄk, jums derÄs.
Distroless attÄli
pip
Šø apt
nedarbosies:
FROM gcr.io/distroless/python3
RUN pip3 install numpy
Dockerfile, izmantojot Python 3 distroless attÄlu
Sending build context to Docker daemon 2.048kB
Step 1/2 : FROM gcr.io/distroless/python3
---> 556d570d5c53
Step 2/2 : RUN pip3 install numpy
---> Running in dbfe5623f125
/bin/sh: 1: pip3: not found
Pip nav attÄlÄ
Parasti Ŕī problÄma tiek atrisinÄta ar daudzpakÄpju bÅ«vniecÄ«bu:
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/
DaudzpakÄpju montÄža
RezultÄts ir 130 MB liels attÄls. Nav slikti! SalÄ«dzinÄjumam: noklusÄjuma Python attÄls sver 929 MB, bet āplÄnÄkaisā (3,7-slim
) - 179 MB, kalnu attÄls (3,7-alpine
) ir 98,6 MB, savukÄrt piemÄrÄ izmantotais pamata bezdistrozes attÄls ir 50,9 MB.
Ir godÄ«gi norÄdÄ«t, ka iepriekÅ”ÄjÄ piemÄrÄ mÄs kopÄjot visu direktoriju /usr/local/lib/python3.7/site-packages
, kurÄ var bÅ«t mums nevajadzÄ«gas atkarÄ«bas. Lai gan ir skaidrs, ka visu esoÅ”o Python bÄzes attÄlu izmÄru atŔķirÄ«ba ir atŔķirÄ«ga.
RakstÄ«Å”anas laikÄ Google distroless neatbalsta daudzus attÄlus: Java un Python joprojÄm ir eksperimenta stadijÄ, un Python pastÄv tikai versijÄm 2,7 un 3,5.
SÄ«ki attÄli
Atpakaļ pie manas apsÄstÄ«bas ar mazu attÄlu veidoÅ”anu.
VispÄr es gribÄju redzÄt, kÄ tiek konstruÄti bezdistroless attÄli. Distroless projektÄ tiek izmantots Google veidoÅ”anas rÄ«ks bazel
. TomÄr Bazel instalÄÅ”ana un savu attÄlu rakstÄ«Å”ana prasÄ«ja daudz darba (un, godÄ«gi sakot, riteÅa izgudroÅ”ana ir jautra un izglÄ«tojoÅ”a). Es gribÄju vienkÄrÅ”ot mazÄku attÄlu izveidi: attÄla izveidei jÄbÅ«t ÄrkÄrtÄ«gi vienkÄrÅ”ai, banÄls. Lai jums nebÅ«tu konfigurÄcijas failu, konsolÄ ir tikai viena rindiÅa: ŠæŃŠ¾ŃŃŠ¾ ŃŠ¾Š±ŃŠ°ŃŃ Š¾Š±ŃŠ°Š· Š“Š»Ń <ŠæŃŠøŠ»Š¾Š¶ŠµŠ½ŠøŠµ>
.
TÄtad, ja vÄlaties izveidot savus attÄlus, ziniet: ir tik unikÄls doka attÄls, scratch
. Scratch ir ātukÅ”sā attÄls, tajÄ nav neviena faila, lai gan pÄc noklusÄjuma tas sver - oho! - 77 baiti.
FROM scratch
SkrÄpÄts attÄls
SkrÄpÄta attÄla ideja ir tÄda, ka jÅ«s varat tajÄ iekopÄt visas atkarÄ«bas no resursdatora un vai nu izmantot tÄs Docker failÄ (tas ir kÄ kopÄÅ”ana uz apt
un instalÄjiet no nulles) vai vÄlÄk, kad tiek materializÄts Docker attÄls. Tas ļauj pilnÄ«bÄ kontrolÄt Docker konteinera saturu un tÄdÄjÄdi pilnÄ«bÄ kontrolÄt attÄla izmÄru.
Tagad mums ir kaut kÄ jÄsavÄc Ŕīs atkarÄ«bas. EsoÅ”ie rÄ«ki, piemÄram apt
ļauj lejupielÄdÄt pakotnes, taÄu tÄs ir saistÄ«tas ar paÅ”reizÄjo maŔīnu un galu galÄ neatbalsta Windows vai MacOS.
TÄpÄc es nolÄmu izveidot savu rÄ«ku, kas automÄtiski izveidotu pÄc iespÄjas mazÄka izmÄra pamata attÄlu un arÄ« palaistu jebkuru lietojumprogrammu. Es izmantoju Ubuntu/Debian pakotnes, veicu atlasi (pakeÅ”u iegÅ«Å”ana tieÅ”i no krÄtuvÄm) un rekursÄ«vi atradu to atkarÄ«bas. Programmai bija paredzÄts automÄtiski lejupielÄdÄt jaunÄko stabilo pakotnes versiju, pÄc iespÄjas samazinot droŔības riskus.
Es nosaucu rīku fetchy
, jo viÅÅ”... atrod un atnes... ko vajag [no angļu valodas āatnestā, āatnestā - apm. josla]. RÄ«ks darbojas, izmantojot komandrindas saskarni, bet tajÄ paÅ”Ä laikÄ piedÄvÄ API.
Lai saliktu attÄlu, izmantojot fetchy
(Å”oreiz Åemsim Python attÄlu), jums vienkÄrÅ”i jÄizmanto CLI Å”Ädi: fetchy dockerize python
. Jums var tikt lÅ«gts norÄdÄ«t mÄrÄ·a operÄtÄjsistÄmu un koda nosaukumu, jo fetchy
paÅ”laik izmanto tikai paketes, kuru pamatÄ ir Debian un Ubuntu.
Tagad jÅ«s varat izvÄlÄties, kuras atkarÄ«bas vispÄr nav vajadzÄ«gas (mÅ«su kontekstÄ), un tÄs izslÄgt. PiemÄram, Python ir atkarÄ«gs no perl, lai gan tas darbojas labi, ja Perl nav instalÄts.
rezultÄtus
Python attÄls, kas izveidots, izmantojot komandu fetchy dockerize python3.5
sver tikai 35MB (esmu vairÄk nekÄ pÄrliecinÄts, ka nÄkotnÄ to varÄs padarÄ«t vÄl vieglÄku). IzrÄdÄs, ka mums izdevÄs noskuj vÄl 15 WW no distroless attÄla.
JÅ«s varat redzÄt visus lÄ«dz Å”im savÄktos attÄlus
Projekts -
Ja jums trÅ«kst funkciju, vienkÄrÅ”i izveidojiet pieprasÄ«jumu - es ar prieku palÄ«dzÄÅ”u :) VÄl vairÄk, es Å”obrÄ«d strÄdÄju pie citu pakotÅu pÄrvaldnieku integrÄÅ”anas fetchy, lai nebÅ«tu vajadzÄ«bas pÄc vairÄkpakÄpju bÅ«vÄÅ”anas.
Avots: www.habr.com