Immaġini ċkejkna ta' Docker li emmnu fihom infushom*

[referenza għall-fairy tale tat-tfal Amerikani "The Little Engine That Could" - approx. korsija]*

Immaġini ċkejkna ta' Docker li emmnu fihom infushom*

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

Proġett Distroless joffri għażla ta 'immaġini bażiċi "distroless", ma fihomx maniġers tal-pakketti, qxur u utilitajiet oħra li inti mdorri tara fuq il-linja tal-kmand. Bħala riżultat, uża maniġers tal-pakketti bħal 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 hawn.

Proġett - hawn.

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

Żid kumment