Wêneyên Tiny Docker ku bi xwe bawer kirin *

[navnîşa çîroka zarokan a Amerîkî "Motorê Piçûk Ku Dikaribû" - nêzîkê. kûçe]*

Wêneyên Tiny Docker ku bi xwe bawer kirin *

Meriv çawa ji bo hewcedariyên xwe bixweber wêneyên piçûk ên Docker-ê biafirîne

Obsession Unusual

Di van du mehên borî de, ez li ser wê yekê mijûl bûm ku wêneyek Docker çiqas piçûk dikare bibe û hîn jî serîlêdanê dimeşîne?

Ez fêm dikim, fikir xerîb e.

Berî ku ez têkevim hûrgulî û teknîkî, ez dixwazim rave bikim ka çima vê pirsgirêkê ez pir aciz kirim, û ew çawa we eleqedar dike.

Çima mezinahî girîng e

Bi kêmkirina naveroka wêneya Docker, em bi vî rengî navnîşa qelsbûnê kêm dikin. Wekî din, em wêneyan paqijtir dikin, ji ber ku ew tenê tiştên ku ji bo xebitandina serlêdanan hewce ne dihewîne.

Feydeyek piçûktir jî heye - wêne hinekî zûtir têne dakêşandin, lê, bi dîtina min, ev ne ew çend girîng e.

Ji kerema xwe not: Heke hûn ji mezinbûnê ditirsin, Alpine bi xwe piçûk in û îhtîmal e ku hûn li gorî we bin.

Wêneyên bênavber

Projeya Distroless Hilbijarkek wêneyên bingehîn ên "bênavber" pêşkêşî dike, ew rêveberên pakêtê, şêl û karûbarên din ên ku hûn ji bo dîtina li ser xeta fermanê bikar tînin tune ne. Wekî encamek, rêveberên pakêtê yên mîna bikar bînin pip и apt dê nexebite:

FROM gcr.io/distroless/python3
RUN  pip3 install numpy

Dockerfile wêneya bênavber Python 3 bikar tîne

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 ne di wêneyê de ye

Bi gelemperî ev pirsgirêk bi avakirina pir-qonaxa çareser dibe:

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/

Civîna pir-qonaxa

Encam wêneyek mezinahiya 130 MB e. Pir ne xirab e! Ji bo berhevdanê: wêneya Python-ê ya xwerû 929 MB giran e, û ya "tenik" (3,7-slim) - 179 MB, wêneya alpine (3,7-alpine) 98,6 MB e, dema ku wêneya bênavber a bingehîn ku di nimûneyê de hatî bikar anîn 50,9 MB ye.

Hêjayî gotinê ye ku di mînaka berê de em pelrêçek tevahî kopî dikin /usr/local/lib/python3.7/site-packages, ku dibe ku girêdanên ku em ne hewce ne hebin. Her çend eşkere ye ku cûdahiya mezinahiya hemî wêneyên bingehîn ên Python-ê yên heyî diguhere.

Di dema nivîsandinê de, Google distroless gelek wêneyan piştgirî nake: Java û Python hîn di qonaxa ceribandinê de ne, û Python tenê ji bo 2,7 û 3,5 heye.

Wêneyên piçûk

Vegere ser dilşewatiya min a çêkirina wêneyên piçûk.

Bi gelemperî, min dixwest bibînim ka wêneyên bêserûber çawa têne çêkirin. Projeya bênavber amûra çêkirinê ya Google bikar tîne bazel. Lêbelê, sazkirina Bazel û nivîsandina wêneyên xwe gelek kar girt (û rast be, ji nû ve vekirina çerxê kêf û perwerdehî ye). Min dixwest ku çêkirina wêneyên piçûktir hêsan bikim: çalakiya afirandina wêneyek pir hêsan be, banal. Ji ber ku ji bo we pelên vesazkirinê tune ne, tenê yek rêzek di konsolê de: просто собрать образ для <приложение>.

Ji ber vê yekê, heke hûn dixwazin wêneyên xwe biafirînin, wê hingê zanibin: wêneyek dokerek wusa bêhempa heye, scratch. Scratch wêneyek "vala" ye, di wê de pel tune, her çend ew bi xwerû giran dibe - wow! - 77 bytes.

FROM scratch

Wêneyê xêz bike

Fikra wêneyek şikestî ev e ku hûn dikarin her girêdayîbûnên ji makîneya mêvandar di nav wê de kopî bikin û an jî wan di hundurê Dockerfile de bikar bînin (ev mîna kopîkirina wan e apt û ji sifrê saz bikin), an paşê gava ku wêneya Docker tête materyal kirin. Ev dihêle hûn bi tevahî naveroka konteynera Docker kontrol bikin, û bi vî rengî mezinahiya wêneyê bi tevahî kontrol bikin.

Niha pêdivî ye ku em bi rengekî van girêdanan berhev bikin. Amûrên heyî yên mîna apt destûrê dide we ku hûn pakêtan dakêşin, lê ew bi makîneya heyî ve girêdayî ne û, her tişt, Windows an MacOS-ê piştgirî nakin.

Ji ber vê yekê min dest pê kir ku amûra xweya xwe ava bikim ku bixweber wêneyek bingehîn a mezinahiya herî piçûk çêbike û her serîlêdanê jî bixebite. Min pakêtên Ubuntu/Debian bikar anîn, hilbijarkek çêkir (rasterast ji depoyan pakêtan distînim) û bi dûbare ve girêdayî girêdanên wan dîtin. Diviya bû ku bername bixweber guhertoya herî paşîn a pakêtê dakêşanda, xetereyên ewlehiyê bi qasî ku pêkan kêm bike.

Min navê amûrê kir fetchy, ji ber ku ew ... dibîne û tîne ... çi hewce ye [ji Îngilîzî "birin", "birin" - nêzîkî. kûçe]. Amûr bi navgîniya rêza fermanê dixebite, lê di heman demê de API-yek pêşkêşî dike.

Ji bo komkirina wêneyek bi kar tînin fetchy (Werin em vê carê wêneyek Python bistînin), hûn tenê hewce ne ku CLI-ê bi vî rengî bikar bînin: fetchy dockerize python. Dibe ku ji we were xwestin ku pergala xebatê ya armanc û navê kod ji ber ku fetchy niha tenê pakêtên li ser bingeha Debian û Ubuntu bikar tîne.

Naha hûn dikarin hilbijêrin ka kîjan girêdan qet ne hewce ne (di çarçoveya me de) û wan derxînin. Mînakî, Python bi perl ve girêdayî ye, her çend ew bêyî sazkirina Perl baş dixebite.

Encam

Wêneyê Python bi karanîna fermanê hatî afirandin fetchy dockerize python3.5 giraniya wê tenê 35 MB ye (ez ji pêbawer im ku di pêşerojê de ew dikare hê siviktir jî were çêkirin). Derket holê ku me karî 15 WW-yên din ji wêneya bêserûber paqij bikin.

Hûn dikarin hemî wêneyên ku heya nuha hatine berhev kirin bibînin vir.

Proje - vir.

Ger we taybetmendiyên wenda nebin, tenê daxwazek biafirînin - ez ê kêfxweş bibim ku alîkariyê bikim :) Hîn bêtir, ez niha li ser yekkirina rêveberên pakêtê yên din di fetchy de dixebitim, da ku hewcedariya avakirina pir-qonaxa tune be.

Source: www.habr.com

Add a comment