మీ అవసరాల కోసం స్వయంచాలకంగా చిన్న డాకర్ చిత్రాలను ఎలా సృష్టించాలి
అసాధారణ అబ్సెషన్
గత రెండు నెలలుగా, డాకర్ చిత్రం ఎంత చిన్నదిగా ఉండాలనే దానిపై నేను నిమగ్నమై ఉన్నాను మరియు ఇప్పటికీ అప్లికేషన్ అమలులో ఉందా?
నేను అర్థం చేసుకున్నాను, ఆలోచన వింతగా ఉంది.
నేను వివరాలు మరియు సాంకేతికతలను పొందే ముందు, ఈ సమస్య నన్ను ఎందుకు బాధపెట్టిందో మరియు అది మీకు ఎలా సంబంధించినదో వివరించాలనుకుంటున్నాను.
ఎందుకు పరిమాణం ముఖ్యం
డాకర్ ఇమేజ్లోని కంటెంట్లను తగ్గించడం ద్వారా, మేము దుర్బలత్వాల జాబితాను తగ్గిస్తాము. అదనంగా, మేము చిత్రాలను శుభ్రపరుస్తాము, ఎందుకంటే అవి అప్లికేషన్లను అమలు చేయడానికి అవసరమైన వాటిని మాత్రమే కలిగి ఉంటాయి.
మరో చిన్న ప్రయోజనం ఉంది - చిత్రాలు కొంచెం వేగంగా డౌన్లోడ్ చేయబడతాయి, కానీ, నా అభిప్రాయం ప్రకారం, ఇది అంత ముఖ్యమైనది కాదు.
దయచేసి గమనించండి: మీరు పరిమాణం గురించి ఆందోళన చెందుతుంటే, ఆల్పైన్ చిన్నదిగా కనిపిస్తుంది మరియు మీకు సరిపోయే అవకాశం ఉంది.
డిస్ట్రోలెస్ చిత్రాలు
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కు మద్దతు ఇవ్వవు.
కాబట్టి నేను నా స్వంత సాధనాన్ని రూపొందించడానికి బయలుదేరాను, అది స్వయంచాలకంగా సాధ్యమయ్యే చిన్న సైజు యొక్క బేస్ ఇమేజ్ను రూపొందించి, ఏదైనా అప్లికేషన్ను కూడా అమలు చేస్తుంది. నేను ఉబుంటు/డెబియన్ ప్యాకేజీలను ఉపయోగించాను, ఎంపిక చేసాను (రిపోజిటరీల నుండి నేరుగా ప్యాకేజీలను పొందడం) మరియు వాటి డిపెండెన్సీలను పునరావృతంగా కనుగొన్నాను. ప్రోగ్రామ్ స్వయంచాలకంగా ప్యాకేజీ యొక్క తాజా స్థిరమైన సంస్కరణను డౌన్లోడ్ చేయవలసి ఉంది, భద్రతా ప్రమాదాలను వీలైనంత వరకు తగ్గిస్తుంది.
నేను సాధనానికి పేరు పెట్టాను fetchy
, ఎందుకంటే అతను ... కనుగొని తీసుకువస్తాడు ... ఏమి కావాలి [ఇంగ్లీష్ నుండి "పొందండి", "తీసుకెళ్ళండి" - సుమారు. వీధి]. సాధనం కమాండ్ లైన్ ఇంటర్ఫేస్ ద్వారా పనిచేస్తుంది, కానీ అదే సమయంలో APIని అందిస్తుంది.
ఉపయోగించి చిత్రాన్ని సమీకరించడానికి fetchy
(ఈసారి పైథాన్ చిత్రాన్ని తీసుకుందాం), మీరు CLIని ఇలా ఉపయోగించాలి: fetchy dockerize python
. మీరు టార్గెట్ ఆపరేటింగ్ సిస్టమ్ మరియు కోడ్నేమ్ కోసం అడగబడవచ్చు fetchy
ప్రస్తుతం డెబియన్ మరియు ఉబుంటు ఆధారంగా ప్యాకేజీలను మాత్రమే ఉపయోగిస్తోంది.
ఇప్పుడు మీరు ఏ డిపెండెన్సీలు అవసరం లేనివి ఎంచుకోవచ్చు (మా సందర్భంలో) మరియు వాటిని మినహాయించండి. ఉదాహరణకు, పైథాన్ పెర్ల్పై ఆధారపడి ఉంటుంది, అయితే ఇది పెర్ల్ ఇన్స్టాల్ చేయకుండా బాగా పనిచేస్తుంది.
Результаты
కమాండ్ ఉపయోగించి పైథాన్ ఇమేజ్ సృష్టించబడింది fetchy dockerize python3.5
35MB మాత్రమే బరువు ఉంటుంది (భవిష్యత్తులో దీన్ని మరింత తేలికగా చేయవచ్చని నేను ఖచ్చితంగా అనుకుంటున్నాను). డిస్ట్రోలెస్ చిత్రం నుండి మేము మరో 15 WW షేవ్ చేయగలిగాము.
మీరు ఇప్పటివరకు సేకరించిన అన్ని చిత్రాలను చూడవచ్చు
ప్రాజెక్ట్ -
మీరు ఫీచర్లను కోల్పోయినట్లయితే, కేవలం ఒక అభ్యర్థనను సృష్టించండి - నేను సహాయం చేయడానికి సంతోషిస్తాను :) ఇంకా ఎక్కువగా, నేను ప్రస్తుతం ఇతర ప్యాకేజీ మేనేజర్లను పొందడంలో సమగ్రపరచడానికి పని చేస్తున్నాను, తద్వారా బహుళ-దశల బిల్డ్ల అవసరం లేదు.
మూలం: www.habr.com