Յուպիթերի արձակում LXD ուղեծիր

Երբևէ ստիպված եղե՞լ եք փորձարկել կոդով կամ համակարգային կոմունալ ծառայությունները Linux-ում՝ առանց անհանգստանալու հիմքում ընկած համակարգի մասին և քանդելու ամեն ինչ՝ կոդի մեջ սխալի դեպքում, որը պետք է գործարկի արմատային արտոնություններով:

Բայց ի՞նչ կասեք այն փաստի մասին, որ, ենթադրենք, պետք է փորձարկել կամ գործարկել տարբեր միկրոծառայությունների մի ամբողջ կլաստեր մեկ մեքենայի վրա: Հարյուր կամ նույնիսկ հազար.

Հիպերվիզորի կողմից կառավարվող վիրտուալ մեքենաներով նման խնդիրները կարող են և կլուծվեն, բայց ինչ գնով: Օրինակ, LXD-ի կոնտեյները, որը հիմնված է Alpine Linux բաշխման վրա, սպառում է միայն 7.60MB RAM-ը, և որտեղ արմատային միջնորմը զբաղեցնում է գործարկումից հետո 9.5MB! Ինչպե՞ս է դա քեզ դուր գալիս, Իլոն Մասկ: Խորհուրդ եմ տալիս ստուգել LXD-ի հիմնական հնարավորությունները՝ կոնտեյներային համակարգ Linux-ում

Այն բանից հետո, երբ ընդհանուր առմամբ պարզ դարձավ, թե ինչ են LXD կոնտեյներները, եկեք ավելի հեռու գնանք և մտածենք, ինչ կլիներ, եթե լիներ նման հավաքիչ հարթակ, որտեղ դուք կարող եք ապահով կերպով գործարկել կոդ հոսթի համար, ստեղծել գրաֆիկներ, դինամիկ (ինտերակտիվ) կապել UI- վիջեթները ձեր կոդի հետ, լրացնել կոդը տեքստով բլեքջեքով... ֆորմատավորում? Ինչ-որ ինտերակտիվ բլոգ: Վա՜յ... ես ուզում եմ: Ցանկանում եմ 🙂

Նայեք կատվի տակ, որտեղ մենք կգործարկենք կոնտեյներով Յուպիտերի լաբորատորիա - հաջորդ սերնդի օգտագործողի միջերեսը հնացած Jupyter Notebook-ի փոխարեն, և մենք կտեղադրենք նաև Python մոդուլներ, ինչպիսիք են. NumPy- ն, Պանդա, Մատպլոտլիբ, IPyWidgets որը թույլ կտա անել վերը թվարկված ամեն ինչ և պահպանել այդ ամենը հատուկ ֆայլում՝ IPython նոութբուքում:

Յուպիթերի արձակում LXD ուղեծիր

Ուղեծրային թռիչքի պլան ^

Յուպիթերի արձակում LXD ուղեծիր

Եկեք ուրվագծենք գործողությունների համառոտ ծրագիր՝ վերը նշված սխեմայի իրականացումը մեզ համար հեշտացնելու համար.

  • Եկեք տեղադրենք և գործարկենք կոնտեյներ՝ հիմնված բաշխման հավաքածուի վրա Alpine Linux- ը. Մենք կօգտագործենք այս բաշխումը, քանի որ այն ուղղված է մինիմալիզմին և դրա մեջ կտեղադրենք միայն ամենաանհրաժեշտ ծրագրաշարը, ավելորդ ոչինչ:
  • Եկեք կոնտեյների մեջ ավելացնենք լրացուցիչ վիրտուալ սկավառակ և անուն տանք. hostfs և տեղադրեք այն արմատային ֆայլային համակարգում: Այս սկավառակը հնարավորություն կտա օգտագործել ֆայլեր հոսթի վրա տվյալ գրացուցակից կոնտեյների ներսում: Այսպիսով, մեր տվյալները անկախ կլինեն կոնտեյներից: Եթե ​​կոնտեյները ջնջվի, տվյալները կմնան հոսթի վրա: Բացի այդ, այս սխեման օգտակար է բազմաթիվ բեռնարկղերի միջև նույն տվյալները կիսելու համար՝ առանց բեռնարկղերի բաշխման ստանդարտ ցանցային մեխանիզմների օգտագործման:
  • Տեղադրենք Bash-ը, sudo-ն, անհրաժեշտ գրադարանները, ավելացնենք և կազմաձևենք համակարգի օգտատերը
  • Եկեք տեղադրենք Python, մոդուլներ և նրանց համար կազմենք երկուական կախվածություն
  • Եկեք տեղադրենք և գործարկենք Յուպիտերի լաբորատորիա, հարմարեցրեք տեսքը, տեղադրեք ընդլայնումներ դրա համար։

Այս հոդվածում մենք կսկսենք կոնտեյների գործարկումից, մենք չենք դիտարկի LXD-ի տեղադրումն ու կազմաձևումը, այս ամենը կարող եք գտնել մեկ այլ հոդվածում. LXD - Linux կոնտեյներային համակարգերի հիմնական առանձնահատկությունները.

Հիմնական համակարգի տեղադրում և կազմաձևում ^

Մենք ստեղծում ենք կոնտեյներ հրամանով, որում նշում ենք պատկերը. alpine3, կոնտեյների նույնացուցիչ - jupyterlab և, անհրաժեշտության դեպքում, կազմաձևման պրոֆիլներ.

lxc init alpine3 jupyterlab --profile=default --profile=hddroot

Այստեղ ես օգտագործում եմ կազմաձևման պրոֆիլը hddroot որը սահմանում է արմատային միջնորմով կոնտեյներ ստեղծել Պահեստային լողավազան գտնվում է ֆիզիկական HDD սկավառակի վրա.

lxc profile show hddroot

config: {}
description: ""
devices:
  root:
    path: /
    pool: hddpool
    type: disk
name: hddroot
used_by: []
lxc storage show hddpool

config:
  size: 10GB
  source: /dev/loop1
  volatile.initial_source: /dev/loop1
description: ""
name: hddpool
driver: btrfs
used_by:
- /1.0/images/ebd565585223487526ddb3607f5156e875c15a89e21b61ef004132196da6a0a3
- /1.0/profiles/hddroot
status: Created
locations:
- none

Սա ինձ հնարավորություն է տալիս փորձարկել կոնտեյներները HDD սկավառակի վրա՝ խնայելով SSD սկավառակի ռեսուրսները, որը հասանելի է նաև իմ համակարգում 🙂, որի համար ես ստեղծել եմ առանձին կազմաձևման պրոֆիլ։ ssdroot.

Կոնտեյների ստեղծումից հետո այն գտնվում է վիճակում STOPPED, այնպես որ մենք պետք է այն սկսենք դրանում գործարկելով init համակարգը.

lxc start jupyterlab

Եկեք ցուցադրենք բեռնարկղերի ցանկը LXD-ով, օգտագործելով բանալին -c որը ցույց է տալիս, թե որ cսյունակների ցուցադրում.

lxc list -c ns4b
+------------+---------+-------------------+--------------+
|    NAME    |  STATE  |       IPV4        | STORAGE POOL |
+------------+---------+-------------------+--------------+
| jupyterlab | RUNNING | 10.0.5.198 (eth0) | hddpool      |
+------------+---------+-------------------+--------------+

Կոնտեյն ստեղծելիս IP հասցեն ընտրվել է պատահականորեն, քանի որ մենք օգտագործել ենք կոնֆիգուրացիայի պրոֆիլ default որը նախկինում կազմաձևված էր հոդվածում LXD - Linux կոնտեյներային համակարգերի հիմնական առանձնահատկությունները.

Մենք կփոխենք այս IP հասցեն ավելի հիշվողի` ստեղծելով ցանցային ինտերֆեյս կոնտեյների մակարդակում, և ոչ թե կազմաձևման պրոֆիլի մակարդակում, ինչպես այժմ առկա է ընթացիկ կազմաձևում: Պետք չէ դա անել, կարող եք բաց թողնել:

Ցանցային ինտերֆեյսի ստեղծում eth0 որը մենք կապում ենք անջատիչին (ցանցային կամուրջ) lxdbr0 որում մենք միացրել ենք NAT-ը նախորդ հոդվածի համաձայն, և կոնտեյները այժմ մուտք կունենա ինտերնետ, և մենք նաև ստատիկ IP հասցե ենք հատկացնում ինտերֆեյսին. 10.0.5.5:

lxc config device add jupyterlab eth0 nic name=eth0 nictype=bridged parent=lxdbr0 ipv4.address=10.0.5.5

Սարք ավելացնելուց հետո բեռնարկղը պետք է վերագործարկվի.

lxc restart jupyterlab

Կոնտեյների կարգավիճակի ստուգում.

lxc list -c ns4b
+------------+---------+------------------+--------------+
|    NAME    |  STATE  |       IPV4       | STORAGE POOL |
+------------+---------+------------------+--------------+
| jupyterlab | RUNNING | 10.0.5.5 (eth0)  | hddpool      |
+------------+---------+------------------+--------------+

Հիմնական ծրագրերի տեղադրում և համակարգի կարգավորում ^

Մեր կոնտեյները կառավարելու համար անհրաժեշտ է տեղադրել հետևյալ ծրագրաշարը.

Փաթեթ
Նկարագրություն

ուժեղ հարվածել
GNU Bourne Again կեղևը

բաշ-լրացում
Ծրագրավորվող ավարտը bash shell-ի համար

sudo
Որոշ օգտվողների հնարավորություն տվեք որոշ հրամաններ գործարկել որպես root

ստվեր
Գաղտնաբառերի և հաշվի կառավարման գործիքների փաթեթ՝ ստվերային ֆայլերի և PAM-ի աջակցությամբ

տզդատա
Ժամային գոտու և ամառային ժամանակի տվյալների աղբյուրներ

nano
Pico-ի խմբագրիչի կլոնավորումը բարելավումներով

Բացի այդ, դուք կարող եք աջակցություն տեղադրել համակարգի man-էջերում՝ տեղադրելով հետևյալ փաթեթները − man man-pages mdocml-apropos less

lxc exec jupyterlab -- apk add bash bash-completion sudo shadow tzdata nano

Եկեք նայենք մեր օգտագործած հրամաններին և ստեղներին.

  • lxc — Զանգահարեք LXD հաճախորդին
  • exec - LXD հաճախորդի մեթոդ, որը հրաման է գործարկում կոնտեյներով
  • jupyterlab - Կոնտեյների ID
  • -- — Հատուկ բանալի, որը սահմանում է հետագա ստեղները չմեկնաբանել որպես բանալիներ lxc իսկ մնացած թելը փոխանցեք տարայի վրա այնպես, ինչպես կա
  • apk — Alpine Linux բաշխման փաթեթի կառավարիչ
  • add — Փաթեթների կառավարչի մեթոդ, որը տեղադրում է հրամանից հետո նշված փաթեթները

Հաջորդը, մենք համակարգում կսահմանենք ժամային գոտի Europe/Moscow:

lxc exec jupyterlab -- cp /usr/share/zoneinfo/Europe/Moscow /etc/localtime

Ժամային գոտին տեղադրելուց հետո փաթեթը tzdata համակարգում այլևս անհրաժեշտ չէ, այն տեղ կզբաղեցնի, ուստի եկեք ջնջենք այն.

lxc exec jupyterlab -- apk del tzdata

Ժամային գոտու ստուգում.

lxc exec jupyterlab -- date

Wed Apr 15 10:49:56 MSK 2020

Որպեսզի շատ ժամանակ չծախսենք կոնտեյներով նոր օգտատերերի համար Bash-ի տեղադրման վրա, հետևյալ քայլերով մենք կպատճենենք պատրաստի skel ֆայլերը հյուրընկալող համակարգից դրան: Սա թույլ կտա ձեզ ինտերակտիվ կերպով կատարելագործել Bash-ը տարայի մեջ: Իմ հյուրընկալող համակարգը Manjaro Linux-ն է, և ֆայլերը պատճենվում են /etc/skel/.bash_profile, /etc/skel/.bashrc, /etc/skel/.dir_colors սկզբունքորեն դրանք հարմար են Alpine Linux-ի համար և չեն առաջացնում կրիտիկական խնդիրներ, բայց դուք կարող եք ունենալ այլ բաշխում, և դուք պետք է ինքնուրույն պարզեք, թե արդյոք կա սխալ Bash-ը կոնտեյներով գործարկելիս:

Պատճենեք կմախքի ֆայլերը կոնտեյներով: Բանալի --create-dirs կստեղծի անհրաժեշտ դիրեկտորիաները, եթե դրանք գոյություն չունեն.

lxc file push /etc/skel/.bash_profile jupyterlab/etc/skel/.bash_profile --create-dirs
lxc file push /etc/skel/.bashrc jupyterlab/etc/skel/.bashrc
lxc file push /etc/skel/.dir_colors jupyterlab/etc/skel/.dir_colors

Գոյություն ունեցող արմատային օգտվողի համար պատճենեք skel ֆայլերը, որոնք պարզապես պատճենված են կոնտեյների մեջ, հիմնական գրացուցակում.

lxc exec jupyterlab -- cp /etc/skel/.bash_profile /root/.bash_profile
lxc exec jupyterlab -- cp /etc/skel/.bashrc /root/.bashrc
lxc exec jupyterlab -- cp /etc/skel/.dir_colors /root/.dir_colors

Alpine Linux-ը օգտվողների համար տեղադրում է համակարգի կեղև /bin/sh, կփոխարինենք դրանով root օգտվող Bash-ում.

lxc exec jupyterlab -- usermod --shell=/bin/bash root

Որ root օգտատերը գաղտնաբառ չէր, նա պետք է գաղտնաբառ սահմանի: Հետևյալ հրամանը կստեղծի և կսահմանի նրա համար նոր պատահական գաղտնաբառ, որը դուք կտեսնեք վահանակի էկրանին այն կատարելուց հետո.

lxc exec jupyterlab -- /bin/bash -c "PASSWD=$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 12); echo "root:$PASSWD" | chpasswd && echo "New Password: $PASSWD""

New Password: sFiXEvBswuWA

Նաև եկեք ստեղծենք համակարգի նոր օգտվող. jupyter որի համար մենք ավելի ուշ կկարգավորենք Յուպիտերի լաբորատորիա:

lxc exec jupyterlab -- useradd --create-home --shell=/bin/bash jupyter

Եկեք ստեղծենք և սահմանենք դրա համար գաղտնաբառ.

lxc exec jupyterlab -- /bin/bash -c "PASSWD=$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 12); echo "jupyter:$PASSWD" | chpasswd && echo "New Password: $PASSWD""

New Password: ZIcbzWrF8tki

Հաջորդը, մենք կկատարենք երկու հրաման, առաջինը կստեղծի համակարգային խումբ sudo, իսկ երկրորդը դրան օգտատեր կավելացնի jupyter:

lxc exec jupyterlab -- groupadd --system sudo
lxc exec jupyterlab -- groupmems --group sudo --add jupyter

Տեսնենք, թե ինչ խմբերի է պատկանում օգտատերը jupyter:

lxc exec jupyterlab -- id -Gn jupyter

jupyter sudo

Ամեն ինչ լավ է, եկեք շարունակենք:

Թույլատրել բոլոր օգտվողներին, ովքեր խմբի անդամ են sudo օգտագործել հրամանը sudo. Դա անելու համար գործարկեք հետևյալ սկրիպտը, որտեղ sed ապամեկնաբանում է պարամետրերի տողը կազմաձևման ֆայլում /etc/sudoers:

lxc exec jupyterlab -- /bin/bash -c "sed --in-place -e '/^#[ t]*%sudo[ t]*ALL=(ALL)[ t]*ALL$/ s/^[# ]*//' /etc/sudoers"

JupyterLab-ի տեղադրում և կարգավորում ^

Յուպիտերի լաբորատորիա Python հավելված է, ուստի նախ պետք է տեղադրենք այս թարգմանիչը: Նաև, Յուպիտերի լաբորատորիա մենք կտեղադրենք Python փաթեթների կառավարչի միջոցով pip, և ոչ թե համակարգային, քանի որ այն կարող է հնացած լինել համակարգի պահոցում և, հետևաբար, մենք պետք է ձեռքով լուծենք դրա կախվածությունները՝ տեղադրելով հետևյալ փաթեթները. python3 python3-dev gcc libc-dev zeromq-dev:

lxc exec jupyterlab -- apk add python3 python3-dev gcc libc-dev zeromq-dev

Եկեք թարմացնենք python մոդուլները և փաթեթների կառավարիչը pip ընթացիկ տարբերակին.

lxc exec jupyterlab -- python3 -m pip install --upgrade pip setuptools wheel

Նախադրել Յուպիտերի լաբորատորիա փաթեթի կառավարչի միջոցով pip:

lxc exec jupyterlab -- python3 -m pip install jupyterlab

Քանի որ ընդարձակման մեջ Յուպիտերի լաբորատորիա փորձնական են և պաշտոնապես չեն առաքվում jupyterlab փաթեթի հետ, ուստի մենք պետք է այն տեղադրենք և կարգավորենք ձեռքով:

Եկեք տեղադրենք NodeJS-ը և դրա համար փաթեթի կառավարիչը՝ NPM, քանի որ Յուպիտերի լաբորատորիա օգտագործում է դրանք իր ընդարձակման համար.

lxc exec jupyterlab -- apk add nodejs npm

Ընդլայնումների համար Յուպիտերի լաբորատորիա որոնք մենք կտեղադրենք աշխատեց, դրանք պետք է տեղադրվեն օգտվողի գրացուցակում, քանի որ հավելվածը կգործարկվի օգտատերից jupyter. Խնդիրն այն է, որ գործարկման հրամանում չկա որևէ պարամետր, որը կարող է փոխանցվել գրացուցակին, հավելվածն ընդունում է միայն շրջակա միջավայրի փոփոխական, հետևաբար մենք պետք է սահմանենք այն: Դա անելու համար մենք կգրենք փոփոխական արտահանման հրամանը JUPYTERLAB_DIR օգտագործողի միջավայրում jupyter, ներկայացնել .bashrcորն իրականացվում է ամեն անգամ, երբ օգտվողը մուտք է գործում.

lxc exec jupyterlab -- su -l jupyter -c "echo -e "nexport JUPYTERLAB_DIR=$HOME/.local/share/jupyter/lab" >> .bashrc"

Հաջորդ հրամանը կտեղադրի հատուկ ընդլայնում - ընդլայնման կառավարիչ Յուպիտերի լաբորատորիա:

lxc exec jupyterlab -- su -l jupyter -c "export JUPYTERLAB_DIR=$HOME/.local/share/jupyter/lab; jupyter labextension install --no-build @jupyter-widgets/jupyterlab-manager"

Այժմ ամեն ինչ պատրաստ է առաջին գործարկման համար Յուպիտերի լաբորատորիա, բայց մենք դեռ կարող ենք տեղադրել մի քանի օգտակար ընդլայնումներ.

  • toc — Բովանդակության աղյուսակ, ստեղծում է հոդվածի/նոթատետրի վերնագրերի ցանկը
  • jupyterlab-horizon-theme - UI թեմա
  • jupyterlab_neon_theme - UI թեմա
  • jupyterlab-ubu-theme - Ուրիշ մեկը թեման հեղինակից այս հոդվածը :) Բայց այս դեպքում կցուցադրվի տեղադրումը GitHub պահոցից

Այսպիսով, այս ընդարձակումները տեղադրելու համար հաջորդաբար գործարկեք հետևյալ հրամանները.

lxc exec jupyterlab -- su -l jupyter -c "export JUPYTERLAB_DIR=$HOME/.local/share/jupyter/lab; jupyter labextension install --no-build @jupyterlab/toc @mohirio/jupyterlab-horizon-theme @yeebc/jupyterlab_neon_theme"
lxc exec jupyterlab -- su -l jupyter -c "wget -c https://github.com/microcoder/jupyterlab-ubu-theme/archive/master.zip"
lxc exec jupyterlab -- su -l jupyter -c "unzip -q master.zip && rm master.zip"
lxc exec jupyterlab -- su -l jupyter -c "export JUPYTERLAB_DIR=$HOME/.local/share/jupyter/lab; jupyter labextension install --no-build jupyterlab-ubu-theme-master"
lxc exec jupyterlab -- su -l jupyter -c "rm -r jupyterlab-ubu-theme-master"

Ընդլայնումները տեղադրելուց հետո մենք պետք է դրանք կազմենք, քանի որ նախկինում տեղադրման ժամանակ մենք նշել էինք բանալին --no-build ժամանակ խնայելու համար։ Այժմ մենք զգալիորեն կարագացնենք դրանք մեկ քայլով միասին կազմելով.

lxc exec jupyterlab -- su -l jupyter -c "export JUPYTERLAB_DIR=$HOME/.local/share/jupyter/lab; jupyter lab build"

Այժմ գործարկեք հետևյալ երկու հրամանները՝ այն առաջին անգամ գործարկելու համար Յուպիտերի լաբորատորիա. Այն հնարավոր կլիներ գործարկել մեկ հրամանով, բայց այս դեպքում գործարկման հրամանը, որը դժվար է հիշել ձեր մտքում, կհիշվի bash-ով կոնտեյների մեջ, և ոչ թե հյուրընկալողի վրա, որտեղ արդեն բավականաչափ հրամաններ կան: դրանք պատմության մեջ գրանցելու համար :)

Մուտք գործեք կոնտեյներ որպես օգտվող jupyter:

lxc exec jupyterlab -- su -l jupyter

Հաջորդը, վազեք Յուպիտերի լաբորատորիա ստեղներով և պարամետրերով, ինչպես նշված է.

[jupyter@jupyterlab ~]$ jupyter lab --ip=0.0.0.0 --no-browser

Գնացեք ձեր վեբ բրաուզերի հասցեին http://10.0.5.5:8888 և բացվող էջում մուտքագրեք կտրոն մուտք, որը դուք կտեսնեք վահանակում: Պատճենեք և տեղադրեք այն էջում, ապա սեղմեք Մուտք. Մուտք գործելուց հետո անցեք ձախ կողմում գտնվող ընդլայնումների ընտրացանկը, ինչպես ցույց է տրված ստորև նկարում, որտեղ ձեզ կառաջարկվի, երբ ակտիվացնելով ընդլայնման կառավարիչը, անվտանգության ռիսկեր կատարել՝ տեղադրելով ընդլայնումներ երրորդ կողմերից, որոնց համար հրամանը. JupyterLab-ի մշակում պատասխանատու չէ.

Յուպիթերի արձակում LXD ուղեծիր

Այնուամենայնիվ, մենք մեկուսացնում ենք ամբողջը Յուպիտերի լաբորատորիա և տեղադրեք այն կոնտեյների մեջ, որպեսզի երրորդ կողմի ընդլայնումները, որոնք պահանջում և օգտագործում են NodeJS, չկարողանան գոնե գողանալ սկավառակի այլ տվյալներ, բացի նրանցից, որոնք մենք բացում ենք կոնտեյների ներսում: Ստացեք ձեր անձնական փաստաթղթերը հյուրընկալողի վրա /home բեռնարկղից ստացվող գործընթացները դժվար թե հաջողության հասնեն, և եթե հաջողվի, ապա դուք պետք է արտոնություններ ունենաք հյուրընկալող համակարգի ֆայլերի վրա, քանի որ մենք գործարկում ենք կոնտեյները ոչ արտոնյալ ռեժիմ. Այս տեղեկատվության հիման վրա դուք կարող եք գնահատել ընդլայնումները ներառելու ռիսկը Յուպիտերի լաբորատորիա.

Ստեղծել է IPython նոթատետրեր (էջեր Յուպիտերի լաբորատորիա) այժմ կստեղծվի օգտագործողի գլխավոր գրացուցակում - /home/jupyter, բայց մեր ծրագրերն են բաժանել տվյալները (կիսումը) հյուրընկալողի և կոնտեյների միջև, այնպես որ վերադարձեք վահանակ և դադարեցրեք Յուպիտերի լաբորատորիա գործարկելով թեժ ստեղնը - CTRL+C և պատասխանելով y խնդրանքով։ Այնուհետև դադարեցրեք օգտվողի ինտերակտիվ նիստը jupyter ավարտելով թեժ ստեղնը CTRL+D.

Տվյալների փոխանակում հյուրընկալողի հետ ^

Տվյալները հյուրընկալողի հետ կիսելու համար դուք պետք է կոնտեյներով ստեղծեք սարք, որը թույլ է տալիս դա անել, և դա անելու համար գործարկեք հետևյալ հրամանը, որտեղ մենք նշում ենք հետևյալ ստեղները.

  • lxc config device add — Հրամանը ավելացնում է սարքի կոնֆիգուրացիան
  • jupyter — կոնտեյների ID, որին ավելացվել է կոնֆիգուրացիան
  • hostfs - Սարքի ID: Դուք կարող եք սահմանել ցանկացած անուն:
  • disk — Նշված է սարքի տեսակը
  • path — Նշում է կոնտեյների ուղին, որին LXD-ը կտեղադրի այս սարքը
  • source — Նշեք սկզբնաղբյուրը, հոսթի տեղեկատուի ուղին, որը ցանկանում եք համօգտագործել կոնտեյների հետ: Նշեք ուղին ըստ ձեր նախասիրությունների
lxc config device add jupyterlab hostfs disk path=/mnt/hostfs source=/home/dv/projects/ipython-notebooks

Կատալոգի համար /home/dv/projects/ipython-notebooks թույլտվությունը պետք է սահմանվի կոնտեյների օգտագործողի համար, ով ներկայումս ունի UID հավասար SubUID + UID, տես գլուխը Անվտանգություն. Բեռնարկղերի արտոնություններ հոդվածում LXD - Linux կոնտեյներային համակարգերի հիմնական առանձնահատկությունները.

Սահմանեք թույլտվությունը հոսթի վրա, որտեղ սեփականատերը կլինի կոնտեյների օգտագործողը jupyter, և փոփոխականը $USER որպես խումբ կնշանակի ձեր հյուրընկալող օգտվողին՝

sudo chown 1001000:$USER /home/dv/projects/ipython-notebooks

Բարեւ աշխարհ! ^

Եթե ​​դեռևս բաց է կոնսոլի նիստը կոնտեյներով Յուպիտերի լաբորատորիա, ապա վերագործարկեք այն նոր բանալիով --notebook-dir արժեքը սահմանելով /mnt/hostfs որպես ուղի դեպի նոթբուքների արմատը կոնտեյներով սարքի համար, որը մենք ստեղծել ենք նախորդ քայլում.

jupyter lab --ip=0.0.0.0 --no-browser --notebook-dir=/mnt/hostfs

Այնուհետև անցեք էջ http://10.0.5.5:8888 և ստեղծեք ձեր առաջին նոութբուքը՝ սեղմելով էջի կոճակը, ինչպես ցույց է տրված ստորև նկարում:

Յուպիթերի արձակում LXD ուղեծիր

Այնուհետև էջի դաշտում մուտքագրեք Python կոդը, որը կցուցադրի դասականը Hello World!. Երբ ավարտեք մուտքը, սեղմեք CTRL+ENTER կամ վերևի գործիքագոտու «խաղալ» կոճակը, որպեսզի JupyterLab-ն անի սա.

Յուպիթերի արձակում LXD ուղեծիր

Այս պահին գրեթե ամեն ինչ պատրաստ է օգտագործման համար, բայց անհետաքրքիր կլինի, եթե մենք չտեղադրենք Python լրացուցիչ մոդուլներ (լիարժեք հավելվածներ), որոնք կարող են զգալիորեն ընդլայնել Python-ի ստանդարտ հնարավորությունները: Յուպիտերի լաբորատորիա, ուրեմն, անցնենք առաջ :)

Հ.Գ Հետաքրքիրն այն է, որ հին իրականացումը Յուպիտեր ծածկագրի անվան տակ Jupyter Notebook չի հեռացել և գոյություն ունի դրան զուգահեռ Յուպիտերի լաբորատորիա. Հին տարբերակին անցնելու համար հետևեք հասցեում վերջածանց ավելացնելով հղմանը/tree, իսկ նոր տարբերակին անցումը կատարվում է վերջածանցով /lab, բայց պետք չէ նշել.

Python-ի հնարավորությունների ընդլայնում ^

Այս բաժնում մենք կտեղադրենք Python լեզվի այնպիսի հզոր մոդուլներ, ինչպիսիք են NumPy- ն, Պանդա, Մատպլոտլիբ, IPyWidgets որի արդյունքները ինտեգրված են նոութբուքերի մեջ Յուպիտերի լաբորատորիա.

Նախքան փաթեթների կառավարչի միջոցով թվարկված Python մոդուլները տեղադրելը pip մենք նախ պետք է լուծենք համակարգի կախվածությունները Alpine Linux-ում.

  • g++ — Անհրաժեշտ է մոդուլներ կազմելու համար, քանի որ դրանցից մի քանիսը ներդրված են լեզվով C ++ և գործարկման ժամանակ միացեք Python-ին որպես երկուական մոդուլ
  • freetype-dev - կախվածություն Python մոդուլի համար Մատպլոտլիբ

Կախվածությունների տեղադրում.

lxc exec jupyterlab -- apk add g++ freetype-dev

Կա մեկ խնդիր. Alpine Linux բաշխման ներկա վիճակում հնարավոր չի լինի կազմել NumPy-ի նոր տարբերակը, կհայտնվի կոմպիլյացիայի սխալ, որը ես չկարողացա լուծել.

ՀԱՂՈՐԴԱԳՐՈՒԹՅՈՒՆ ՍԽԱԼԻ ՄԱՍԻՆՉհաջողվեց կառուցել անիվներ անիվների համար, որոնք օգտագործում են PEP 517 և չեն կարող ուղղակիորեն տեղադրվել

Հետևաբար, մենք կտեղադրենք այս մոդուլը որպես համակարգային փաթեթ, որը բաշխում է արդեն կազմված տարբերակը, բայց մի փոքր ավելի հին, քան ներկայումս հասանելի է կայքում.

lxc exec jupyterlab -- apk add py3-numpy py3-numpy-dev

Հաջորդը, տեղադրեք Python մոդուլները փաթեթների կառավարչի միջոցով pip. Խնդրում ենք համբերատար լինել, քանի որ որոշ մոդուլներ կկազմվեն և կարող են տևել մի քանի րոպե: Իմ մեքենայի վրա հավաքումը տևեց ~15 րոպե.

lxc exec jupyterlab -- python3 -m pip install pandas ipywidgets matplotlib

Տեղադրման քեշերի մաքրում.

lxc exec jupyterlab -- rm -rf /home/*/.cache/pip/*
lxc exec jupyterlab -- rm -rf /root/.cache/pip/*

Փորձարկման մոդուլներ JupyterLab-ում ^

Եթե ​​դուք վազում եք Յուպիտերի լաբորատորիա, վերագործարկեք այն, որպեսզի նոր տեղադրված մոդուլներն ակտիվանան։ Դա անելու համար վահանակի նիստում սեղմեք CTRL+C որտեղ դուք այն աշխատում եք և մտեք y դադարեցնել հարցումը և այնուհետև նորից սկսել Յուպիտերի լաբորատորիա սեղմելով ստեղնաշարի վերև սլաքը, որպեսզի նորից չմտնեք հրամանը և հետո Enter սկսելու համար.

jupyter lab --ip=0.0.0.0 --no-browser --notebook-dir=/mnt/hostfs

Գնացեք էջ http://10.0.5.5:8888/lab կամ թարմացրեք էջը ձեր բրաուզերում, այնուհետև մուտքագրեք հետևյալ կոդը նոր նոթատետրի բջիջում.

%matplotlib inline

from ipywidgets import interactive
import matplotlib.pyplot as plt
import numpy as np

def f(m, b):
    plt.figure(2)
    x = np.linspace(-10, 10, num=1000)
    plt.plot(x, m * x + b)
    plt.ylim(-5, 5)
    plt.show()

interactive_plot = interactive(f, m=(-2.0, 2.0), b=(-3, 3, 0.5))
output = interactive_plot.children[-1]
output.layout.height = '350px'
interactive_plot

Դուք պետք է ստանաք այնպիսի արդյունք, ինչպիսին ստորև նկարում, որտեղ IPyWidgets էջի վրա ստեղծում է UI տարր, որը ինտերակտիվ կերպով փոխազդում է աղբյուրի կոդի հետ, ինչպես նաև Մատպլոտլիբ ցուցադրում է կոդի արդյունքը նկարի տեսքով որպես ֆունկցիայի գրաֆիկ.

Յուպիթերի արձակում LXD ուղեծիր

Շատ օրինակներ IPyWidgets դուք կարող եք գտնել այն ձեռնարկներում այստեղ

Էլ ինչ? ^

Լավ արեցիք, եթե մնաք և հասաք հոդվածի ամենավերջին: Հոդվածի վերջում ես միտումնավոր չէի տեղադրել պատրաստի սցենար, որը կտեղադրեր Յուպիտերի լաբորատորիա «մեկ սեղմումով»՝ աշխատողներին խրախուսելու համար :) Բայց դուք կարող եք դա անել ինքներդ, քանի որ դուք արդեն գիտեք, թե ինչպես՝ հրամանները հավաքելով մեկ Bash սցենարի մեջ :)

Դուք կարող եք նաեւ:

  • Սահմանեք կոնտեյների ցանցի անուն IP հասցեի փոխարեն՝ գրելով այն պարզ ձևով /etc/hosts և մուտքագրեք հասցեն բրաուզերում http://jupyter.local:8888
  • Խաղացեք կոնտեյների համար նախատեսված ռեսուրսների սահմանաչափով, դրա համար կարդացեք գլուխը LXD-ի հիմնական հնարավորությունները կամ ստացեք լրացուցիչ տեղեկություններ LXD մշակողների կայքում:
  • Փոխել թեման.

Յուպիթերի արձակում LXD ուղեծիր

Եվ շատ ավելին, որ դուք կարող եք անել: Այսքանը: Ձեզ հաջողություն եմ ցանկանում!

ԹԱՐՄԱՑՈՒՄ. 15.04.2020/18/30 XNUMX:XNUMX - «Բարև, աշխարհ» գլխի սխալները ուղղվեցին:
ԹԱՐՄԱՑՈՒՄ՝ 16.04.2020/10/00 XNUMX:XNUMX — Ընդլայնման կառավարչի ակտիվացման նկարագրության մեջ ուղղվել և ավելացվել է տեքստ Յուպիտերի լաբորատորիա
ԹԱՐՄԱՑՈՒՄ՝ 16.04.2020/10/40 XNUMX:XNUMX — Ուղղվել են տեքստում հայտնաբերված սխալները և մի փոքր փոխվել դեպի լավը «Հիմնական ծրագրաշարի տեղադրում և համակարգի կարգավորում» գլուխը

Source: www.habr.com

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