Awọn aworan Docker kekere ti o gbagbọ ninu ara wọn *

[itọkasi si itan iwin ti awọn ọmọde Amẹrika “Ẹnjini Kekere ti o le” - isunmọ. ona]*

Awọn aworan Docker kekere ti o gbagbọ ninu ara wọn *

Bii o ṣe le ṣẹda awọn aworan Docker kekere laifọwọyi fun awọn iwulo rẹ

Aimọkan Dani

Fun awọn oṣu meji sẹhin, Mo ti ni ifẹ afẹju pẹlu bawo ni aworan Docker ṣe le jẹ kekere ati pe o tun ni ohun elo nṣiṣẹ?

Mo ye, ero naa jẹ ajeji.

Ṣaaju ki Mo to wọle sinu awọn alaye ati awọn imọ-ẹrọ, Emi yoo fẹ lati ṣalaye idi ti iṣoro yii ṣe yọ mi lẹnu, ati bii o ṣe kan ọ.

Kini idi ti iwọn ṣe pataki

Nipa idinku awọn akoonu ti aworan Docker, nitorinaa a dinku atokọ ti awọn ailagbara. Ni afikun, a jẹ ki awọn aworan di mimọ, nitori wọn ni nikan ohun ti o nilo lati ṣiṣe awọn ohun elo.

Anfani kekere kan wa - awọn aworan ti wa ni igbasilẹ ni iyara diẹ, ṣugbọn, ni ero mi, eyi kii ṣe pataki.

Jọwọ ṣakiyesi: Ti o ba ni aniyan nipa iwọn, Alpine wo ara wọn jẹ kekere ati pe yoo ṣe deede fun ọ.

Awọn aworan ailabawọn

Project Distroless nfunni ni yiyan ti awọn aworan “distroless” ipilẹ, wọn ko ni awọn alakoso package, awọn ikarahun ati awọn ohun elo miiran ti o lo lati rii lori laini aṣẹ. Bi abajade, lo awọn alakoso package bi pip и apt kii yoo ṣiṣẹ:

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

Dockerfile lilo Python 3 aworan distroless

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 ko si ninu aworan

Nigbagbogbo iṣoro yii jẹ ipinnu nipasẹ kikọ ipele pupọ:

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/

Olona-ipele ijọ

Abajade jẹ aworan ti 130MB ni iwọn. Ko buru ju! Fun lafiwe: aworan Python aiyipada ṣe iwọn 929MB, ati “tinrin” ọkan (3,7-slim) - 179MB, aworan alpine (3,7-alpine) jẹ 98,6MB, nigba ti ipilẹ distroless aworan ti a lo ninu apẹẹrẹ jẹ 50,9MB.

O tọ lati tọka si pe ninu apẹẹrẹ ti tẹlẹ a n ṣe didakọ gbogbo itọsọna kan /usr/local/lib/python3.7/site-packages, eyi ti o le ni awọn igbẹkẹle ti a ko nilo. Botilẹjẹpe o han gbangba pe iyatọ iwọn ti gbogbo awọn aworan ipilẹ Python ti o wa yatọ.

Ni akoko kikọ, Google distroless ko ṣe atilẹyin ọpọlọpọ awọn aworan: Java ati Python tun wa ni ipele idanwo, ati Python nikan wa fun 2,7 ati 3,5.

Awọn aworan kekere

Pada si aimọkan mi pẹlu ṣiṣẹda awọn aworan kekere.

Ni gbogbogbo, Mo fẹ lati rii bi a ṣe ṣe awọn aworan aibikita. Iṣẹ akanṣe aibikita naa nlo ohun elo kikọ Google bazel. Sibẹsibẹ, fifi sori Bazel ati kikọ awọn aworan ti ara rẹ gba iṣẹ pupọ (ati lati jẹ ooto, atunṣe kẹkẹ naa jẹ igbadun ati ẹkọ). Mo fẹ lati ṣe irọrun ẹda ti awọn aworan kekere: iṣe ti ṣiṣẹda aworan yẹ ki o rọrun pupọ, banal. Nitorinaa ko si awọn faili atunto fun ọ, laini kan kan ninu console: просто собрать образ для <приложение>.

Nitorinaa, ti o ba fẹ ṣẹda awọn aworan tirẹ, lẹhinna mọ: iru aworan docker alailẹgbẹ kan wa, scratch. Scratch jẹ aworan “ṣofo”, ko si awọn faili ninu rẹ, botilẹjẹpe o ṣe iwọn nipasẹ aiyipada - wow! - 77 baiti.

FROM scratch

Aworan abirun

Imọran ti aworan ibere ni pe o le daakọ eyikeyi awọn igbẹkẹle lati ẹrọ agbalejo sinu rẹ ati boya lo wọn inu Dockerfile kan (eyi dabi didakọ wọn si apt ati fi sii lati ibere), tabi nigbamii nigbati aworan Docker jẹ ohun elo. Eyi n gba ọ laaye lati ṣakoso awọn akoonu ti apo eiyan Docker patapata, ati nitorinaa ṣakoso iwọn aworan naa patapata.

Bayi a nilo lati bakan gba wọnyi dependencies. Awọn irinṣẹ to wa tẹlẹ bii apt gba ọ laaye lati ṣe igbasilẹ awọn idii, ṣugbọn wọn ti so mọ ẹrọ lọwọlọwọ ati, lẹhinna, ko ṣe atilẹyin Windows tabi MacOS.

Nitorinaa Mo ṣeto lati kọ ọpa ti ara mi ti yoo kọ aworan ipilẹ kan ti iwọn ti o kere julọ ti o ṣeeṣe ati tun ṣiṣẹ ohun elo eyikeyi. Mo lo awọn idii Ubuntu/Debian, ṣe yiyan (ngba awọn idii taara lati awọn ibi ipamọ) ati ni igbagbogbo rii awọn igbẹkẹle wọn. Eto naa yẹ ki o ṣe igbasilẹ ẹya iduroṣinṣin tuntun ti package laifọwọyi, ni idinku awọn eewu aabo bi o ti ṣee ṣe.

Mo lorukọ ọpa naa fetchy, nitori pe o... wa ati mu... ohun ti o nilo [lati English “gbe”, “mu” – isunmọ. ona]. Ọpa naa n ṣiṣẹ nipasẹ wiwo laini aṣẹ, ṣugbọn ni akoko kanna nfunni API kan.

Lati ṣe akojọpọ aworan ni lilo fetchy (jẹ ki a ya aworan Python ni akoko yii), o kan nilo lati lo CLI bii eyi: fetchy dockerize python. O le beere fun ẹrọ ṣiṣe afojusun ati codename nitori fetchy Lọwọlọwọ nlo awọn idii nikan ti o da lori Debian ati Ubuntu.

Bayi o le yan iru awọn igbẹkẹle ko nilo rara (ninu ọrọ wa) ki o yọ wọn kuro. Fun apẹẹrẹ, Python da lori perl, botilẹjẹpe o ṣiṣẹ daradara laisi fifi sori ẹrọ Perl.

Результаты

Aworan Python ti a ṣẹda nipa lilo aṣẹ naa fetchy dockerize python3.5 ṣe iwọn 35MB nikan (Mo ni idaniloju pe ni ọjọ iwaju o le ṣe paapaa fẹẹrẹfẹ). O wa ni jade wipe a ti iṣakoso lati fá 15 WW miiran lati awọn distroless image.

O le wo gbogbo awọn aworan ti a gba titi di isisiyi nibi.

Ise agbese - nibi.

Ti o ba ti sonu awọn ẹya ara ẹrọ, o kan ṣẹda kan ìbéèrè - Emi yoo dun lati ran :) Ani diẹ sii, Mo n Lọwọlọwọ ṣiṣẹ lori a ṣepọ miiran package alakoso sinu fetchy, ki nibẹ ni ko si nilo fun olona-ipele kọ.

orisun: www.habr.com

Fi ọrọìwòye kun