Ուղարկում ենք Jupyter-ը LXD-իorbital

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

Ինչպե՞ս է, եթե դուք պետք է փորձարկեք կամ գործարկեք մի ամբողջ կլաստեր տարբեր մանր ծառայությունների մեկ մեքենայի վրա? Hundreds or even thousands?

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

Այդ ժամանակ, երբ ընդհանուր առմամբ պարզ էր, թե ինչպիսին են LXD կոնտեյները, եկեք շարունակենք և մտածենք, թե ինչ կլինի, եթե լինի մի կոմբինացված հարթակ, որտեղ կարող ենք անվտանգ գործարկել հ միշտ եղանակներ, գեներացնել գրաֆիկներ, դինամիկ կերպով (ինքնուրույն) կապված UI-վիդջեթները ձեր կոդի հետ, լրացնել կոդը տեքստով դրամական παιχνիվով... ձևակերպմամբ: Ինչ-որ բան նախատեսված է ինտերակտիվ բլոգի պես: Ուաու... Մուզ եմ! Մուզ եմ! 🙂

Գնացեք, որտեղ մենք կմատակարարենք իր մեջ JupyterLab հաջորդ սերունդը օգտագործողի ինտերֆեյսի փոխարեն հնացած Jupyter Notebook, և նաև կտեղադրենք Python մոդուլներ, ինչպիսիք են NumPy, Pandas, Matplotlib, IPyWidgets որոնք թույլ կտան կատարել բոլորը նշված above և պահպանել դա հատուկ ֆայլում՝ IPython-notebook-ին:

Ուղարկում ենք Jupyter-ը LXD-իorbital

Բարձրության պլան ^

Ուղարկում ենք Jupyter-ը LXD-իorbital

Պատրաստենք համառոտ գործողությունների ծրագիր, որպեսզի մեզ ավելի հեշտ լինի իրագործել վերևում նշված սխեման:

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

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

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

Ստեղծում ենք կոնտեյները՝ հրամանների միջոցով, որտեղ ցույց ենք տալիս պատկերը՝ alpine3, կոնտեյների համար նույնականագիր՝ jupyterlab և անհրաժեշտության դեպքում կոնֆիգուրացիայի պրոֆիլի։

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

Ա aquí կիրառել եմ կոնֆիգուրացիայի պրոֆիլը՝ hddroot որն ուказывает создать контейнер с root-разделом в Storage Pool պետական 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 որը ցույց է տալիս՝ որոնք հետolumns կցուցադրենք էկրանին։

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

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

Մենք փոխելու ենք այս IP հասցեն դեպի ավելի հիշվող, ստեղծելով ցանցային ինտերֆեյս կոնտեյների մակարդակում, ոչ թե կոնֆիգուրացիայի պրոֆիլի մակարդակում, ինչպես դա մինչ այժմ ներկա կոնֆիգուրացիայում է։ Դա հարկադիր չէ անել, կարող եք пропустить это։

Ստեղծում ենք ցանցային ինտերֆեյսը՝ eth0 որը կապվում է_switch-бա (ցանցային կամուրջի) հետ՝ 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      |
+------------+---------+------------------+--------------+

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

Մեր կոնտեյների ադմինիստրացման համար անհրաժեշտ է տեղադրել հետևյալ ծրագրերը՝

Պեվար
Բառարան

bash
GNU Bourne Again թերթիկը

bash-completion
Տրամաբանական լրացում bash թերթիկի համար

sudo
Certain users-ի հնարավորություն տալ որոշ հրամաններ կատարել որպես root

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

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

nano
Pico-թերթիկի կրկնօրինակի ընդլայնումներով

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

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

Հիմնահարցեր և պարամետրեր, որոնք օգտագործեցինք.

  • lxc — LXD հաճախորդի կանչ
  • exec — LXD հաճախորդի մեթոդ, որը կատարում է հրաման կոնտեյնում
  • jupyterlab — Կոնտեյների գործառնական մարմինը
  • -- — خاص մի բանալի, որը ցույց է տալիս, որ հետևյալ բանալիներն այլևս բանալի չեն և փոխանցում է մնացած տողը փոխանցվածնելով ինչպես կա կոնտեյնում lxc apk
  • — Ալպայնի Լինուքս դիստրիբուտիվի փաթեթային մենեջերը add
  • — Փաթեթային մենեջերի մեթոդ, որը տեղադրում է հրամանների հետևում նշված փաթեթները Հայտնություն. համակարգում տեղադրենք ժամանակային գոտին

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

Ժամանակային գոտու տեղադրումից հետո փաթեթը

համակարգում այլևս պետք չէ, այն տեղ կզբաղեցնի, հետևաբար, ջնջենք այն: tzdata lxc exec jupyterlab -- apk del tzdata

Ստուգենք ժամանակային գոտին.

lxc exec jupyterlab -- dateWed Apr 15 10:49:56 MSK 2020

Բաշ-ի նոր օգտվողների համար կարգավորելու համար շատ ժամանակ չծախսելու համար, հաջորդ գործողություններով, կպահպանենք հյուրընկալ համակարգից արդեն պատրաստված skel-ֆայլերը: Սա կօգնի գեղեցկացնելու Բաշ-ը կոնտեյնում ինտերակտիվ ռեժիմում։ Ինձ մոտ հյուրընկալ համակարգում՝ Manjaro Linux-ի սկղեմաները հիմնականում համապատասխանում են Ալպայնի Լինուքսում և խիստ խնդիրներ չեն առաջացնում, սակայն դուք կարող եք ունենալ այլ դիստրիբուտիվ, և պետք է ինքնուրույն հասկանալ կոնտեյնում Բաշ-ի գործարկման սխալների դեպքում։

Պահպանենք skel-ֆայլերը կոնտեյնում: Կлючը /etc/skel/.bash_profile, /etc/skel/.bashrc, /etc/skel/.dir_colors --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 Հ ήδη առկա root-օգտվողի համար կհասցնենք միայն թե մեծադիր ֆայլերը.

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

Ալպայնի Լինուքսում օգտվողների համար նախատեսվածի համար գործում է համակարգի պարբերավել.

Մենք կփոխենք այն

օգտվողին Բաշ-ի վրա: /bin/shlxc exec jupyterlab -- usermod --shell=/bin/bash root 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 JupyterLab:

Ստեղծենք և տեղադրենք գաղտնաբառ.

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, իսկ երկրորդը կավելացնի օգտվողը որը հետո կկարգավորենք:

lxc exec jupyterlab -- groupadd --system sudo
lxc exec jupyterlab -- groupmems --group sudo --add 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-ի տեղադրում և կարգավորում ^

JupyterLab — սա Python ծրագիր է, այնպես որ պետք է նախ տեղադրենք այս մեկնարկիչը: Բացի այդ, JupyterLab մենք կհամաձայնեցնենք 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

տեղադրում ենք JupyterLab փաթեթի կառավարիչով pip:

lxc exec jupyterlab -- python3 -m pip install jupyterlab

Երկի ավարտմամբ JupyterLab են փորձարկվող և պաշտոնապես չեն տրամադրվում միասին jupyterlab փաթեթի հետ, այդ պատճառով, մենք պետք է դրանք տեղադրենք և կարգավորենք ձեռքով:

Կտեղադրենք NodeJS և դրա համար փաթեթների կառավարիչ՝ NPM, քանի որ JupyterLab օգտագործում է դրանք իր լայնությունների համար:

lxc exec jupyterlab -- apk add nodejs npm

Միայն անհրաժեշտ երկարությունները համար JupyterLab որոնք մենք տեղադրելու ենք աշխատելու, դրանք պետք է տեղադրվեն օգտվողի հեղինակության տակ, քանի որ ծրագիրը կաշխատի օգտվողի անունից որը հետո կկարգավորենք. Խնդիրը այն է, որ տեղի չի ունենում մեկնարկի հրամանի մեջ, որի առջև կարող ենք փոխանցել կատալոգ, ծրագիրը վերլուծում է միայն ենթադրության փոփոխական և հետևաբար, մենք պետք է դրանք սահմանենք: Այդ համար, մենք կգրենք փոփոխականի արտահանդեսի հրամանը JUPYTERLAB_DIR օգտվողի միջավայրում որը հետո կկարգավորենք, ֆայլում .bashrc, որը կատարվում է ամեն անգամ օգտվողը մտնում է համակարգ:

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

Հաջորդ հարցը կտանք հատուկ լրացումը — լրացման կառավարիչը JupyterLab:

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

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

  • 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"

Այժմ կատարեք հետևյալ երկու հրամանները առաջին գործարկման համար JupyterLabԿարող էր միայն մեկ հրամանով գործարկել, սակայն այս դեպքում գործարկման հրամանը, որը մտքում պետք է պահել, կպահպանվի bash-ում կոնտեյնում, այլ ոչ թե հյուրընկալում, որտեղ այնպես էլ կա՝ բավական տնտեսական անցկացնելու համար 🙂

Մուտք ենք գործում կոնտեյնում որպես օգտվող որը հետո կկարգավորենք:

lxc exec jupyterlab -- su -l jupyter

Այժմ իրականացրեք JupyterLab նշված բանալիներով և պարամետրերով.

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

Դիմեք խելացի բրաուզերում հասցեով http://10.0.5.5:8888 և բացված էջում մուտքագրեք token մուտքի, որը դուք կհանդիպեք կոնսոլում։ Նկեղծեք այն և տեղադրեք էջում, հետո սեղմեք Մուտք. Մուտք գործելուց հետո, անցեք ձախ կողմի հավելումների մենյու, ինչպես ներկայացված է ստորև նկարում, որտեղ ձեզ առաջարկեն, երբ ակտիվացվի հավելումների կառավարիչը, ընդունել անվտանգության ռիսկեր ` տեղադրելով երրորդ կողմի հավելումներ, որոնց համար թիմը JupyterLab development պատասխանատվություն չի կրում:

Ուղարկում ենք Jupyter-ը LXD-իorbital

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

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

Տվյալները խնամում ենք հյուրը. ^

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

  • lxc config device add — Ահա հրամանը ավելացնում է սարքի կոնֆիգուրացիան
  • որը հետո կկարգավորենք — Կոնտեյների ինդետը, որի մեջ ավելացվում է կոնֆիգուրացիան
  • hostfs — Սարքի դրամաշնորհը։ Կարող եք նշանակել ցանկացած անուն:
  • disk — Նշվում է սարքի տեսակը
  • path — Հիշե՛ք, որ նշվում է կոնտեյների ճանապարհը, որտեղ LXD-ը Mount-ել է այս սարքը
  • 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-ի կոնտեյներային համակարգերի.

Սահմանում ենք իրավունքը հոստում, որտեղ սեփականատերը կլինի կոնտեյների օգտվողը որը հետո կկարգավորենք, իսկ փոփոխականը $USER ներառում է ձեր հոստի օգտվողին որպես խումբ:

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

Բարև, աշխարհ! ^

Եթե դեռ բաց է ձեր կոնսոլային սեսիան կոնտեյնում, JupyterLab, ապա նորից մեկնարկեք այն նորjučխչալով --notebook-dir փոխադարձ արժեքը սահմանելու համար /mnt/hostfs կոնտեյնում ստեղծված սարքի համար, որը մենք ստեղծեցինք նախորդ քայլում:

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

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

Ուղարկում ենք Jupyter-ը LXD-իorbital

Հետո կա մի տեղ, որտեղ էջում մասնակցեք Python լեզվի կոդին, որը կհայտնի դասական Hello World!. Կոդը ավարտելուց հետո нажмите CTRL+ENTER դուք ինչպես ձեր վերևի գործիքային հղման վրա `խաղալ` կոճակով, որպեսզի JupyterLab-ն իրականացնի դա:

Ուղարկում ենք Jupyter-ը LXD-իorbital

Այս պահին, մենք հետագայում շարունակում ենք, բայց անհետաքրքիր կլինի, եթե այլ Python մոդուլներ (լրիվ հավելվածներ) չի տեղադրվի որոողվել բոլորիս ստանդարտ հնարավորություններն ըստ JupyterLab, ուստի, շարժվում ենք առաջ 🙂

P.S. Ինտերեսի գը, որ հինը իրականացումը Jupyter նվիրակել է Jupyter Notebook չի վերացել և այն գոյություն ունի զուգահեռ JupyterLab. Ես նոր տարբերակին փոխանցվելու համար ոճից շեշտում հասնում են հղումը, որը ավելացնեմ հասցեին զուգահեռ/tree, իսկ նոր տարբերակին փոխանցումը կարելի է առանց ընդգրգել: /labJupyter Notebook —

  • Jupyter Lab — http://10.0.5.5:8888/tree
  • Այս բաժնում մենք կհաստատեինք այնպիսի ուժեղ Python մոդուլներ, որոնք արդյունքները ինտեգրվում են նոթիս http://10.0.5.5:8888/lab

Լայնացնում ենք Python-ի հնարավորությունները ^

ոշակի մտքեր NumPy, Pandas, Matplotlib, IPyWidgets Մինչ մենք հաստատում ենք Python-յան նշված մոդուլները փաթեթի կառավարիչը JupyterLab.

Մենք նախ պետք է թույլ տալ համակարգային կախվածությունները Alpine Linux-ում: pip g++

  • Նպատակ է ունենալ մոդուլների կոմպիլացումը, քանի որ դրանց որոշները իրականացվում են լեզվով C++ և միանում են Python-ի հետ զուգահեռ որպես բինար մոդուլներ freetype-dev
  • — Python մոդուլի կախվածություն Թողնենք կախվածությունները: Matplotlib

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

Հաջողությամբ մեկ խնդիր գրվում, Alpine Linux-ի ընթացիկ վիճակում նոր NumPy տարբերակը կոմպիլացնել չի լինի, ուրվագիծ թողնելու կոտրվածություն, որը իման պաշտոնապես չեմ կարողացել լուծել:

ERROR

: NumPy-ի համար պարադահատանյութ կարող չեն ստեղծվել, որը օգտագործում է PEP 517 և ենթադրվում չի որդեգրվել դեպիԱյդ պատճառով այս մոդուլը մենք կհավատացնենք որպես համակարգային փաթեթ, որը տարածում է արդեն կոմպիլացված տարբերակը, բայց քիչ հին, քան հասանելի է այսօր կայքում:

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

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-ում ^

Եթե ձեզ մոտ աշխատում է JupyterLab, ստուգեք այն, որ նոր տեղադրված մոդուլները ակտիվացվեն։ Տեղի համար, կոնսոլային նստաշրջանում սեղմեք CTRL+C որտեղ այն աշխատում է և մտեք y դադարեցնելու խնդրանքին, ապա վերսկսեք JupyterLab սեղմելով «վերը» ստեղնաշարում, որպեսզի նորից չմտեք հրաման և հետո 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 տարրի էջում, որը ինտերակտիվորեն interacts with the source code, as well as Matplotlib արտահանում է կոդի արդյունքը որպես նկար, որպես ֆունկցիայի գրաֆիկ:

Ուղարկում ենք Jupyter-ը LXD-իorbital

Բազում օրինակներ IPyWidgets կարող եք գտնել ուսուցանումներում այստեղ

Ինչ էլ որ? ^

Դուք լավ եք, եթե տեւեցիք և հասկացաք միությունները։ Ես հատուկ վերջի տեքստում չհրապարակեցի պատրաստի սցենարը, որն արված կլիներ JupyterLab «մեկ կտկոցով», որպեսզի խրախուսեմ աշխատավորներին 🙂 Բայց դուք կարող եք դա անել ինքներդ, քանի որ արդեն գիտեք ինչպես, հավաքելով հրամանները մեկական Bash սցենարում 🙂

Իզուր, դուք կարող եք:

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

Ուղարկում ենք Jupyter-ը LXD-իorbital

Եվ շատ ուրիշ բաներ դուք կարող եք անել! Այսքանն է։ Հաջողություն եմ մաղթում ձեզ!

ԱՎՅՈՒՐ: 15.04.2020 18:30 — Արդյունորհված եմ «Hello, World!» գլուխում սխալները
ԱՎՅՈՒՐ: 16.04.2020 10:00 — Կորոնտավորել եմ և ավելացրել տեքստ «ամպային մենեջերի» ակտիվացման մեջ JupyterLab
ԱՎՅՈՒՐ: 16.04.2020 10:40 — Սխալները, որ կգտնեցի թողնել եմ և մի քիչ փոխել «Վերաբանում հիմնական ծրագրերի և համակարգի կարգաբերման» գլուխը երկուսով

Ընտանիք: habr.com

Գնել հուսալի հյուրընկալում DDoS պաշտպանությամբ, VPS VDS սերվերներով 🔥 Գնել հուսալի հյուրընկալում DDoS պաշտպանությամբ, VPS VDS սերվերներով | ProHoster