మీకు డాకర్ కావాలా మరియు VM కాదా అని మీకు ఎలా తెలుస్తుంది? మీరు ఖచ్చితంగా ఏమి వేరుచేయాలనుకుంటున్నారో మీరు నిర్ణయించుకోవాలి. మీరు హామీ ఇవ్వబడిన అంకితమైన వనరులు మరియు వర్చువల్ హార్డ్వేర్తో సిస్టమ్ను వేరుచేయాలనుకుంటే, అప్పుడు ఎంపిక VMగా ఉండాలి. మీరు రన్నింగ్ అప్లికేషన్లను ప్రత్యేక సిస్టమ్ ప్రాసెస్లుగా ఐసోలేట్ చేయాలనుకుంటే, మీకు డాకర్ అవసరం.
కాబట్టి డాకర్ కంటైనర్లు మరియు VM ల మధ్య తేడా ఏమిటి?
వర్చువల్ మిషన్ (VM) అనేది అన్ని వర్చువల్ పరికరాలతో కూడిన వర్చువల్ కంప్యూటర్ మరియు వర్చువల్ హార్డ్ డిస్క్, దీనిలో వర్చువల్ పరికర డ్రైవర్లు, మెమరీ నిర్వహణ మరియు ఇతర భాగాలతో పాటు కొత్త స్వతంత్ర OS ఇన్స్టాల్ చేయబడుతుంది. అంటే, మనం ఒక కంప్యూటర్లో అనేక వర్చువల్ కంప్యూటర్లను అమలు చేయడానికి అనుమతించే భౌతిక హార్డ్వేర్ యొక్క సంగ్రహణను పొందుతాము.
ఇన్స్టాల్ చేయబడిన VM వివిధ మార్గాల్లో మీ కంప్యూటర్ డిస్క్లో స్థలాన్ని ఆక్రమించగలదు:
- స్థిర హార్డ్ డిస్క్ స్థలం, ఇది వర్చువల్ హార్డ్ డిస్క్కు వేగవంతమైన ప్రాప్యతను అనుమతిస్తుంది మరియు ఫైల్ ఫ్రాగ్మెంటేషన్ను నివారిస్తుంది;
- డైనమిక్ మెమరీ కేటాయింపు. అదనపు అప్లికేషన్లను ఇన్స్టాల్ చేస్తున్నప్పుడు, దానికి కేటాయించిన గరిష్ట మొత్తాన్ని చేరుకునే వరకు మెమరీ వాటి కోసం డైనమిక్గా కేటాయించబడుతుంది.
ప్రతి సర్వర్కు ఎక్కువ వర్చువల్ మిషన్లు, అవి ఎక్కువ స్థలాన్ని తీసుకుంటాయి మరియు మీ అప్లికేషన్ అమలు చేయడానికి అవసరమైన పర్యావరణానికి స్థిరమైన మద్దతు అవసరం.
డాకర్ కంటైనర్-ఆధారిత అప్లికేషన్లను రూపొందించడానికి సాఫ్ట్వేర్. కంటైనర్లు మరియు వర్చువల్ మిషన్లు ఒకే విధమైన ప్రయోజనాలను కలిగి ఉంటాయి, కానీ విభిన్నంగా పనిచేస్తాయి. కంటైనర్లు తక్కువ స్థలాన్ని తీసుకుంటాయి ఎందుకంటే... VM కంటే హోస్ట్ సిస్టమ్ యొక్క ఎక్కువ భాగస్వామ్య వనరులను తిరిగి ఉపయోగించుకోండి, ఎందుకంటే VM వలె కాకుండా, ఇది హార్డ్వేర్ స్థాయిలో కాకుండా OS స్థాయిలో వర్చువలైజేషన్ను అందిస్తుంది. ఈ విధానం తక్కువ మెమరీ ఫుట్ప్రింట్, వేగవంతమైన విస్తరణ మరియు సులభంగా స్కేలింగ్కు దారితీస్తుంది.
హోస్ట్ సిస్టమ్కు అవసరమైన ఇంటర్ఫేస్లను అందించడం ద్వారా అప్లికేషన్లను ఎన్క్యాప్సులేట్ చేయడానికి కంటైనర్ మరింత సమర్థవంతమైన యంత్రాంగాన్ని అందిస్తుంది. ఈ ఫీచర్ కంటైనర్లను సిస్టమ్ యొక్క ప్రధాన భాగాన్ని పంచుకోవడానికి అనుమతిస్తుంది, ప్రతి కంటైనర్ దాని స్వంత మెమరీ ప్రాంతాలను (దాని స్వంత వర్చువల్ అడ్రస్ స్పేస్) కలిగి ఉన్న ప్రత్యేక హోస్ట్ OS ప్రక్రియగా నడుస్తుంది. ప్రతి కంటైనర్ యొక్క వర్చువల్ అడ్రస్ స్పేస్ దాని స్వంతం కాబట్టి, వివిధ మెమరీ ప్రాంతాలకు చెందిన డేటా మార్చబడదు.
డాకర్ కోసం స్థానిక OS Linux (Dockerని Windows మరియు MacOSలో కూడా ఉపయోగించవచ్చు), ఇది దాని ప్రధాన ప్రయోజనాలను ఉపయోగిస్తుంది, ఇది కెర్నల్ విభజనను నిర్వహించడానికి అనుమతిస్తుంది. Windowsలో డాకర్ కంటైనర్లను అమలు చేయడం Linux OS నడుస్తున్న వర్చువల్ మెషీన్లో జరుగుతుంది, ఎందుకంటే కంటైనర్లు హోస్ట్ సిస్టమ్ యొక్క OSని పంచుకుంటాయి మరియు వాటికి ప్రధాన OS Linux.
కంటైనర్ - ఇది ఎలా పని చేస్తుంది?
కంటైనర్ కోడ్ మరియు డిపెండెన్సీలను మిళితం చేసే అప్లికేషన్-స్థాయి సంగ్రహణ. కంటైనర్లు ఎల్లప్పుడూ చిత్రాల నుండి సృష్టించబడతాయి, వ్రాయదగిన పై పొరను జోడించడం మరియు వివిధ పారామితులను ప్రారంభించడం. కంటైనర్కు దాని స్వంత రైట్ లేయర్ ఉన్నందున మరియు అన్ని మార్పులు ఆ లేయర్లో నిల్వ చేయబడినందున, బహుళ కంటైనర్లు ఒకే మాస్టర్ ఇమేజ్కి యాక్సెస్ను షేర్ చేయగలవు.
ప్రతి కంటైనర్ను ప్రధాన పరిష్కారంలో చేర్చబడిన డాకర్-కంపోజ్ ప్రాజెక్ట్లోని ఫైల్ ద్వారా కాన్ఫిగర్ చేయవచ్చు - docker-compose.yml. అక్కడ మీరు కంటైనర్ పేరు, పోర్ట్లు, ఐడెంటిఫైయర్లు, వనరుల పరిమితులు, ఇతర కంటైనర్ల మధ్య డిపెండెన్సీలు వంటి వివిధ పారామితులను సెట్ చేయవచ్చు. మీరు సెట్టింగ్లలో కంటైనర్ పేరును పేర్కొనకపోతే, డాకర్ ప్రతిసారీ కొత్త కంటైనర్ను సృష్టిస్తుంది, దానికి యాదృచ్ఛికంగా పేరు ఇస్తుంది.
చిత్రం నుండి కంటైనర్ను ప్రారంభించినప్పుడు, దిగువన ఉన్న ఏదైనా లేయర్ల పైన డాకర్ రీడ్-రైట్ ఫైల్సిస్టమ్ను మౌంట్ చేస్తుంది. ఇక్కడే మన డాకర్ కంటైనర్ రన్ చేయాలనుకుంటున్న అన్ని ప్రక్రియలు రన్ అవుతాయి.
డాకర్ మొదట కంటైనర్ను ప్రారంభించినప్పుడు, ప్రారంభ రీడ్-రైట్ లేయర్ ఖాళీగా ఉంటుంది. మార్పులు సంభవించినప్పుడు, అవి ఈ పొరకు వర్తించబడతాయి; ఉదాహరణకు, మీరు ఫైల్ను మార్చాలనుకుంటే, ఆ ఫైల్ దిగువన ఉన్న రీడ్-ఓన్లీ లేయర్ నుండి రీడ్-రైట్ లేయర్కి కాపీ చేయబడుతుంది.
ఫైల్ యొక్క రీడ్-ఓన్లీ వెర్షన్ ఇప్పటికీ ఉంది, కానీ అది ఇప్పుడు కాపీ కింద దాచబడింది. కంటైనర్ జీవిత చక్రంతో సంబంధం లేకుండా డేటాను నిల్వ చేయడానికి వాల్యూమ్లు ఉపయోగించబడతాయి. కంటైనర్ సృష్టించబడినప్పుడు వాల్యూమ్లు ప్రారంభించబడతాయి.
చిత్రం కంటైనర్కి ఎలా సంబంధం కలిగి ఉంది?
చిత్రం - ప్రతి కంటైనర్కు ప్రధాన మూలకం. ప్రాజెక్ట్కు జోడించబడిన డాకర్ఫైల్ నుండి చిత్రం సృష్టించబడింది మరియు ఇది ఫైల్ సిస్టమ్ల (లేయర్లు) ఒకదానిపై ఒకటి పొరలుగా మరియు కలిసి సమూహంగా, చదవడానికి మాత్రమే; పొరల గరిష్ట సంఖ్య 127.
ప్రతి చిత్రం యొక్క గుండె వద్ద ఒక ఆధార చిత్రం ఉంటుంది, ఇది FROM కమాండ్ ద్వారా పేర్కొనబడుతుంది - డాకర్ఫైల్ చిత్రాన్ని నిర్మించేటప్పుడు ఎంట్రీ పాయింట్. ప్రతి లేయర్ చదవడానికి మాత్రమే లేయర్ మరియు డాకర్ఫైల్లో వ్రాయబడిన ఫైల్ సిస్టమ్ను సవరించే ఒకే ఆదేశం ద్వారా సూచించబడుతుంది.
ఈ లేయర్లను ఒకే ఇమేజ్గా కలపడానికి, డాకర్ అధునాతన బహుళ లేయర్డ్ యూనియన్ ఫైల్ సిస్టమ్ను ఉపయోగిస్తుంది (AuFS యూనియన్ఎఫ్ఎస్ పైన నిర్మించబడింది), వివిధ ఫైల్ లేయర్ల నుండి వేర్వేరు ఫైల్లు మరియు డైరెక్టరీలను పారదర్శకంగా అతివ్యాప్తి చేయడానికి అనుమతిస్తుంది, ఇది ఒక సమన్వయ ఫైల్ సిస్టమ్ను సృష్టిస్తుంది.
లేయర్లు రన్టైమ్ మరియు బిల్డ్ టైమ్లో ప్రతి లేయర్ గురించి సంబంధిత సమాచారాన్ని నిల్వ చేయడానికి మిమ్మల్ని అనుమతించే మెటాడేటాను కలిగి ఉంటాయి. ప్రతి లేయర్ తదుపరి లేయర్కు లింక్ను కలిగి ఉంటుంది; ఒక లేయర్కు లింక్ లేకపోతే, అది చిత్రంలోని టాప్ లేయర్.
Dockerfile అటువంటి ఆదేశాలను కలిగి ఉండవచ్చు:
- నుండి - చిత్రాన్ని రూపొందించేటప్పుడు ఎంట్రీ పాయింట్;
- మెయింటైనర్ - చిత్ర యజమాని పేరు;
- RUN — ఇమేజ్ అసెంబ్లీ సమయంలో కమాండ్ ఎగ్జిక్యూషన్;
- ADD - హోస్ట్ ఫైల్ను కొత్త చిత్రానికి కాపీ చేయడం; మీరు ఫైల్ యొక్క URLని పేర్కొన్నట్లయితే, డాకర్ దానిని పేర్కొన్న డైరెక్టరీకి డౌన్లోడ్ చేస్తుంది;
- ENV - ఎన్విరాన్మెంట్ వేరియబుల్స్;
- CMD - చిత్రం ఆధారంగా కొత్త కంటైనర్ యొక్క సృష్టిని ప్రారంభిస్తుంది;
- ENTRYPOINT - కంటైనర్ ప్రారంభమైనప్పుడు ఆదేశం అమలు చేయబడుతుంది.
- WORKDIR అనేది CMD కమాండ్ని అమలు చేయడానికి పని చేసే డైరెక్టరీ.
- USER - చిత్రం ఆధారంగా సృష్టించబడిన కంటైనర్ కోసం UIDని సెట్ చేస్తుంది.
- VOLUME - హోస్ట్ డైరెక్టరీని కంటైనర్లోకి మౌంట్ చేస్తుంది.
- EXPOSE అనేది కంటైనర్లో వినబడే పోర్ట్ల సమితి.
UnionFS ఎలా పని చేస్తుంది?
యూనియన్ఎఫ్ఎస్ - Linux మరియు FreeBSD కోసం యుటిలిటీ స్టాక్ ఫైల్ సిస్టమ్ (FS). ఈ FS కాపీ-ఆన్-రైట్ మెకానిజంను అమలు చేస్తుంది (కాపీ-ఆన్-రైట్, COW). యూనియన్ఎఫ్ఎస్ యొక్క వర్కింగ్ యూనిట్ ఒక పొర; ప్రతి లేయర్ను రూట్ నుండి డైరెక్టరీల సోపానక్రమంతో ప్రత్యేక పూర్తి-స్థాయి ఫైల్ సిస్టమ్గా పరిగణించాలి. యూనియన్ఎఫ్ఎస్ ఇతర ఫైల్ సిస్టమ్ల కోసం యూనియన్ మౌంట్ను సృష్టిస్తుంది మరియు వివిధ ఫైల్ సిస్టమ్ల (ఫోర్క్స్ అని పిలుస్తారు) నుండి ఫైల్లు మరియు డైరెక్టరీలను వినియోగదారుకు పారదర్శకంగా ఒకే కోహెరెంట్ ఫైల్ సిస్టమ్గా కలపడానికి అనుమతిస్తుంది.
ఒకే మార్గాలతో డైరెక్టరీల కంటెంట్లు ఫలితంగా ఫైల్ సిస్టమ్లోని ఒక ఏకీకృత డైరెక్టరీలో (ఒకే నేమ్స్పేస్లో) కలిసి కనిపిస్తాయి.
UnionFS కింది సూత్రాల ఆధారంగా పొరలను మిళితం చేస్తుంది:
- పొరలలో ఒకటి ఎగువ-స్థాయి పొరగా మారుతుంది, రెండవ మరియు తదుపరి పొరలు దిగువ-స్థాయి పొరలుగా మారతాయి;
- లేయర్ ఆబ్జెక్ట్లు వినియోగదారుకు "పై నుండి క్రిందికి" అందుబాటులో ఉంటాయి, అనగా. అభ్యర్థించిన వస్తువు "ఎగువ" పొరలో ఉన్నట్లయితే, "దిగువ" పొరలో అదే పేరుతో ఉన్న వస్తువు ఉనికితో సంబంధం లేకుండా అది తిరిగి ఇవ్వబడుతుంది; లేకుంటే "దిగువ" పొర యొక్క వస్తువు తిరిగి ఇవ్వబడుతుంది; అభ్యర్థించిన ఆబ్జెక్ట్ అక్కడ లేదా అక్కడ లేకుంటే, "అటువంటి ఫైల్ లేదా డైరెక్టరీ లేదు" అనే లోపం తిరిగి వస్తుంది;
- వర్కింగ్ లేయర్ అనేది "టాప్" ఒకటి, అనగా, డేటాను మార్చడానికి అన్ని వినియోగదారు చర్యలు దిగువ స్థాయి పొరల కంటెంట్లను ప్రభావితం చేయకుండా, పై-స్థాయి లేయర్లో మాత్రమే ప్రతిబింబిస్తాయి.
అప్లికేషన్లను అమలు చేయడానికి కంటైనర్లను ఉపయోగించే అత్యంత సాధారణ సాంకేతికత డాకర్. Linux కెర్నల్ అందించిన cgroups మరియు నేమ్స్పేస్ల ఆధారంగా ఇది ఫీల్డ్లో ప్రమాణంగా మారింది.
OS కెర్నల్ను అన్ని కంటైనర్ల మధ్య విభజించి, ప్రత్యేక OS ప్రక్రియలుగా అమలు చేయడం ద్వారా అప్లికేషన్లను త్వరగా అమలు చేయడానికి మరియు ఫైల్ సిస్టమ్ను ఉత్తమంగా ఉపయోగించుకోవడానికి డాకర్ మాకు అనుమతిస్తుంది.
మూలం: www.habr.com