Delweddau Tiny Docker a gredai ynddynt eu hunain*

[cyfeiriad at y stori dylwyth teg Americanaidd i blant "The Little Engine That Could" - tua. lôn]*

Delweddau Tiny Docker a gredai ynddynt eu hunain*

Sut i greu delweddau Docker bach yn awtomatig ar gyfer eich anghenion

Obsesiwn Anarferol

Am yr ychydig fisoedd diwethaf, rydw i wedi bod yn obsesiwn â pha mor fach y gall delwedd Docker fod ac mae'r rhaglen yn dal i redeg?

Rwy'n deall, mae'r syniad yn rhyfedd.

Cyn i mi fynd i mewn i'r manylion a'r pethau technegol, hoffwn esbonio pam yr oedd y broblem hon wedi fy mhoeni cymaint, a sut mae'n peri pryder i chi.

Pam mae maint yn bwysig

Trwy leihau cynnwys delwedd y Docker, rydym felly'n lleihau'r rhestr o wendidau. Yn ogystal, rydym yn gwneud y delweddau'n lanach, oherwydd eu bod yn cynnwys dim ond yr hyn sydd ei angen i redeg cymwysiadau.

Mae un fantais fach arall - mae delweddau'n cael eu llwytho i lawr ychydig yn gyflymach, ond, yn fy marn i, nid yw hyn mor bwysig.

Sylwch: Os ydych chi'n poeni am faint, mae'r edrychiad Alpaidd eu hunain yn rhedeg yn fach ac yn sicr o ffitio chi.

Delweddau distromatig

Prosiect Distroless yn cynnig detholiad o ddelweddau “distroless” sylfaenol, nid ydynt yn cynnwys rheolwyr pecyn, cregyn a chyfleustodau eraill yr ydych wedi arfer eu gweld ar y llinell orchymyn. O ganlyniad, defnyddiwch reolwyr pecyn fel pip и apt ni fydd yn gweithio:

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

Dockerfile gan ddefnyddio delwedd distroless Python 3

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

Nid yw Pip yn y ddelwedd

Fel arfer caiff y broblem hon ei datrys trwy adeiladu aml-gam:

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/

Gwasanaeth aml-gam

Y canlyniad yw delwedd o 130MB o faint. Ddim yn rhy ddrwg! Er mwyn cymharu: mae'r ddelwedd Python ddiofyn yn pwyso 929MB, a'r un “teneuach” (3,7-slim) - 179MB, delwedd alpaidd (3,7-alpine) yn 98,6MB, tra bod y ddelwedd sylfaenol distroless a ddefnyddir yn yr enghraifft yn 50,9MB.

Mae'n deg nodi ein bod yn copïo cyfeiriadur cyfan yn yr enghraifft flaenorol /usr/local/lib/python3.7/site-packages, a all gynnwys dibyniaethau nad oes eu hangen arnom. Er ei bod yn amlwg bod gwahaniaeth maint yr holl ddelweddau sylfaen Python presennol yn amrywio.

Ar adeg ysgrifennu, nid yw Google distroless yn cefnogi llawer o ddelweddau: mae Java a Python yn dal i fod yn y cam arbrofol, a dim ond ar gyfer 2,7 a 3,5 y mae Python yn bodoli.

Delweddau bach

Yn ôl at fy obsesiwn gyda chreu delweddau bach.

Yn gyffredinol, roeddwn i eisiau gweld sut mae delweddau aflonydd yn cael eu hadeiladu. Mae'r prosiect distroless yn defnyddio teclyn adeiladu Google bazel. Fodd bynnag, cymerodd gosod Bazel ac ysgrifennu eich delweddau eich hun lawer o waith (ac i fod yn onest, mae ailddyfeisio'r olwyn yn hwyl ac yn addysgiadol). Roeddwn i eisiau symleiddio'r broses o greu delweddau llai: dylai'r weithred o greu delwedd fod yn hynod o syml, banal. Fel nad oes unrhyw ffeiliau ffurfweddu i chi, dim ond un llinell yn y consol: просто собрать образ для <приложение>.

Felly, os ydych chi am greu eich delweddau eich hun, yna gwyddoch: mae delwedd docwr mor unigryw, scratch. Mae Scratch yn ddelwedd “wag”, does dim ffeiliau ynddo, er ei fod yn pwyso yn ddiofyn - waw! - 77 beit.

FROM scratch

Crafu delwedd

Y syniad o ddelwedd crafu yw y gallwch chi gopïo unrhyw ddibyniaethau o'r peiriant gwesteiwr i mewn iddo a naill ai eu defnyddio y tu mewn i Dockerfile (mae hyn fel eu copïo i apt a gosod o'r dechrau), neu'n ddiweddarach pan fydd delwedd y Dociwr wedi'i gwireddu. Mae hyn yn caniatáu ichi reoli cynnwys y cynhwysydd Docker yn llwyr, a thrwy hynny reoli maint y ddelwedd yn llwyr.

Nawr mae angen i ni rywsut gasglu'r dibyniaethau hyn. Offer presennol fel apt caniatáu i chi lawrlwytho pecynnau, ond maent yn gysylltiedig â'r peiriant presennol ac, wedi'r cyfan, nid ydynt yn cefnogi Windows neu MacOS.

Felly es ati i adeiladu fy nherfyn fy hun a fyddai'n adeiladu delwedd sylfaenol yn awtomatig o'r maint lleiaf posibl a hefyd yn rhedeg unrhyw raglen. Defnyddiais becynnau Ubuntu / Debian, gwnes ddetholiad (cael pecynnau'n uniongyrchol o'r ystorfeydd) a dod o hyd i'w dibyniaethau'n rheolaidd. Roedd y rhaglen i fod i lawrlwytho'r fersiwn sefydlog ddiweddaraf o'r pecyn yn awtomatig, gan leihau risgiau diogelwch cymaint â phosibl.

Enwais yr offeryn fetchy, oherwydd ei fod ... yn darganfod ac yn dod â ... yr hyn sydd ei angen [o'r Saesneg “nol”, “dod” – tua. lôn]. Mae'r offeryn yn gweithio trwy ryngwyneb llinell orchymyn, ond ar yr un pryd yn cynnig API.

I gydosod delwedd gan ddefnyddio fetchy (gadewch i ni gymryd delwedd Python y tro hwn), does ond angen i chi ddefnyddio'r CLI fel hyn: fetchy dockerize python. Efallai y gofynnir i chi am y system weithredu darged a'r codename oherwydd fetchy ar hyn o bryd dim ond yn defnyddio pecynnau sy'n seiliedig ar Debian a Ubuntu.

Nawr gallwch chi ddewis pa ddibyniaethau nad oes eu hangen o gwbl (yn ein cyd-destun ni) a'u heithrio. Er enghraifft, mae Python yn dibynnu ar perl, er ei fod yn gweithio'n iawn heb Perl wedi'i osod.

Canfyddiadau

Delwedd Python wedi'i chreu gan ddefnyddio'r gorchymyn fetchy dockerize python3.5 yn pwyso dim ond 35MB (Rwy'n fwy na sicr y gellir ei wneud hyd yn oed yn ysgafnach yn y dyfodol). Mae'n ymddangos ein bod wedi llwyddo i eillio 15 WW arall o'r ddelwedd ddistromatig.

Gallwch weld yr holl ddelweddau a gasglwyd hyd yn hyn yma.

Prosiect - yma.

Os ydych chi'n colli nodweddion, dim ond creu cais - byddaf yn hapus i helpu :) Hyd yn oed yn fwy, ar hyn o bryd rwy'n gweithio ar integreiddio rheolwyr pecyn eraill i fetchy, fel nad oes angen adeiladu aml-gam.

Ffynhonnell: hab.com

Ychwanegu sylw