[cyfeiriad at y stori dylwyth teg Americanaidd i blant "The Little Engine That Could" - tua. lôn]*
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
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
Prosiect -
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