Երբևէ ստիպված եղե՞լ եք փորձարկել կոդով կամ համակարգային կոմունալ ծառայությունները Linux-ում՝ առանց անհանգստանալու հիմքում ընկած համակարգի մասին և քանդելու ամեն ինչ՝ կոդի մեջ սխալի դեպքում, որը պետք է գործարկի արմատային արտոնություններով:
Բայց ի՞նչ կասեք այն փաստի մասին, որ, ենթադրենք, պետք է փորձարկել կամ գործարկել տարբեր միկրոծառայությունների մի ամբողջ կլաստեր մեկ մեքենայի վրա: Հարյուր կամ նույնիսկ հազար.
Հիպերվիզորի կողմից կառավարվող վիրտուալ մեքենաներով նման խնդիրները կարող են և կլուծվեն, բայց ինչ գնով: Օրինակ, LXD-ի կոնտեյները, որը հիմնված է Alpine Linux բաշխման վրա, սպառում է միայն 7.60MB
RAM-ը, և որտեղ արմատային միջնորմը զբաղեցնում է գործարկումից հետո 9.5MB
! Ինչպե՞ս է դա քեզ դուր գալիս, Իլոն Մասկ: Խորհուրդ եմ տալիս ստուգել LXD-ի հիմնական հնարավորությունները՝ կոնտեյներային համակարգ Linux-ում
Այն բանից հետո, երբ ընդհանուր առմամբ պարզ դարձավ, թե ինչ են LXD կոնտեյներները, եկեք ավելի հեռու գնանք և մտածենք, ինչ կլիներ, եթե լիներ նման հավաքիչ հարթակ, որտեղ դուք կարող եք ապահով կերպով գործարկել կոդ հոսթի համար, ստեղծել գրաֆիկներ, դինամիկ (ինտերակտիվ) կապել UI- վիջեթները ձեր կոդի հետ, լրացնել կոդը տեքստով բլեքջեքով... ֆորմատավորում? Ինչ-որ ինտերակտիվ բլոգ: Վա՜յ... ես ուզում եմ: Ցանկանում եմ 🙂
Նայեք կատվի տակ, որտեղ մենք կգործարկենք կոնտեյներով Յուպիտերի լաբորատորիա - հաջորդ սերնդի օգտագործողի միջերեսը հնացած Jupyter Notebook-ի փոխարեն, և մենք կտեղադրենք նաև Python մոդուլներ, ինչպիսիք են. NumPy- ն, Պանդա, Մատպլոտլիբ, IPyWidgets որը թույլ կտա անել վերը թվարկված ամեն ինչ և պահպանել այդ ամենը հատուկ ֆայլում՝ IPython նոութբուքում:
Նավարկություն
- Ուղեծրային թռիչքի պլան
- Հիմնական համակարգի տեղադրում և կազմաձևում
- Հիմնական ծրագրերի տեղադրում և համակարգի կարգավորում
- JupyterLab-ի տեղադրում և կարգավորում
- Տվյալների փոխանակում հյուրընկալողի հետ
- Բարեւ աշխարհ!
- Python-ի հնարավորությունների ընդլայնում
- Փորձարկման մոդուլներ JupyterLab-ում
- Էլ ինչ?
Ուղեծրային թռիչքի պլան ^
Եկեք ուրվագծենք գործողությունների համառոտ ծրագիր՝ վերը նշված սխեմայի իրականացումը մեզ համար հեշտացնելու համար.
- Եկեք տեղադրենք և գործարկենք կոնտեյներ՝ հիմնված բաշխման հավաքածուի վրա 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-ի մշակում պատասխանատու չէ.
Այնուամենայնիվ, մենք մեկուսացնում ենք ամբողջը Յուպիտերի լաբորատորիա և տեղադրեք այն կոնտեյների մեջ, որպեսզի երրորդ կողմի ընդլայնումները, որոնք պահանջում և օգտագործում են 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 և ստեղծեք ձեր առաջին նոութբուքը՝ սեղմելով էջի կոճակը, ինչպես ցույց է տրված ստորև նկարում:
Այնուհետև էջի դաշտում մուտքագրեք Python կոդը, որը կցուցադրի դասականը Hello World!
. Երբ ավարտեք մուտքը, սեղմեք CTRL+ENTER
կամ վերևի գործիքագոտու «խաղալ» կոճակը, որպեսզի JupyterLab-ն անի սա.
Այս պահին գրեթե ամեն ինչ պատրաստ է օգտագործման համար, բայց անհետաքրքիր կլինի, եթե մենք չտեղադրենք Python լրացուցիչ մոդուլներ (լիարժեք հավելվածներ), որոնք կարող են զգալիորեն ընդլայնել Python-ի ստանդարտ հնարավորությունները: Յուպիտերի լաբորատորիա, ուրեմն, անցնենք առաջ :)
Հ.Գ Հետաքրքիրն այն է, որ հին իրականացումը Յուպիտեր ծածկագրի անվան տակ Jupyter Notebook չի հեռացել և գոյություն ունի դրան զուգահեռ Յուպիտերի լաբորատորիա. Հին տարբերակին անցնելու համար հետևեք հասցեում վերջածանց ավելացնելով հղմանը/tree
, իսկ նոր տարբերակին անցումը կատարվում է վերջածանցով /lab
, բայց պետք չէ նշել.
- Jupyter Notebook - http://10.0.5.5:8888/tree
- Յուպիտերի լաբորատորիա - http://10.0.5.5:8888/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 տարր, որը ինտերակտիվ կերպով փոխազդում է աղբյուրի կոդի հետ, ինչպես նաև Մատպլոտլիբ ցուցադրում է կոդի արդյունքը նկարի տեսքով որպես ֆունկցիայի գրաֆիկ.
Շատ օրինակներ IPyWidgets դուք կարող եք գտնել այն ձեռնարկներում այստեղ
Էլ ինչ? ^
Լավ արեցիք, եթե մնաք և հասաք հոդվածի ամենավերջին: Հոդվածի վերջում ես միտումնավոր չէի տեղադրել պատրաստի սցենար, որը կտեղադրեր Յուպիտերի լաբորատորիա «մեկ սեղմումով»՝ աշխատողներին խրախուսելու համար :) Բայց դուք կարող եք դա անել ինքներդ, քանի որ դուք արդեն գիտեք, թե ինչպես՝ հրամանները հավաքելով մեկ Bash սցենարի մեջ :)
Դուք կարող եք նաեւ:
- Սահմանեք կոնտեյների ցանցի անուն IP հասցեի փոխարեն՝ գրելով այն պարզ ձևով
/etc/hosts
և մուտքագրեք հասցեն բրաուզերում http://jupyter.local:8888 - Խաղացեք կոնտեյների համար նախատեսված ռեսուրսների սահմանաչափով, դրա համար կարդացեք գլուխը 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