Դուք երբևէ փորձե՞լ եք կոդով կամ համակարգի գործիքներով աշխատել 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-ին:

Նավարկություն
- Բարձրության պլան
- Հիմնական համակարգի տեղադրում և կարգավորում
- Հիմնական սոֆթի տեղադրում և համակարգի կարգավորում
- JupyterLab-ի տեղադրում և կարգավորում
- Տվյալները խնամում ենք հյուրը.
- Բարև, աշխարհ!
- Լայնացնում ենք Python-ի հնարավորությունները
- Տեսնում ենք մոդուլները JupyterLab-ում
- Ինչ էլ որ?
Բարձրության պլան ^

Պատրաստենք համառոտ գործողությունների ծրագիր, որպեսզի մեզ ավելի հեշտ լինի իրագործել վերևում նշված սխեման:
- Վաճառում ենք և գործարկում ենք կոնտեյների վրա հիմնված 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— Կոնտեյների գործառնական մարմինը--— خاص մի բանալի, որը ցույց է տալիս, որ հետևյալ բանալիներն այլևս բանալի չեն և փոխանցում է մնացած տողը փոխանցվածնելով ինչպես կա կոնտեյնումlxcapk— Ալպայնի Լինուքս դիստրիբուտիվի փաթեթային մենեջերը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 պատասխանատվություն չի կրում:

Այնուամենայնիվ, մենք հենց այդ պատճառով ամբողջությամբ մեկուսացնում ենք 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 և ստեղծեք ձեր առաջին նոթը `Էջ` ում կոճակը, ինչպես ցույց է տրված ներքևի պատկերում:

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

Այս պահին, մենք հետագայում շարունակում ենք, բայց անհետաքրքիր կլինի, եթե այլ 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 արտահանում է կոդի արդյունքը որպես նկար, որպես ֆունկցիայի գրաֆիկ:

Բազում օրինակներ IPyWidgets կարող եք գտնել ուսուցանումներում այստեղ
Ինչ էլ որ? ^
Դուք լավ եք, եթե տեւեցիք և հասկացաք միությունները։ Ես հատուկ վերջի տեքստում չհրապարակեցի պատրաստի սցենարը, որն արված կլիներ JupyterLab «մեկ կտկոցով», որպեսզի խրախուսեմ աշխատավորներին 🙂 Բայց դուք կարող եք դա անել ինքներդ, քանի որ արդեն գիտեք ինչպես, հավաքելով հրամանները մեկական Bash սցենարում 🙂
Իզուր, դուք կարող եք:
- Բարանեք՝ ցանցային անուն լծակին, փոխարենը IP հասցեի պարզմամբ
/etc/hostsև բրաուզերում գրել հասցեն http://jupyter.local:8888 - Խաղալ ռեսուրսների սահմանափակման հետ լծակի համար, դրա համար կարդացեք գլուխը LXD-ի հիմնական հնարավորությունների մասին կամ ստացեք ավելին՝ LXD մշակողների կայքում:
- Փոփոխել թեմատիկական դիզայնը:

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