దశలవారీ డాకర్ బిల్డ్‌లు బహుళ ఫైల్‌లతో డాకర్‌ఫైల్‌ను వ్రాయడానికి మిమ్మల్ని అనుమతిస్తాయి FROM ప్రకటనలు. దీని అర్థం మీరు బహుళ స్థావరాల నుండి ఉత్పన్నమయ్యే చిత్రాలను సృష్టించవచ్చు, ఇది మీ తుది నిర్మాణ పరిమాణాన్ని తగ్గించడంలో సహాయపడుతుంది.

పొడిగింపును ఉపయోగించి బేస్ చిత్రాన్ని ఎంచుకోవడం ద్వారా డాకర్ చిత్రాలు సృష్టించబడతాయి FROM ప్రకటన. మీ డాకర్‌ఫైల్‌కు ఆదేశాలను జోడించడం ద్వారా ఆ చిత్రానికి పొరలను జోడించండి.

దశలవారీగా నిర్మించడంతో, మీరు మీ డాకర్‌ఫైల్‌ను బహుళ విభాగాలుగా విభజించవచ్చు. ప్రతి దశకు దాని స్వంతం ఉంటుంది FROM కాబట్టి మీరు మీ బిల్డ్స్‌లో ఒకటి కంటే ఎక్కువ చిత్రాలను చేర్చవచ్చు. దశలు క్రమంలో నిర్మించబడ్డాయి మరియు వాటి పూర్వీకులను సూచించగలవు, కాబట్టి మీరు ఒక స్థాయి యొక్క అవుట్పుట్ను మరొకదానికి కాపీ చేయవచ్చు.

చర్యలో మల్టీస్టేజ్ నిర్మాణాలు

దశలవారీగా ఎలా నిర్మించాలో చూద్దాం. మేము కంపోజర్‌ను దాని డిపెండెన్సీల కోసం మరియు సాస్ దాని స్టైల్ షీట్‌ల కోసం ఉపయోగించే బేర్‌బోన్స్ PHP ప్రాజెక్ట్‌తో పని చేస్తున్నాము.

మొత్తం నిర్మాణాన్ని చుట్టుముట్టే దశలవారీ డాకర్‌ఫైల్ ఇక్కడ ఉంది:

FROM node:14 AS sass
WORKDIR /example
RUN npm install -g node-sass
COPY example.scss .
RUN node-sass example.scss example.css
 
FROM php:8.0-apache
COPY --from=composer:2 /usr/bin/composer /usr/bin/composer
COPY composer.json .
COPY composer.lock .
RUN composer install --no-dev
COPY --from=sass /example/example.css example.css
COPY index.php .
COPY src/ src

మాకు రెండు ఉన్నాయని మీరు వెంటనే చూస్తారు FROM మా డాకర్‌ఫైల్‌ను రెండు తార్కిక విభాగాలుగా విభజించే సూచనలు. మొదటి దశ సాస్ సంకలనానికి అంకితం చేయబడింది, రెండవది అంతిమ కంటైనర్‌లో అన్నింటినీ కలపడంపై దృష్టి పెడుతుంది.

మేము ఉపయోగిస్తున్నాము node-sass సాస్ యొక్క సాక్షాత్కారం. కాబట్టి మనం ఇన్‌స్టాల్ చేసే నోడ్.జెఎస్ బేస్ ఇమేజ్‌తో ప్రారంభిద్దాం node-sass ప్రపంచవ్యాప్తంగా npm నుండి. కాబట్టి వాడండి node-sass మా స్టైల్షీట్ కంపైల్ చేయడానికి example.scss స్వచ్ఛమైన CSS లో example.css. ఈ దశ యొక్క ఉన్నత-స్థాయి సారాంశం ఏమిటంటే, మేము ఒక బేస్ ఇమేజ్‌ను తీసుకుంటాము, ఒక ఆదేశాన్ని అమలు చేస్తాము మరియు మా నిర్మాణంలో తరువాత ఉపయోగించాలనుకుంటున్న అవుట్‌పుట్‌ను పొందుతాము (example.css).

తదుపరి దశ మా అప్లికేషన్ కోసం బేస్ ఇమేజ్‌ను పరిచయం చేస్తుంది: php8.0-apache. ఆ చివరిది FROM డాకర్‌ఫైల్‌లోని స్టేట్‌మెంట్ చివరికి కంటైనర్లు నడుస్తుందని చిత్రాన్ని నిర్వచిస్తుంది. మా ముందుమాట node చిత్రం చివరికి మా అప్లికేషన్ యొక్క కంటైనర్లకు అసంబద్ధం: ఇది సృష్టి కోసం ఒక ఆచరణాత్మక సాధనంగా మాత్రమే ఉపయోగించబడుతుంది.

తరువాత మన PHP డిపెండెన్సీలను వ్యవస్థాపించడానికి కంపోజర్ ఉపయోగిస్తాము. స్వరకర్త PHP ప్యాకేజీ నిర్వాహకుడు కాని అధికారిక PHP డాకర్ చిత్రాలలో చేర్చబడలేదు. మేము ప్రత్యేకమైన కంపోజర్ చిత్రం నుండి బైనరీని మా కంటైనర్‌లోకి కాపీ చేస్తాము.

మాకు ఫైల్ అవసరం లేదు FROM దీన్ని చేయడానికి ప్రకటన. మేము కంపోజర్ చిత్రంలో ఏ ఆదేశాలను అమలు చేయనందున, మేము దానిని ఉపయోగించవచ్చు --from తో జెండా COPY చిత్రాన్ని సూచించడానికి. సాధారణంగా, COPY స్థానిక నిర్మాణ సందర్భం నుండి ఫైళ్ళను మీ చిత్రంలోకి కాపీ చేయండి; తో --from మరియు చిత్రం పేరు, అది ఆ చిత్రాన్ని ఉపయోగించి క్రొత్త కంటైనర్‌ను సృష్టించి, ఆపై పేర్కొన్న ఫైల్‌ను దాని నుండి కాపీ చేస్తుంది.

తరువాత, మా డాకర్‌ఫైల్ ఉపయోగిస్తుంది COPY --from మళ్ళీ, ఈసారి వేరే రూపంలో. ప్రారంభానికి తిరిగి, మేము మా మొదటి వ్రాసాము FROM వంటి ప్రకటన FROM node:14 AS sass. ది AS నిబంధన కాల్ అనే దశను సృష్టించింది sass.

మేము ఇప్పుడు సూచన ఉపయోగించి ఈ దశ సృష్టించిన తాత్కాలిక కంటైనర్ COPY --from=sass. ఇది మన నిర్మించిన CSS ని మా తుది చిత్రంలోకి కాపీ చేయడానికి అనుమతిస్తుంది. మిగిలిన దశలు రొటీన్ COPY కార్యకలాపాలు, మా స్థానిక వర్కింగ్ డైరెక్టరీ నుండి మా సోర్స్ కోడ్‌ను పొందడానికి ఉపయోగిస్తారు.

మల్టీస్టేజ్ బిల్డ్స్ యొక్క ప్రయోజనాలు

దశల నిర్మాణాలు ఒకే డాకర్‌ఫైల్‌తో సంక్లిష్టమైన నిర్మాణ నిత్యకృత్యాలను సృష్టించడానికి మిమ్మల్ని అనుమతిస్తాయి. వారి పరిచయానికి ముందు, సంక్లిష్ట ప్రాజెక్టులు బహుళ డాకర్‌ఫైల్‌లను ఉపయోగించడం సాధారణం, అవి నిర్మించిన ప్రతి దశకు ఒకటి. వీటిని మాన్యువల్‌గా వ్రాసిన షెల్ స్క్రిప్ట్‌ల ద్వారా ఆర్కెస్ట్రేట్ చేయాల్సి వచ్చింది.

దశలవారీ బిల్డ్‌లతో, మా మొత్తం బిల్డ్ సిస్టమ్ ఒకే ఫైల్‌లో ఉంటుంది. మీ ప్రాజెక్ట్‌ను ముడి కోడ్ బేస్ నుండి తుది అప్లికేషన్ ఇమేజ్‌కి తీసుకెళ్లడానికి మీకు రేపర్ స్క్రిప్ట్ అవసరం లేదు. రెగ్యులర్ docker build -t my-image:latest . ఇక చాలు.

ఈ సరళీకరణ మీ చిత్రాల సామర్థ్యాన్ని మెరుగుపరిచే అవకాశాలను కూడా అందిస్తుంది. డాకర్ చిత్రాలు పెద్దవిగా ఉంటాయి, ప్రత్యేకించి మీరు భాష రన్‌టైమ్‌ను బేస్ గా ఉపయోగిస్తే.

అధికారిని పొందండి golang చిత్రం: ఇది 300 MB కి దగ్గరగా ఉంటుంది. సాంప్రదాయకంగా, మీరు మీ గో మూలాన్ని చిత్రంలోకి కాపీ చేసి మీ బైనరీని కంపైల్ చేయడానికి ఉపయోగించవచ్చు. అందువల్ల మీరు మరొక నిర్మాణాన్ని ప్రారంభించే ముందు మీ బైనరీని మీ హోస్ట్ మెషీన్‌కు కాపీ చేయాలి. ఇది తేలికపాటి బేస్ ఇమేజ్‌తో డాకర్‌ఫైల్‌ను ఉపయోగిస్తుంది alpine (సుమారు 10 MB). మీరు మీ స్వంత బైనరీని జోడించాలి, దీని ఫలితంగా మీరు అసలైనదాన్ని ఉపయోగించిన దానికంటే చాలా చిన్న చిత్రం వస్తుంది golang మీ కంటైనర్లను అమలు చేయడానికి బేస్.

దశలవారీగా నిర్మించడంతో, ఈ రకమైన వ్యవస్థ అమలు చేయడం చాలా సులభం:

FROM golang:latest
WORKDIR /go
COPY app.go .
RUN go build -o my-binary
 
FROM alpine:latest
WORKDIR /app
COPY --from=build /go/my-binary .
CMD ["./my-binary"]

ఎనిమిది పంక్తులలో, ఇంతకుముందు కనీసం మూడు ఫైళ్లు అవసరమయ్యే ఒక విధానాన్ని పొందగలిగాము: a golang డాకర్‌ఫైల్, ఒక ఫైల్ alpine ఇంటర్మీడియట్ దశలను నిర్వహించడానికి డాకర్‌ఫైల్ మరియు షెల్ స్క్రిప్ట్.

ముగింపు

దశల నిర్మాణాలు సంక్లిష్టమైన డాకర్ చిత్రాలను నిర్మించడాన్ని బాగా సులభతరం చేస్తాయి. అవుట్పుట్ కళాఖండాలను ముందుకు పంపగల బహుళ ఇంటర్‌లింక్డ్ బిల్డ్ స్టెప్‌లను కలిగి ఉండటానికి అవి మిమ్మల్ని అనుమతిస్తాయి.

మోడల్ నిర్మాణ సామర్థ్యాన్ని కూడా ప్రోత్సహిస్తుంది. మీరు వేర్వేరు బేస్ చిత్రాలను సూచించగల సౌలభ్యం డెవలపర్‌లకు తుది అవుట్‌పుట్ సాధ్యమైనంత తక్కువగా ఉందని నిర్ధారించడానికి సహాయపడుతుంది. తగ్గిన నిల్వ మరియు బ్యాండ్‌విడ్త్ ఖర్చుల నుండి మీరు ప్రయోజనం పొందుతారు, ఇది CI / CD వ్యవస్థలో డాకర్‌ను ఉపయోగించినప్పుడు ముఖ్యమైనది.

Source link