[అమెరికన్ పిల్లల అద్భుత కథ "ది లిటిల్ ఇంజిన్ దట్ కుడ్" సూచన - సుమారు. వీధి]*

మీ అవసరాల కోసం స్వయంచాలకంగా చిన్న డాకర్ చిత్రాలను ఎలా సృష్టించాలి
అసాధారణ అబ్సెషన్
గత రెండు నెలలుగా, డాకర్ చిత్రం ఎంత చిన్నదిగా ఉండాలనే దానిపై నేను నిమగ్నమై ఉన్నాను మరియు ఇప్పటికీ అప్లికేషన్ అమలులో ఉందా?
నేను అర్థం చేసుకున్నాను, ఆలోచన వింతగా ఉంది.
నేను వివరాలు మరియు సాంకేతికతలను పొందే ముందు, ఈ సమస్య నన్ను ఎందుకు బాధపెట్టిందో మరియు అది మీకు ఎలా సంబంధించినదో వివరించాలనుకుంటున్నాను.
ఎందుకు పరిమాణం ముఖ్యం
డాకర్ ఇమేజ్లోని కంటెంట్లను తగ్గించడం ద్వారా, మేము దుర్బలత్వాల జాబితాను తగ్గిస్తాము. అదనంగా, మేము చిత్రాలను శుభ్రపరుస్తాము, ఎందుకంటే అవి అప్లికేషన్లను అమలు చేయడానికి అవసరమైన వాటిని మాత్రమే కలిగి ఉంటాయి.
మరో చిన్న ప్రయోజనం ఉంది - చిత్రాలు కొంచెం వేగంగా డౌన్లోడ్ చేయబడతాయి, కానీ, నా అభిప్రాయం ప్రకారం, ఇది అంత ముఖ్యమైనది కాదు.
దయచేసి గమనించండి: మీరు పరిమాణం గురించి ఆందోళన చెందుతుంటే, ఆల్పైన్ చిన్నదిగా కనిపిస్తుంది మరియు మీకు సరిపోయే అవకాశం ఉంది.
డిస్ట్రోలెస్ చిత్రాలు
ప్రాథమిక “డిస్ట్రోలెస్” చిత్రాల ఎంపికను అందిస్తుంది, వాటిలో ప్యాకేజీ మేనేజర్లు, షెల్లు మరియు కమాండ్ లైన్లో మీరు చూసే ఇతర యుటిలిటీలు ఉండవు. ఫలితంగా, ప్యాకేజీ నిర్వాహకులను ఉపయోగించండి pip и apt పనిచెయ్యదు:
FROM gcr.io/distroless/python3
RUN pip3 install numpy
పైథాన్ 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
పిప్ చిత్రంలో లేదు
సాధారణంగా ఈ సమస్య బహుళ-దశల నిర్మాణం ద్వారా పరిష్కరించబడుతుంది:
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/
బహుళ-దశల అసెంబ్లీ
ఫలితం 130MB పరిమాణంలో ఉన్న చిత్రం. మరీ చెడ్డది కాదు! పోలిక కోసం: డిఫాల్ట్ పైథాన్ చిత్రం బరువు 929MB, మరియు “సన్నగా” ఒకటి (3,7-slim) - 179MB, ఆల్పైన్ చిత్రం (3,7-alpine) 98,6MB, అయితే ఉదాహరణలో ఉపయోగించిన బేస్ డిస్ట్రోలెస్ ఇమేజ్ 50,9MB.
మునుపటి ఉదాహరణలో మేము మొత్తం డైరెక్టరీని కాపీ చేస్తున్నామని ఎత్తి చూపడం సరైంది /usr/local/lib/python3.7/site-packages, ఇది మనకు అవసరం లేని డిపెండెన్సీలను కలిగి ఉండవచ్చు. ఇప్పటికే ఉన్న అన్ని పైథాన్ బేస్ ఇమేజ్ల పరిమాణ వ్యత్యాసం మారుతుందని స్పష్టంగా ఉన్నప్పటికీ.
వ్రాసే సమయంలో, Google distroless అనేక చిత్రాలకు మద్దతు ఇవ్వదు: Java మరియు Python ఇప్పటికీ ప్రయోగాత్మక దశలోనే ఉన్నాయి మరియు Python 2,7 మరియు 3,5 వరకు మాత్రమే ఉనికిలో ఉన్నాయి.
చిన్న చిత్రాలు
చిన్న చిత్రాలను సృష్టించడంపై నా అభిరుచికి తిరిగి వెళ్ళు.
సాధారణంగా, డిస్ట్రోలెస్ చిత్రాలు ఎలా నిర్మించబడతాయో చూడాలని నేను కోరుకున్నాను. డిస్ట్రోలెస్ ప్రాజెక్ట్ Google బిల్డ్ టూల్ను ఉపయోగిస్తుంది bazel. అయినప్పటికీ, బాజెల్ను ఇన్స్టాల్ చేయడం మరియు మీ స్వంత చిత్రాలను వ్రాయడం చాలా పనిని తీసుకుంది (మరియు నిజాయితీగా చెప్పాలంటే, చక్రాన్ని తిరిగి ఆవిష్కరించడం సరదాగా మరియు విద్యాపరంగా ఉంటుంది). నేను చిన్న చిత్రాల సృష్టిని సులభతరం చేయాలనుకుంటున్నాను: చిత్రాన్ని సృష్టించే చర్య చాలా సరళంగా ఉండాలి, సామాన్యమైన. కాబట్టి మీ కోసం కాన్ఫిగరేషన్ ఫైల్లు లేవు, కన్సోల్లో కేవలం ఒక లైన్ మాత్రమే: просто собрать образ для <приложение>.
కాబట్టి, మీరు మీ స్వంత చిత్రాలను సృష్టించాలనుకుంటే, తెలుసుకోండి: అటువంటి ప్రత్యేకమైన డాకర్ చిత్రం ఉంది, scratch. స్క్రాచ్ అనేది “ఖాళీ” చిత్రం, దానిలో ఫైల్లు ఏవీ లేవు, అయినప్పటికీ ఇది డిఫాల్ట్గా బరువు ఉంటుంది - వావ్! - 77 బైట్లు.
FROM scratch
స్క్రాచ్ చిత్రం
స్క్రాచ్ ఇమేజ్ యొక్క ఆలోచన ఏమిటంటే, మీరు హోస్ట్ మెషీన్ నుండి ఏదైనా డిపెండెన్సీలను కాపీ చేయవచ్చు మరియు వాటిని డాకర్ఫైల్లో ఉపయోగించవచ్చు (ఇది వాటిని కాపీ చేయడం లాంటిది apt మరియు మొదటి నుండి ఇన్స్టాల్ చేయండి), లేదా తర్వాత డాకర్ ఇమేజ్ మెటీరియలైజ్ అయినప్పుడు. ఇది డాకర్ కంటైనర్ యొక్క కంటెంట్లను పూర్తిగా నియంత్రించడానికి మిమ్మల్ని అనుమతిస్తుంది, తద్వారా చిత్రం యొక్క పరిమాణాన్ని పూర్తిగా నియంత్రించవచ్చు.
ఇప్పుడు మనం ఈ డిపెండెన్సీలను ఎలాగైనా సేకరించాలి. వంటి ప్రస్తుత సాధనాలు apt ప్యాకేజీలను డౌన్లోడ్ చేసుకోవడానికి మిమ్మల్ని అనుమతిస్తాయి, కానీ అవి ప్రస్తుత మెషీన్కు పరిమితమై ఉంటాయి మరియు అంతిమంగా, మద్దతు ఇవ్వవు. Windows లేదా MacOS.
కాబట్టి నేను సాధ్యమైనంత చిన్న పరిమాణంలో బేస్ ఇమేజ్ను ఆటోమేటిక్గా నిర్మించి, దానిపై ఏ అప్లికేషన్నైనా రన్ చేయగల నా స్వంత టూల్ను తయారు చేయాలని నిర్ణయించుకున్నాను. నేను ప్యాకేజీలను ఉపయోగించాను. Ubuntu/Debian, ఒక ఎంపికను (రిపోజిటరీల నుండి నేరుగా ప్యాకేజీలను పొందడం) నిర్వహించి, వాటి డిపెండెన్సీలను పునరావృత పద్ధతిలో కనుగొంది. భద్రతాపరమైన ప్రమాదాలను తగ్గించడానికి, ప్రోగ్రామ్ ప్యాకేజీ యొక్క తాజా స్థిరమైన వెర్షన్ను స్వయంచాలకంగా డౌన్లోడ్ చేయాల్సి ఉంది.
నేను సాధనానికి పేరు పెట్టాను fetchy, ఎందుకంటే అతను ... కనుగొని తీసుకువస్తాడు ... ఏమి కావాలి [ఇంగ్లీష్ నుండి "పొందండి", "తీసుకెళ్ళండి" - సుమారు. వీధి]. సాధనం కమాండ్ లైన్ ఇంటర్ఫేస్ ద్వారా పనిచేస్తుంది, కానీ అదే సమయంలో APIని అందిస్తుంది.
ఉపయోగించి చిత్రాన్ని సమీకరించడానికి fetchy (ఈసారి పైథాన్ చిత్రాన్ని తీసుకుందాం), మీరు CLIని ఇలా ఉపయోగించాలి: fetchy dockerize python. మీరు టార్గెట్ ఆపరేటింగ్ సిస్టమ్ మరియు కోడ్నేమ్ కోసం అడగబడవచ్చు fetchy ప్రస్తుతం ప్యాకేజీలను ఆధారంగా మాత్రమే ఉపయోగిస్తుంది Debian и Ubuntu.
ఇప్పుడు మీరు ఏ డిపెండెన్సీలు అవసరం లేనివి ఎంచుకోవచ్చు (మా సందర్భంలో) మరియు వాటిని మినహాయించండి. ఉదాహరణకు, పైథాన్ పెర్ల్పై ఆధారపడి ఉంటుంది, అయితే ఇది పెర్ల్ ఇన్స్టాల్ చేయకుండా బాగా పనిచేస్తుంది.
Результаты
కమాండ్ ఉపయోగించి పైథాన్ ఇమేజ్ సృష్టించబడింది fetchy dockerize python3.5 35MB మాత్రమే బరువు ఉంటుంది (భవిష్యత్తులో దీన్ని మరింత తేలికగా చేయవచ్చని నేను ఖచ్చితంగా అనుకుంటున్నాను). డిస్ట్రోలెస్ చిత్రం నుండి మేము మరో 15 WW షేవ్ చేయగలిగాము.
మీరు ఇప్పటివరకు సేకరించిన అన్ని చిత్రాలను చూడవచ్చు .
ప్రాజెక్ట్ - .
మీరు ఫీచర్లను కోల్పోయినట్లయితే, కేవలం ఒక అభ్యర్థనను సృష్టించండి - నేను సహాయం చేయడానికి సంతోషిస్తాను :) ఇంకా ఎక్కువగా, నేను ప్రస్తుతం ఇతర ప్యాకేజీ మేనేజర్లను పొందడంలో సమగ్రపరచడానికి పని చేస్తున్నాను, తద్వారా బహుళ-దశల బిల్డ్ల అవసరం లేదు.
మూలం: www.habr.com
