[tilvísun í bandarísku barnasöguna „Litla vélin sem gat“ — þýð. athugasemd]*

Hvernig á að búa sjálfkrafa til litlar Docker myndir fyrir þarfir þínar
Óvenjuleg árátta
Síðustu tvo mánuði hef ég verið heltekinn af þessari hugmynd: hversu miklu minni getur Docker-mynd verið og samt látið forritið virka?
Ég skil, hugmyndin er undarleg.
Áður en ég fer út í smáatriðin og tæknilegu atriðin vil ég útskýra hvers vegna þetta mál vekur svona mikinn áhuga minn og hvernig það hefur áhrif á þig.
Af hverju stærð skiptir máli
Með því að minnka innihald Docker-myndar fækkum við listanum yfir veikleika. Við gerum myndirnar einnig hreinni, þar sem þær innihalda aðeins það sem þarf til að keyra forrit.
Það er einn lítill kostur í viðbót - myndir hlaðast niður aðeins hraðar, en að mínu mati skiptir það ekki svo miklu máli.
Athugið: Ef þú hefur áhyggjur af stærðinni, þá eru myndirnar af Alpine-klæðningunum sjálfum litlar í sniðum og munu líklega passa þér.
Myndir án distros
býður upp á úrval af einföldum „distroless“ myndum; þær innihalda ekki pakkastjóra, skeljar eða önnur tól sem þú ert vanur að sjá í skipanalínunni. Þar af leiðandi er hægt að nota pakkastjóra eins og pip и apt það mun ekki virka:
FROM gcr.io/distroless/python3
RUN pip3 install numpyDockerfile með Python 3 distroless mynd
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 foundPip er ekki á myndinni
Venjulega er þetta vandamál leyst með samsetningu í mörgum stigum:
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/Fjölþrepa samsetning
Myndin sem myndast er 130MB að stærð. Ekki slæmt! Til samanburðar vegur sjálfgefna Python myndin 929MB og sú „mjókkaða“ (3,7-slim) - 179MB, mynd af fjallafjalli (3,7-alpine) — 98,6 MB, en grunn dreifingarlausa myndin sem notuð var í dæminu er 50,9 MB.
Það má réttilega benda á að í fyrra dæminu erum við að afrita heila möppu. /usr/local/lib/python3.7/site-packages, sem gæti innihaldið ósjálfstæði sem við þurfum ekki á að halda. Hins vegar er ljóst að stærðarmunurinn á öllum núverandi Python grunnmyndum sveiflast.
Þegar þetta er skrifað styður Google distroless ekki margar ímyndir: Java og Python eru enn tilraunakennd og Python er aðeins til fyrir 2,7 og 3,5.
Smáar myndir
Við skulum snúa okkur aftur að áhuga mínum á að skapa litlar myndir.
Ég vildi reyndar sjá hvernig myndir án distrolausra vinnslu eru uppbyggðar. Verkefnið með distrolausum vinnslum notar smíðatól Google. bazelHins vegar tók það smá fyrirhöfn að setja upp Bazel og búa til mínar eigin myndir (og satt að segja er það skemmtilegt og fræðandi að finna upp hjólið á ný). Ég vildi einfalda gerð minni mynda: það að búa til mynd ætti að vera afar einfalt, banalSvo engar stillingarskrár fyrir þig, bara ein lína í stjórnborðinu: просто собрать образ для <приложение>.
Svo ef þú vilt búa til þínar eigin myndir, þá skaltu vita að það er til svo einstök Docker mynd, scratchScratch er „tóm“ mynd; hún inniheldur engar skrár, jafnvel þótt hún vegi — vá! — 77 bæti sjálfgefið.
FROM scratchSkrapmynd
Hugmyndin á bak við grunnmyndina er að þú getir afritað hvaða ósjálfstæði sem er frá vélinni sem er í hana og annað hvort notað þau innan Dockerfile (það er eins og að afrita þau í apt og setja upp frá grunni), eða síðar, þegar Docker-myndin hefur verið mynduð. Þetta gerir kleift að hafa fulla stjórn á innihaldi Docker-ílátsins og þar með fulla stjórn á stærð myndarinnar.
Nú þurfum við einhvern veginn að safna þessum ósjálfstæðum einingum. Fyrirliggjandi verkfæri eins og apt leyfa þér að hlaða niður pakka, en þeir eru tengdir núverandi vél og styðja í raun ekki Windows eða MacOS.
Svo ég ákvað að smíða mitt eigið tól sem myndi sjálfkrafa smíða grunnmynd af minnstu mögulegu stærð og láta það keyra hvaða forrit sem er. Ég notaði pakka. Ubuntu/Debian, framkvæmdi val (sótti pakka beint úr geymslum) og fann endurkvæmt tengsl þeirra. Forritið átti að sækja sjálfkrafa nýjustu stöðugu útgáfuna af pakkanum, sem lágmarkaði öryggisáhættu.
Ég nefndi hljóðfærið fetchy, því hann… finnur og færir… það sem þarf [úr ensku „fá“, „að koma með“ — þýð. athugasemdTólið virkar í gegnum skipanalínuviðmót en býður einnig upp á forritaskil (API).
Til að setja saman mynd með því að nota fetchy (tökum Python mynd í þetta skiptið), þú þarft bara að nota CLI svona: fetchy dockerize pythonÞú gætir verið beðinn um stýrikerfið og kóðanafnið sem þú vilt nota vegna þess að fetchy notar nú aðeins pakka sem byggja á Debian и Ubuntu.
Nú er hægt að velja hvaða ósjálfstæði eru algjörlega óþarf (í okkar samhengi) og útiloka þau. Til dæmis er Python háð Perl, þó það virki fullkomlega án þess að Perl sé uppsett.
Niðurstöður
Python mynd búin til með skipuninni fetchy dockerize python3.5 Það vegur aðeins 35MB (ég er nokkuð viss um að það er hægt að gera það enn léttara í framtíðinni). Þannig að okkur tókst að minnka 15MB til viðbótar af dreifingarlausu myndinni.
Þú getur skoðað allar myndirnar sem safnað hefur verið hingað til. .
Verkefni - .
Ef þig vantar eiginleika, sendu bara beiðni — ég hjálpa þér með ánægju :) Þar að auki er ég að vinna í að samþætta aðra pakkastjóra í fetchy, þannig að fjölþrepa smíði verði ekki nauðsynleg.
Heimild: www.habr.com
