Զարգացման միջավայրերի մեկուսացում LXD տարաներով

Ես կխոսեմ իմ աշխատանքային կայանում տեղական մեկուսացված զարգացման միջավայրեր կազմակերպելու մոտեցման մասին: Մոտեցումը մշակվել է հետևյալ գործոնների ազդեցության ներքո.

  • Տարբեր լեզուներ պահանջում են տարբեր IDE-ներ և գործիքների շղթաներ.
  • Տարբեր նախագծեր կարող են օգտագործել գործիքների շղթաների և գրադարանների տարբեր տարբերակներ:

Մոտեցումը կայանում է նրանում, որ մշակվի LXD կոնտեյներների ներսում, որոնք աշխատում են նոութբուքի կամ աշխատակայանի վրա, որտեղ գրաֆիկական ելքը վերահղված է դեպի հյուրընկալողը:

Օրինակ կոնֆիգուրացիա Ubuntu 20.04.

Մտորումներ տարբերակների և պատճառների վերաբերյալ տրված են հոդվածի վերջում:

1. LXD տեղադրում

В Ubuntu 20.04 LXD-ն այլևս հասանելի չէ տեղադրման համար որպես deb փաթեթ, միայն snap-ի միջոցով.

$ 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: պատկերի անվանը: Ubuntu-ի պահոցից պատկերի հիման վրա կոնտեյների ստեղծումը կարող է կատարվել հետևյալ կերպ. $ lxc launch ubuntu/20.04 dev1.

Մուտք դեպի տարայի արմատային պատյան.

$ lxc exec dev1 -- bash

Ես կտեղադրեմ Firefox-ը և VS Code-ը (պահոցից հրահանգների համաձայն):

$ 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 կոդը որպես ոչ արմատային օգտվող Ubuntu:

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

Գործարկել Firefox-ը.

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

Հավելվածի պատուհանները կցուցադրվեն հոսթի վրա, բայց դրանք կկատարվեն կոնտեյների ներսում՝ նման է ssh-ի միջոցով գրաֆիկայի վերահասցեավորմանը:

Ես ձեռքով չեմ անջատում գործող բեռնարկղերը, քանի որ դրա մեջ մեծ իմաստ չեմ տեսնում. ես սահմանափակվում եմ գործարկվող հավելվածների պատուհանները փակելով:

5. Եզրակացություն

Ես նախընտրում եմ չօգտագործել հյուրընկալող OS մշակման համար, քանի որ դա կպահանջի մշակման գործիքների տեղադրում, գրադարանների վրիպազերծման տարբերակները, համակարգի բաղադրիչները հատուկ ձևով կարգավորելը և այլ մանիպուլյացիաներ: Այս ամենը կարող է հանգեցնել անսպասելի պահվածքի այլ ոչ մշակման ծրագրերում կամ նույնիսկ ամբողջ ՕՀ-ում: Օրինակ, OpenSSL կազմաձևման փոփոխությունները կարող են հանգեցնել ՕՀ-ի ճիշտ գործարկման դադարեցմանը:

Զարգացման միջավայրերը մեկուսացնելու համար ես փորձել եմ տարբեր գործիքներ.

  • վիրտուալ մեքենաները (KVM, VirtualBox և այլն) ամենաակնառու տարբերակն են, բայց դրանք զգալիորեն ավելի շատ ռեսուրսներ են սպառում, չնայած Windows-ի տակ զարգացման այլ տարբերակներ չկան (եթե հոսթինգը Linux է);
  • ամպի մշակման գործիքներ, որոնք աշխատում են տեղական մեքենայի վրա (Cloud9 կոնտեյներով կամ վիրտուալ մեքենայում, Eclipse Che և այլն) - դրանք մշակված չեն գործողության այս ռեժիմի համար, դրանք պահանջում են լրացուցիչ կազմաձևում և սպասարկում, ավելի լավ է դրանք օգտագործել իրենց նախատեսվածի համար: նպատակը - ամպի մեջ;
  • Docker բեռնարկղերը կրկին նախատեսված են այլ բանի համար, իմ կարծիքով, դրանք այնքան էլ հարմար չեն արագ նախատիպերի համար՝ օգտագործելով ծրագրակազմ, որը դեռ փաթեթավորված չէ առանձին տարաներում:

Ընտրված մոտեցումն ինձ տպավորում է իր պարզությամբ և մուտքի ցածր խոչընդոտով: Կոնտեյներներում դուք կարող եք օգտագործել ծրագրին հատուկ մոտեցումներ. տեղադրել և կարգավորել ամեն ինչ ձեռքով, կամ օգտագործել ավտոմատացում (Puppet, Ansible և այլն), նույնիսկ տեղակայել: Docker-ի վրա հիմնված ենթակառուցվածք. Ես նաև օգտագործում եմ LXD կոնտեյներներ հատուկ ծրագրակազմ գործարկելու համար, որը կա՛մ պահանջում է մեծ թվով կախվածությունների կամ ՕՀ-ի այլ տարբերակի տեղադրում. այս դեպքում դուք կարող եք ստեղծել կոնտեյներ OS-ի ցանկալի տարբերակով, օրինակ. $ lxc launch images:ubuntu/16.04 dev16.

Կարևոր է հիշել, որ մեկուսացման առումով կոնտեյներացումն ավելի մեծ հարձակման մակերես ունի՝ համեմատած վիրտուալացման հետ. հոսթն ու կոնտեյները կիսում են մեկ միջուկ, խոցելիություն, որը կարող է թույլ տալ չարամիտ ծրագրերին փախչել կոնտեյներից: Կասկածելի ծրագրերի հետ փորձեր կատարելիս ավելի լավ է օգտագործել մեկուսացման ավելի համապատասխան մեխանիզմներ:

Օգտակար հղումներ

Source: www.habr.com

Добавить комментарий