LXD కంటైనర్‌లతో అభివృద్ధి వాతావరణాలను వేరుచేయడం

నా వర్క్‌స్టేషన్‌లో స్థానిక వివిక్త అభివృద్ధి వాతావరణాలను నిర్వహించే విధానం గురించి నేను మాట్లాడతాను. కింది కారకాల ప్రభావంతో విధానం అభివృద్ధి చేయబడింది:

  • వివిధ భాషలకు వేర్వేరు IDEలు మరియు టూల్‌చెయిన్‌లు అవసరం;
  • వేర్వేరు ప్రాజెక్ట్‌లు వివిధ రకాల టూల్‌చెయిన్‌లు మరియు లైబ్రరీలను ఉపయోగించవచ్చు.

ల్యాప్‌టాప్ లేదా వర్క్‌స్టేషన్‌లో స్థానికంగా నడుస్తున్న LXD కంటైనర్‌లలో గ్రాఫిక్స్ అవుట్‌పుట్‌ను హోస్ట్‌కు మళ్లించడం ద్వారా అభివృద్ధి చేయడం ఈ విధానం.

ఉదాహరణ కాన్ఫిగరేషన్ ఉబుంటు 9.

ఎంపికలు మరియు కారణాలపై ప్రతిబింబాలు వ్యాసం చివరిలో ఇవ్వబడ్డాయి.

1. LXD ఇన్‌స్టాలేషన్

В ఉబుంటు 9 LXD ఇకపై డెబ్ ప్యాకేజీగా ఇన్‌స్టాలేషన్ కోసం అందుబాటులో ఉండదు, స్నాప్ ద్వారా మాత్రమే:

$ snap install lxd

ఇన్‌స్టాలేషన్ తర్వాత మీరు ప్రారంభించాల్సిన అవసరం ఉంది:

$ lxd init

నేను మార్చే ఏకైక పరామితి storage bakend - నేను ఉపయోగిస్తాను dir సరళమైనదిగా. నేను చిత్రాలు మరియు కాపీలను ఉపయోగించను కాబట్టి, హెచ్చరికలు డాక్యుమెంటేషన్ వారు నన్ను భయపెట్టరు:

అదేవిధంగా, డైరెక్టరీ బ్యాకెండ్‌ను చివరి రిసార్ట్ ఎంపికగా పరిగణించాలి.
ఇది అన్ని ప్రధాన LXD ఫీచర్‌లకు మద్దతు ఇస్తుంది, కానీ అది పని చేయనందున చాలా నెమ్మదిగా మరియు అసమర్థంగా ఉంటుంది
తక్షణ కాపీలు లేదా స్నాప్‌షాట్‌లు మరియు ప్రతిసారీ ఉదాహరణ నిల్వ మొత్తాన్ని కాపీ చేయాలి.

2. LXD ప్రొఫైల్ సెటప్

LXDలో ప్రొఫైల్‌లు - ఇవి అనేక కంటైనర్లకు వర్తించే పారామితుల సెట్లు. నా అవసరాలకు, డిఫాల్ట్‌గా సృష్టించబడిన ప్రొఫైల్ మాత్రమే నాకు సరిపోతుంది default కింది మార్పులతో:

  • $ lxc profile device add default X0 disk source=/tmp/.X11-unix/X0 path=/tmp/.X11-unix/X0 — తద్వారా కంటైనర్‌లలోని అప్లికేషన్‌లు హోస్ట్ X11 సర్వర్‌తో పరస్పర చర్య చేయగలవు;
  • $ lxc profile set default environment.DISPLAY :0 - తద్వారా పర్యావరణ వేరియబుల్ DISPLAY కంటైనర్లలో సరిగ్గా ఇన్స్టాల్ చేయబడింది;
  • $ lxc profile set default raw.idmap "both 1000 1000" - సరైనది కోసం ఐడెంటిఫైయర్ మ్యాపింగ్.

3. కంటైనర్‌ను సృష్టించడం మరియు ఏర్పాటు చేయడం

చిత్రం ఆధారంగా కంటైనర్‌ను సృష్టిస్తోంది images:ubuntu/20.04:

$ lxc launch images:ubuntu/20.04 dev1

నేను రిపోజిటరీ నుండి చిత్రాలను ఇష్టపడతాను https://images.linuxcontainers.org, వారు తక్కువ ముందుగా ఇన్‌స్టాల్ చేసిన సాఫ్ట్‌వేర్‌ను కలిగి ఉన్నందున. ఈ కారణంగా నేను ఉపసర్గను జోడించాను images: చిత్రం పేరుకు. ఉబుంటు రిపోజిటరీ నుండి ఒక చిత్రం ఆధారంగా కంటైనర్‌ను సృష్టించడం క్రింది విధంగా చేయవచ్చు: $ lxc launch ubuntu/20.04 dev1.

కంటైనర్ యొక్క రూట్ షెల్‌కు యాక్సెస్:

$ lxc exec dev1 -- bash

నేను Firefox మరియు VS కోడ్‌ని ఇన్‌స్టాల్ చేస్తాను (రిపోజిటరీ నుండి సూచనల ప్రకారం):

$ apt update
$ apt install curl gpg firefox

$ curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > packages.microsoft.gpg
$ install -o root -g root -m 644 packages.microsoft.gpg /usr/share/keyrings/
$ echo "deb [arch=amd64 signed-by=/usr/share/keyrings/packages.microsoft.gpg] https://packages.microsoft.com/repos/vscode stable main" > /etc/apt/sources.list.d/vscode.list

$ apt update
$ apt install code

నేను స్పష్టత కోసం ఒక కంటైనర్‌ను చేర్చుతాను.

poweroff

బోనస్! GPUని కంటైనర్‌లోకి విసిరేయడం చాలా సులభం, తద్వారా దానిలో నడుస్తున్న అప్లికేషన్‌లు గ్రాఫిక్స్ కార్డ్‌ని ఉపయోగించగలవు. దీన్ని చేయడానికి మీకు ఇది అవసరం:

  • పరికరాన్ని జోడించండి $ lxc config device add dev1 mygpu gpu;
  • కంటైనర్‌లో వీడియో కార్డ్ డ్రైవర్‌లను ఇన్‌స్టాల్ చేయండి - హోస్ట్‌లో ఇన్‌స్టాల్ చేయబడిన అదే వాటిని.

4. కంటైనర్ ఉపయోగించడం

కంటైనర్ ఇంకా పని చేయకపోతే, మీరు దీన్ని ప్రారంభించాలి:

lxc start dev1

రూట్ కాని వినియోగదారుగా VS కోడ్‌ని అమలు చేస్తోంది ఉబుంటు:

lxc exec dev1 -- sudo --login --user ubuntu code

Firefoxని ప్రారంభించండి:

lxc exec dev1 -- sudo --login --user ubuntu firefox

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

నేను రన్నింగ్ కంటైనర్‌లను మాన్యువల్‌గా షట్ డౌన్ చేయను, ఎందుకంటే అందులో నాకు పెద్దగా పాయింట్ కనిపించడం లేదు - రన్నింగ్ అప్లికేషన్‌ల విండోలను మూసివేయడానికి నన్ను నేను పరిమితం చేస్తాను.

5. ముగింపు

డెవలప్‌మెంట్ టూల్స్‌ను ఇన్‌స్టాల్ చేయడం, లైబ్రరీల డీబగ్ వెర్షన్‌లు, సిస్టమ్ కాంపోనెంట్‌లను నిర్దిష్ట మార్గంలో కాన్ఫిగర్ చేయడం మరియు ఇతర మానిప్యులేషన్‌లు అవసరం కాబట్టి, డెవలప్‌మెంట్ కోసం హోస్ట్ OSని ఉపయోగించకూడదని నేను ఇష్టపడతాను. ఇవన్నీ ఇతర అభివృద్ధి చెందని సాఫ్ట్‌వేర్‌లలో లేదా మొత్తం OSలో కూడా ఊహించని ప్రవర్తనకు దారితీయవచ్చు. ఉదాహరణకు, OpenSSL కాన్ఫిగరేషన్‌లో మార్పులు OS సరిగ్గా ప్రారంభించబడకుండా ఆగిపోవచ్చు.

నేను డెవలప్‌మెంట్ ఎన్విరాన్‌మెంట్‌లను వేరుచేయడానికి వివిధ సాధనాలను ప్రయత్నించాను:

  • వర్చువల్ మెషీన్లు (KVM, VirtualBox, మొదలైనవి) అత్యంత స్పష్టమైన ఎంపిక, కానీ అవి గణనీయంగా ఎక్కువ వనరులను వినియోగిస్తాయి, అయినప్పటికీ Windows కింద అభివృద్ధి కోసం ఇతర ఎంపికలు లేవు (హోస్ట్ Linux అయితే);
  • స్థానిక మెషీన్‌లో నడుస్తున్న క్లౌడ్ డెవలప్‌మెంట్ సాధనాలు (కంటెయినర్‌లో క్లౌడ్ 9 లేదా వర్చువల్ మెషీన్, ఎక్లిప్స్ చే మొదలైనవి) - అవి ఈ మోడ్ ఆఫ్ ఆపరేషన్ కోసం అభివృద్ధి చేయబడలేదు, వాటికి అదనపు కాన్ఫిగరేషన్ మరియు నిర్వహణ అవసరం, వాటిని ఉద్దేశించిన వాటి కోసం ఉపయోగించడం ఉత్తమం. ప్రయోజనం - మేఘంలో;
  • డాకర్ కంటైనర్‌లు మళ్లీ వేరే వాటి కోసం ఉద్దేశించబడ్డాయి; నా అభిప్రాయం ప్రకారం, ప్రత్యేక కంటైనర్‌లలో ఇంకా ప్యాక్ చేయని సాఫ్ట్‌వేర్‌ను ఉపయోగించి త్వరగా ప్రోటోటైప్ చేయడానికి అవి చాలా సౌకర్యవంతంగా లేవు.

ఎంచుకున్న విధానం దాని సరళత మరియు ప్రవేశానికి తక్కువ అవరోధంతో నన్ను ఆకట్టుకుంది. కంటైనర్‌లలోనే, మీరు ప్రాజెక్ట్-నిర్దిష్ట విధానాలను ఉపయోగించవచ్చు: ప్రతిదాన్ని మాన్యువల్‌గా ఇన్‌స్టాల్ చేయండి మరియు కాన్ఫిగర్ చేయండి లేదా ఆటోమేషన్‌ను ఉపయోగించండి (పప్పెట్, అన్సిబుల్, మొదలైనవి), కూడా అమలు చేయండి డాకర్ ఆధారిత మౌలిక సదుపాయాలు. పెద్ద సంఖ్యలో డిపెండెన్సీలు లేదా వేరే OS వెర్షన్‌ని ఇన్‌స్టాల్ చేయాల్సిన నిర్దిష్ట సాఫ్ట్‌వేర్‌ను అమలు చేయడానికి నేను LXD కంటైనర్‌లను కూడా ఉపయోగిస్తాను - ఈ సందర్భంలో మీరు కోరుకున్న OS వెర్షన్‌తో కంటైనర్‌ను సృష్టించవచ్చు, ఉదాహరణకు $ lxc launch images:ubuntu/16.04 dev16.

ఐసోలేషన్ పరంగా, వర్చువలైజేషన్‌తో పోలిస్తే కంటైనర్‌రైజేషన్ పెద్ద దాడి ఉపరితలాన్ని కలిగి ఉందని గుర్తుంచుకోవడం ముఖ్యం - హోస్ట్ మరియు కంటైనర్ ఒకే కోర్‌ను పంచుకుంటాయి, ఇందులో మాల్వేర్ కంటైనర్ నుండి తప్పించుకోవడానికి అనుమతించే దుర్బలత్వం. సందేహాస్పద సాఫ్ట్‌వేర్‌తో ప్రయోగాలు చేస్తున్నప్పుడు, మరింత సరైన ఐసోలేషన్ మెకానిజమ్‌లను ఉపయోగించడం మంచిది.

ఉపయోగకరమైన లింకులు

మూలం: www.habr.com

ఒక వ్యాఖ్యను జోడించండి