Ҷудо кардани муҳити рушд бо контейнерҳои 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 Code ҳамчун корбари ғайридавлатӣ Ubuntu:

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

Firefox-ро оғоз кунед:

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

Тирезаҳои барнома дар ҳост намоиш дода мешаванд, аммо онҳо дар дохили контейнер иҷро карда мешаванд - ба монанди интиқоли графикҳо бо истифода аз ssh.

Ман контейнерҳои иҷрошавандаро дастӣ хомӯш намекунам, зеро ман дар он чизи зиёдеро намебинам - ман худамро бо пӯшидани тирезаҳои барномаҳои иҷрошаванда маҳдуд мекунам.

5. Хулоса

Ман бартарӣ медиҳам, ки ОС-и мизбонро барои таҳия истифода накунам, зеро ин насб кардани абзорҳои таҳия, ислоҳи версияҳои китобхонаҳо, конфигуратсияи ҷузъҳои системаро ба таври мушаххас ва дигар амалҳоро талаб мекунад. Ҳамаи ин метавонад ба рафтори ғайричашмдошт дар дигар нармафзори таҳиянашуда ва ҳатто тамоми ОС оварда расонад. Масалан, тағирот дар конфигуратсияи OpenSSL метавонад боиси қатъ шудани оғози дурусти ОС гардад.

Ман асбобҳои гуногунро барои ҷудо кардани муҳити рушд санҷидаам:

  • мошинҳои виртуалӣ (KVM, VirtualBox ва ғайра) варианти равшантарин мебошанд, аммо онҳо захираҳои хеле бештарро истеъмол мекунанд, гарчанде ки дигар имконоти таҳия дар Windows вуҷуд надоранд (агар мизбон Linux бошад);
  • Асбобҳои таҳияи абр, ки дар мошини маҳаллӣ кор мекунанд (Cloud9 дар контейнер ё мошини виртуалӣ, Eclipse Che ва ғайра) - онҳо барои ин режими кор таҳия нашудаанд, онҳо конфигуратсия ва нигоҳдории иловагӣ талаб мекунанд, беҳтар аст, ки онҳоро барои мақсадҳои худ истифода баред мақсад - дар абр;
  • Контейнерҳои Docker боз барои чизи дигар пешбинӣ шудаанд; ба назари ман, онҳо барои прототипи зуд бо истифода аз нармафзоре, ки ҳанӯз дар контейнерҳои алоҳида баста нашудаанд, чандон қулай нестанд.

Равиши интихобшуда маро бо соддагӣ ва монеаи пасти воридшавӣ ба ҳайрат меорад. Дар худи контейнерҳо шумо метавонед равишҳои мушаххаси лоиҳаро истифода баред: ҳама чизро дастӣ насб кунед ва танзим кунед ё автоматикаро истифода баред (Puppet, Ansible ва ғайра), ҳатто ҷойгир кунед Инфрасохтори ба Docker асосёфта. Ман инчунин контейнерҳои LXD-ро барои иҷро кардани нармафзори мушаххас истифода мебарам, ки ё насб кардани шумораи зиёди вобастагӣ ё версияи дигари ОС-ро талаб мекунад - дар ин ҳолат шумо метавонед як контейнерро бо версияи дилхоҳи OS эҷод кунед, масалан $ lxc launch images:ubuntu/16.04 dev16.

Дар хотир доштан муҳим аст, ки аз нуқтаи назари ҷудокунӣ, контейнеризатсия нисбат ба виртуализатсия сатҳи ҳамлаи калонтар дорад - мизбон ва контейнер як ядрои ягонаро тақсим мекунанд, осебпазирие, ки дар он метавонад нармафзори зарароварро аз контейнер раҳо кунад. Ҳангоми озмоиш бо нармафзори шубҳанок беҳтар аст, ки механизмҳои изолятсия мувофиқтар истифода шаванд.

Пайвандҳои муфид

Манбаъ: will.com

Илова Эзоҳ