[referenza għall-fairy tale tat-tfal Amerikani "The Little Engine That Could" - approx. korsija]*
Kif toħloq awtomatikament immaġini żgħar Docker għall-bżonnijiet tiegħek
Ossessjoni mhux tas-soltu
Għal dawn l-aħħar xhur, kont ossessjonat b'kemm tista' tkun żgħira immaġini ta' Docker u għad għandi l-applikazzjoni taħdem?
Nifhem, l-idea hija stramba.
Qabel ma nidħol fid-dettalji u teknikalitajiet, nixtieq nispjega għaliex din il-problema tant iddejjaqni, u kif tikkonċernak.
Għaliex daqs importanti
Billi tnaqqas il-kontenut tal-immaġni Docker, aħna b'hekk innaqqsu l-lista ta 'vulnerabbiltajiet. Barra minn hekk, nagħmlu l-immaġini aktar nodfa, minħabba li fihom biss dak li huwa meħtieġ biex imexxu l-applikazzjonijiet.
Hemm vantaġġ żgħir ieħor - l-immaġini jitniżżlu ftit aktar malajr, iżda, fl-opinjoni tiegħi, dan mhux daqshekk importanti.
Jekk jogħġbok innota: Jekk inti imħasseb dwar id-daqs, id-dehra Alpina nfushom huma żgħar u x'aktarx se tajbin għalik.
Immaġini distroless
pip
и apt
mhux se jaħdem:
FROM gcr.io/distroless/python3
RUN pip3 install numpy
Dockerfile li juża immaġni mingħajr distro 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
Pip mhux fl-immaġini
Normalment din il-problema tissolva b'bini f'diversi stadji:
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/
Assemblaġġ f'diversi stadji
Ir-riżultat huwa immaġni ta 'daqs ta' 130MB. Mhux ħażin wisq! Għal paragun: l-immaġni Python default tiżen 929MB, u dik "irqaq" (3,7-slim
) - 179MB, immaġni alpina (3,7-alpine
) hija 98,6MB, filwaqt li l-immaġni bażi tad-distroless użata fl-eżempju hija 50,9MB.
Tajjeb li wieħed jinnota li fl-eżempju preċedenti qed nikkupjaw direttorju sħiħ /usr/local/lib/python3.7/site-packages
, li jista’ jkun fih dipendenzi li m’għandniex bżonn. Għalkemm huwa ċar li d-differenza fid-daqs tal-immaġini kollha tal-bażi Python eżistenti tvarja.
Fiż-żmien tal-kitba, Google distroless ma jappoġġjax ħafna stampi: Java u Python għadhom fl-istadju sperimentali, u Python jeżisti biss għal 2,7 u 3,5.
Stampi ċkejkna
Lura għall-ossessjoni tiegħi li noħloq immaġini żgħar.
B'mod ġenerali, ridt nara kif jinbnew immaġini mingħajr distro. Il-proġett distroless juża l-għodda tal-bini ta 'Google bazel
. Madankollu, l-installazzjoni ta' Bazel u l-kitba ta' l-immaġini tiegħek ħadu ħafna xogħol (u biex inkun onest, li tivvinta mill-ġdid ir-rota hija divertenti u edukattiva). Ridt nissimplifika l-ħolqien ta 'immaġini iżgħar: l-att tal-ħolqien ta' immaġni għandu jkun estremament sempliċi, banali. Sabiex ma jkunx hemm fajls ta 'konfigurazzjoni għalik, linja waħda biss fil-console: просто собрать образ для <приложение>
.
Allura, jekk trid toħloq l-immaġini tiegħek stess, imbagħad taf: hemm immaġni ta 'docker unika bħal din, scratch
. Scratch hija immaġni "vojta", m'hemm l-ebda fajl fiha, għalkemm tiżen awtomatikament - naqra! - 77 bytes.
FROM scratch
Scratch immaġini
L-idea ta' immaġni scratch hija li tista' tikkopja kwalunkwe dipendenzi mill-magna ospitanti fiha u jew tużahom ġewwa Dockerfile (dan huwa simili li tikkopjahom għal apt
u tinstalla mill-bidu), jew aktar tard meta l-immaġni Docker tiġi mmaterjalizzata. Dan jippermettilek tikkontrolla kompletament il-kontenut tal-kontenitur Docker, u b'hekk tikkontrolla kompletament id-daqs tal-immaġni.
Issa rridu niġbru b'xi mod dawn id-dipendenzi. Għodod eżistenti bħal apt
jippermettulek tniżżel pakketti, iżda huma marbuta mal-magna attwali u, wara kollox, ma jappoġġjawx Windows jew MacOS.
Allura bdejt nibni l-għodda tiegħi stess li awtomatikament tibni immaġni bażi tal-iżgħar daqs possibbli u wkoll tmexxi kwalunkwe applikazzjoni. Jien użajt pakketti Ubuntu/Debian, għamilt għażla (kiseb pakketti direttament mir-repożitorji) u b'mod rikorsiv sibt id-dipendenzi tagħhom. Il-programm kellu jniżżel awtomatikament l-aħħar verżjoni stabbli tal-pakkett, u jnaqqas kemm jista’ jkun ir-riskji tas-sigurtà.
Semmejt l-għodda fetchy
, għax hu... isib u jġib... dak li hemm bżonn [mill-Ingliż "ġib", "ġib" - madwar. korsija]. L-għodda taħdem permezz ta 'interface tal-linja tal-kmand, iżda fl-istess ħin toffri API.
Biex tiġbor immaġini bl-użu fetchy
(ejja nieħdu immaġni Python din id-darba), għandek bżonn biss tuża l-CLI bħal dan: fetchy dockerize python
. Inti tista 'tintalab is-sistema operattiva mira u l-isem tal-kodiċi minħabba fetchy
bħalissa juża biss pakketti bbażati fuq Debian u Ubuntu.
Issa tista 'tagħżel liema dipendenzi m'huma meħtieġa xejn (fil-kuntest tagħna) u teskludihom. Pereżempju, Python jiddependi fuq perl, għalkemm jaħdem tajjeb mingħajr Perl installat.
Sejbiet
Immaġini Python maħluqa bl-użu tal-kmand fetchy dockerize python3.5
jiżen biss 35MB (jien aktar minn ċert li fil-futur jista 'jsir saħansitra eħfef). Jirriżulta li rnexxielna nqaxxru 15-il WW ieħor mill-immaġini distroless.
Tista' tara l-immaġini kollha miġbura s'issa
Proġett -
Jekk inti nieqes karatteristiċi, sempliċement oħloq talba - inkun kuntent li ngħin :) Saħansitra aktar, bħalissa qed naħdem fuq l-integrazzjoni ta 'maniġers ta' pakketti oħra f'fetchy, sabiex ma jkunx hemm bżonn ta 'bini f'diversi stadji.
Sors: www.habr.com