LXD konteynerləri ilə inkişaf mühitlərinin təcrid edilməsi

İş stansiyamda yerli təcrid olunmuş inkişaf mühitlərinin təşkilinə yanaşma haqqında danışacağam. Bu yanaşma aşağıdakı amillərin təsiri altında hazırlanmışdır:

  • Fərqli dillər müxtəlif IDE-lər və alətlər zəncirləri tələb edir;
  • Fərqli layihələr alət silsiləsi və kitabxanaların müxtəlif versiyalarından istifadə edə bilər.

Bu yanaşma, hosta yönləndirilmiş qrafik çıxışı ilə laptop və ya iş stansiyasında yerli olaraq işləyən LXD konteynerlərinin daxilində inkişaf etdirməkdir.

Konfiqurasiya nümunəsi Ubuntu 20.04.

Seçimlər və səbəblər haqqında fikirlər məqalənin sonunda verilmişdir.

1. LXD quraşdırılması

В Ubuntu 20.04 LXD artıq deb paketi kimi quraşdırmaq üçün mövcud deyil, yalnız snap vasitəsilə:

$ snap install lxd

Quraşdırıldıqdan sonra işə salmaq lazımdır:

$ lxd init

Dəyişdirdiyim yeganə parametrdir storage bakend - Mən istifadə edirəm dir ən sadəsi kimi. Şəkillərdən və surətlərdən istifadə etmədiyim üçün xəbərdarlıqlar var sənədləşdirmə Məni qorxutmurlar:

Eynilə, kataloq backend son çarə seçimi kimi nəzərə alınmalıdır.
O, bütün əsas LXD xüsusiyyətlərini dəstəkləyir, lakin yerinə yetirə bilmədiyi üçün olduqca yavaş və səmərəsizdir
ani nüsxələr və ya snapshotlar və buna görə də hər dəfə nümunənin yaddaşının tam surətini çıxarmaq lazımdır.

2. LXD profilinin qurulması

LXD-də profillər — bunlar bir neçə konteynerə tətbiq edilən parametrlər toplusudur. Ehtiyaclarım üçün standart olaraq yaradılmış yeganə profil mənim üçün kifayətdir default aşağıdakı dəyişikliklərlə:

  • $ lxc profile device add default X0 disk source=/tmp/.X11-unix/X0 path=/tmp/.X11-unix/X0 — konteynerlərdəki proqramların host X11 serveri ilə qarşılıqlı əlaqədə olması üçün;
  • $ lxc profile set default environment.DISPLAY :0 - belə ki, ətraf mühitin dəyişən DISPLAY konteynerlərdə düzgün quraşdırılmışdır;
  • $ lxc profile set default raw.idmap "both 1000 1000" - düzgün üçün identifikator xəritələşdirilməsi.

3. Konteynerin yaradılması və quraşdırılması

Şəkil əsasında konteynerin yaradılması images:ubuntu/20.04:

$ lxc launch images:ubuntu/20.04 dev1

Mən anbardan şəkillərə üstünlük verirəm https://images.linuxcontainers.org, çünki onlar daha az əvvəlcədən quraşdırılmış proqram təminatına malikdirlər. Bu səbəbdən mən prefiksi əlavə etdim images: şəklin adına. Ubuntu deposundan bir şəkil əsasında konteyner yaratmaq aşağıdakı kimi edilə bilər: $ lxc launch ubuntu/20.04 dev1.

Konteynerin kök qabığına giriş:

$ lxc exec dev1 -- bash

Firefox və VS Kodunu quraşdıracağam (depodan təlimatlara uyğun olaraq):

$ 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

Aydınlıq üçün bir konteyner daxil edəcəm.

poweroff

Bonus! GPU-nu konteynerə atmaq olduqca asandır ki, orada işləyən proqramlar qrafik kartdan istifadə edə bilsin. Bunu etmək üçün sizə lazımdır:

  • cihaz əlavə edin $ lxc config device add dev1 mygpu gpu;
  • konteynerdə video kart sürücülərini quraşdırın - hostda quraşdırılmış eynilər.

4. Konteynerdən istifadə etməklə

Konteyner hələ işləmirsə, onu işə salmalısınız:

lxc start dev1

Qeyri-root istifadəçisi kimi VS Kodunun işlədilməsi ubuntu:

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

Firefox-u işə salın:

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

Tətbiq pəncərələri hostda göstəriləcək, lakin onlar konteynerin içərisində yerinə yetiriləcək - ssh istifadə edərək qrafiklərin yönləndirilməsinə bənzər.

Çalışan konteynerləri əl ilə bağlamıram, çünki onda çox şey görmürəm - özümü işləyən proqramların pəncərələrini bağlamaqla məhdudlaşdırıram.

5. Nəticə

Mən inkişaf üçün host ƏS-dən istifadə etməməyi üstün tuturam, çünki bu, inkişaf alətlərinin quraşdırılmasını, kitabxanaların debug versiyalarını, sistem komponentlərinin müəyyən bir şəkildə konfiqurasiyasını və digər manipulyasiyaları tələb edir. Bütün bunlar digər inkişaf etdirilməyən proqramlarda, hətta bütün OS-də gözlənilməz davranışa səbəb ola bilər. Məsələn, OpenSSL konfiqurasiyasında dəyişikliklər ƏS-nin düzgün başlamasına səbəb ola bilər.

İnkişaf mühitlərini təcrid etmək üçün müxtəlif alətləri sınamışam:

  • virtual maşınlar (KVM, VirtualBox və s.) ən bariz seçimdir, lakin onlar əhəmiyyətli dərəcədə daha çox resurs istehlak edirlər, baxmayaraq ki, Windows altında inkişaf üçün başqa seçimlər yoxdur (əgər host Linux-dursa);
  • yerli maşında işləyən bulud inkişaf alətləri (konteynerdə və ya virtual maşında Cloud9, Eclipse Che və s.) - onlar bu iş rejimi üçün hazırlanmayıb, əlavə konfiqurasiya və texniki xidmət tələb edir, onlardan məqsədlərinə uyğun istifadə etmək daha yaxşıdır. məqsəd - buludda;
  • Docker konteynerləri yenə başqa bir şey üçün nəzərdə tutulub; mənim fikrimcə, onlar hələ ayrı qablarda qablaşdırılmamış proqram təminatından istifadə edərək tez prototip etmək üçün çox əlverişli deyillər.

Seçilmiş yanaşma özünün sadəliyi və giriş üçün aşağı maneəsi ilə məni heyran edir. Konteynerlərin özlərində layihəyə xas yanaşmalardan istifadə edə bilərsiniz: hər şeyi əl ilə quraşdırın və konfiqurasiya edin və ya avtomatlaşdırmadan istifadə edin (Kukla, Ansible və s.), hətta yerləşdirin. Docker-əsaslı infrastruktur. Mən həmçinin çoxlu sayda asılılıqların və ya fərqli OS versiyasının quraşdırılmasını tələb edən xüsusi proqram təminatını işə salmaq üçün LXD konteynerlərindən istifadə edirəm - bu halda, məsələn, istədiyiniz ƏS versiyası ilə konteyner yarada bilərsiniz. $ lxc launch images:ubuntu/16.04 dev16.

Yadda saxlamaq lazımdır ki, izolyasiya baxımından konteynerləşdirmə virtuallaşdırma ilə müqayisədə daha böyük hücum səthinə malikdir - host və konteyner bir nüvəni bölüşür, bu zəiflik zərərli proqramların konteynerdən çıxmasına imkan verə bilər. Şübhəli proqram təminatı ilə təcrübə apararkən, daha uyğun izolyasiya mexanizmlərindən istifadə etmək daha yaxşıdır.

Faydalı linklər

Mənbə: www.habr.com

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