Lëshimi i Jupyterit në orbitën LXD

A ju është dashur ndonjëherë të eksperimentoni me kodin ose shërbimet e sistemit në Linux, në mënyrë që të mos shqetësoheni për sistemin bazë dhe të mos prishni gjithçka në rast të një gabimi në kodin që duhet të funksionojë me privilegje root?

Por ç'të themi për faktin që le të themi se duhet të testoni ose ekzekutoni një grup të tërë mikroshërbimesh të ndryshme në një makinë? Njëqind apo edhe një mijë?

Me makinat virtuale të menaxhuara nga një hipervizor, probleme të tilla mund dhe do të zgjidhen, por me çfarë kostoje? Për shembull, një kontejner në LXD i bazuar në shpërndarjen Alpine Linux konsumon vetëm 7.60MB RAM, dhe ku zë ndarja rrënjë pas fillimit 9.5MB! Si ju pëlqen kjo, Elon Musk? Unë rekomandoj të kontrolloni aftësitë themelore të LXD - një sistem kontejnerësh në Linux

Pasi u bë e qartë në përgjithësi se çfarë janë kontejnerët LXD, le të shkojmë më tej dhe të mendojmë, çka nëse do të ekzistonte një platformë e tillë korrëse ku mund të ekzekutonit në mënyrë të sigurt kodin për hostin, të gjeneroni grafikë, të lidhni në mënyrë dinamike (interaktive) miniaplikacionet UI me kodin tuaj, plotëso kodin me tekst me blackjack... formatim? Një lloj blogu interaktiv? Wow... e dua! Dëshironi! 🙂

Shikoni nën mace ku do të lëshojmë në një enë laborator jupyter - gjenerata e ardhshme e ndërfaqes së përdoruesit në vend të Notebook-it të vjetëruar Jupyter, dhe ne gjithashtu do të instalojmë module Python si p.sh. i mprehtë, Pandas, matplotlib, IPyWidgets i cili do t'ju lejojë të bëni gjithçka të listuar më sipër dhe t'i ruani të gjitha në një skedar të veçantë - një laptop IPython.

Lëshimi i Jupyterit në orbitën LXD

Plani i ngritjes orbitale ^

Lëshimi i Jupyterit në orbitën LXD

Le të përshkruajmë një plan të shkurtër veprimi për ta bërë më të lehtë për ne zbatimin e skemës së mësipërme:

  • Le të instalojmë dhe lëshojmë një kontejner bazuar në kompletin e shpërndarjes Linux Alpine. Ne do ta përdorim këtë shpërndarje sepse synon minimalizmin dhe do të instalojë vetëm softuerin më të nevojshëm në të, asgjë e tepërt.
  • Le të shtojmë një disk virtual shtesë në kontejner dhe t'i japim një emër - hostfs dhe montoni atë në sistemin e skedarëve rrënjë. Ky disk do të bëjë të mundur përdorimin e skedarëve në host nga një direktori e caktuar brenda kontejnerit. Kështu, të dhënat tona do të jenë të pavarura nga kontejneri. Nëse kontejneri fshihet, të dhënat do të mbeten në host. Gjithashtu, kjo skemë është e dobishme për ndarjen e të dhënave të njëjta midis shumë kontejnerëve pa përdorur mekanizmat standardë të rrjetit të shpërndarjes së kontejnerëve.
  • Le të instalojmë Bash, sudo, bibliotekat e nevojshme, të shtojmë dhe konfigurojmë një përdorues të sistemit
  • Le të instalojmë Python, module dhe të përpilojmë varësi binare për ta
  • Le të instalojmë dhe lëshojmë laborator jupyter, personalizoni pamjen, instaloni shtesa për të.

Në këtë artikull do të fillojmë me lëshimin e kontejnerit, nuk do të konsiderojmë instalimin dhe konfigurimin e LXD, ju mund t'i gjeni të gjitha këto në një artikull tjetër - Karakteristikat themelore të sistemeve të kontejnerëve LXD - Linux.

Instalimi dhe konfigurimi i sistemit bazë ^

Ne krijojmë një enë me komandën në të cilën specifikojmë imazhin - alpine3, identifikues për kontejnerin - jupyterlab dhe, nëse është e nevojshme, profilet e konfigurimit:

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

Këtu jam duke përdorur një profil konfigurimi hddroot i cili specifikon krijimin e një kontejneri me një ndarje rrënjë në Pishinë magazinimi vendosur në një disk fizik 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

Kjo më jep mundësinë të eksperimentoj me kontejnerë në diskun HDD, duke kursyer burimet e diskut SSD, i cili është gjithashtu i disponueshëm në sistemin tim 🙂 për të cilin kam krijuar një profil të veçantë konfigurimi ssdroot.

Pasi të krijohet kontejneri, ai është në gjendje STOPPED, kështu që duhet ta nisim duke ekzekutuar sistemin init në të:

lxc start jupyterlab

Le të shfaqim një listë të kontejnerëve në LXD duke përdorur çelësin -c që tregon se cilat cshfaqja e kolonave:

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

Gjatë krijimit të kontejnerit, adresa IP u zgjodh rastësisht, pasi ne përdorëm një profil konfigurimi default e cila ishte konfiguruar më parë në artikull Karakteristikat themelore të sistemeve të kontejnerëve LXD - Linux.

Ne do ta ndryshojmë këtë adresë IP në një adresë më të paharrueshme duke krijuar një ndërfaqe rrjeti në nivelin e kontejnerit dhe jo në nivelin e profilit të konfigurimit siç është tani në konfigurimin aktual. Ju nuk keni pse ta bëni këtë, ju mund ta kaloni atë.

Krijimi i një ndërfaqe rrjeti eth0 të cilin e lidhim me çelësin (ura e rrjetit) lxdbr0 në të cilën ne aktivizuam NAT sipas artikullit të mëparshëm dhe kontejneri tani do të ketë qasje në internet, dhe ne gjithashtu caktojmë një adresë IP statike në ndërfaqe - 10.0.5.5:

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

Pas shtimit të një pajisjeje, kontejneri duhet të rindizet:

lxc restart jupyterlab

Kontrollimi i statusit të kontejnerit:

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

Instalimi i softuerit bazë dhe konfigurimi i sistemit ^

Për të administruar kontejnerin tonë, duhet të instaloni softuerin e mëposhtëm:

paketë
Përshkrim

përplas
Predha GNU Bourne Again

bash-përfundim
Përfundim i programueshëm për guaskën bash

sudo
Jepni disa përdoruesve mundësinë për të ekzekutuar disa komanda si rrënjë

hije
Paketa e mjeteve të menaxhimit të fjalëkalimit dhe llogarisë me mbështetje për skedarët hije dhe PAM

tzdata
Burimet për zonën kohore dhe të dhënat e orës së ditës

nano
Klonimi i redaktorit Pico me përmirësime

Për më tepër, ju mund të instaloni mbështetje në faqet e sistemit duke instaluar paketat e mëposhtme − man man-pages mdocml-apropos less

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

Le të shohim komandat dhe çelësat që kemi përdorur:

  • lxc — Telefononi klientin LXD
  • exec - Metoda e klientit LXD që ekzekuton një komandë në kontejner
  • jupyterlab — ID e kontejnerit
  • -- - Një çelës i veçantë që specifikon të mos interpretohen çelësat e mëtejshëm si çelësa për lxc dhe kalojmë pjesën tjetër të vargut siç është në enë
  • apk — Menaxheri i paketave të shpërndarjes Alpine Linux
  • add — Një metodë e menaxherit të paketave që instalon paketat e specifikuara pas komandës

Më pas, ne do të vendosim një zonë kohore në sistem. Europe/Moscow:

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

Pas instalimit të zonës kohore, paketa tzdata nuk nevojitet më në sistem, do të zërë hapësirë, prandaj le ta fshijmë:

lxc exec jupyterlab -- apk del tzdata

Kontrollimi i zonës kohore:

lxc exec jupyterlab -- date

Wed Apr 15 10:49:56 MSK 2020

Për të mos harxhuar shumë kohë duke konfiguruar Bash për përdoruesit e rinj në kontejner, në hapat e mëposhtëm do të kopjojmë skedarët skel të gatshëm nga sistemi pritës në të. Kjo do t'ju lejojë të zbukuroni Bash në një enë në mënyrë interaktive. Sistemi im pritës është Manjaro Linux dhe skedarët që po kopjohen /etc/skel/.bash_profile, /etc/skel/.bashrc, /etc/skel/.dir_colors në parim ato janë të përshtatshme për Alpine Linux dhe nuk shkaktojnë probleme kritike, por mund të keni një shpërndarje të ndryshme dhe duhet të kuptoni në mënyrë të pavarur nëse ka një gabim kur ekzekutoni Bash në kontejner.

Kopjoni skedarët e skelit në kontejner. Celës --create-dirs do të krijojë drejtoritë e nevojshme nëse ato nuk ekzistojnë:

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

Për një përdorues rrënjë ekzistues, kopjoni skedarët skel të sapokopjuar në kontejner në direktorinë kryesore:

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 instalon një guaskë sistemi për përdoruesit /bin/sh, do ta zëvendësojmë me root përdorues në Bash:

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

root përdoruesi nuk ishte pa fjalëkalim, ai duhet të vendosë një fjalëkalim. Komanda e mëposhtme do të gjenerojë dhe vendosë një fjalëkalim të ri të rastësishëm për të, të cilin do ta shihni në ekranin e konsolës pasi të ekzekutohet:

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

Gjithashtu, le të krijojmë një përdorues të ri të sistemit - jupyter për të cilin do të konfigurojmë më vonë laborator jupyter:

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

Le të krijojmë dhe vendosim një fjalëkalim për të:

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

Më pas, ne do të ekzekutojmë dy komanda, e para do të krijojë një grup sistemi sudo, dhe e dyta do të shtojë një përdorues në të jupyter:

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

Le të shohim se në cilat grupe bën pjesë përdoruesi jupyter:

lxc exec jupyterlab -- id -Gn jupyter

jupyter sudo

Gjithçka është në rregull, le të vazhdojmë.

Lejo të gjithë përdoruesit që janë anëtarë të grupit sudo përdorni komandën sudo. Për ta bërë këtë, ekzekutoni skriptin e mëposhtëm, ku sed çkomenton linjën e parametrave në skedarin e konfigurimit /etc/sudoers:

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

Instalimi dhe konfigurimi i JupyterLab ^

laborator jupyter është një aplikacion Python, kështu që fillimisht duhet të instalojmë këtë interpretues. Gjithashtu, laborator jupyter ne do të instalojmë duke përdorur menaxherin e paketave Python pip, dhe jo ai i sistemit, sepse mund të jetë i vjetëruar në depon e sistemit dhe për këtë arsye, ne duhet t'i zgjidhim manualisht varësitë për të duke instaluar paketat e mëposhtme − python3 python3-dev gcc libc-dev zeromq-dev:

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

Le të përditësojmë modulet python dhe menaxherin e paketave pip në versionin aktual:

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

I vendosur laborator jupyter nëpërmjet menaxherit të paketave pip:

lxc exec jupyterlab -- python3 -m pip install jupyterlab

Që nga zgjerimet në laborator jupyter janë eksperimentale dhe nuk dërgohen zyrtarisht me paketën jupyterlab, ndaj duhet ta instalojmë dhe konfigurojmë manualisht.

Le të instalojmë NodeJS dhe menaxherin e paketave për të - NPM, që nga ajo kohë laborator jupyter i përdor ato për zgjerimet e tij:

lxc exec jupyterlab -- apk add nodejs npm

Tek shtesat për laborator jupyter të cilat do t'i instalojmë funksionuan, ato duhet të instalohen në direktorinë e përdoruesit pasi aplikacioni do të lansohet nga përdoruesi jupyter. Problemi është se nuk ka asnjë parametër në komandën e nisjes që mund të kalojë në një direktori; aplikacioni pranon vetëm një variabël mjedisi dhe për këtë arsye ne duhet ta përcaktojmë atë. Për ta bërë këtë, ne do të shkruajmë komandën e variablit të eksportit JUPYTERLAB_DIR në mjedisin e përdoruesit jupyter, për të paraqitur .bashrci cili ekzekutohet sa herë që përdoruesi regjistrohet:

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

Komanda tjetër do të instalojë një shtesë të veçantë - menaxher i zgjerimit në laborator jupyter:

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

Tani gjithçka është gati për lëshimin e parë laborator jupyter, por ne ende mund të instalojmë disa shtesa të dobishme:

  • toc — Tabela e përmbajtjes, gjeneron një listë titujsh në një artikull/fletore
  • jupyterlab-horizon-theme - Tema e UI
  • jupyterlab_neon_theme - Tema e UI
  • jupyterlab-ubu-theme - Nje tjeter temë nga autori ky artikull :) Por në këtë rast do të shfaqet instalimi nga depoja e GitHub

Pra, ekzekutoni komandat e mëposhtme në mënyrë sekuenciale për të instaluar këto shtesa:

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"

Pas instalimit të shtesave, duhet t'i përpilojmë ato, pasi më parë, gjatë instalimit, ne specifikuam çelësin --no-build për të kursyer kohë. Tani do të përshpejtojmë ndjeshëm duke i përpiluar ato së bashku në një lëvizje:

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

Tani ekzekutoni dy komandat e mëposhtme për ta ekzekutuar për herë të parë laborator jupyter. Do të ishte e mundur ta lëshoni atë me një komandë, por në këtë rast, komanda e nisjes, e cila është e vështirë të mbahet mend në mendjen tuaj, do të mbahet mend nga bash në kontejner, dhe jo në host, ku tashmë ka komanda të mjaftueshme. për t'i regjistruar në histori :)

Hyni në kontejner si përdorues jupyter:

lxc exec jupyterlab -- su -l jupyter

Më pas, vraponi laborator jupyter me çelësat dhe parametrat siç tregohet:

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

Shkoni te adresa në shfletuesin tuaj të internetit http://10.0.5.5:8888 dhe në faqen që hapet fut shenjë qasje të cilën do ta shihni në tastierë. Kopjojeni dhe ngjisni në faqe, më pas klikoni Hyrja. Pas hyrjes, shkoni te menyja e shtesave në të majtë, siç tregohet në figurën më poshtë, ku do t'ju kërkohet që kur aktivizoni menaxherin e ekstensionit, të merrni rreziqe sigurie duke instaluar shtesa nga palë të treta për të cilat komanda Zhvillimi i JupyterLab nuk është përgjegjës:

Lëshimi i Jupyterit në orbitën LXD

Megjithatë, ne e izolojmë të gjithë laborator jupyter dhe vendoseni në një kontejner në mënyrë që shtesat e palëve të treta që kërkojnë dhe përdorin NodeJS të paktën të mos mund të vjedhin të dhëna në disk përveç atyre që hapim brenda kontejnerit. Shkoni te dokumentet tuaja private në host në /home proceset nga kontejneri nuk kanë gjasa të kenë sukses, dhe nëse ndodhin, atëherë ju duhet të keni privilegje për skedarët në sistemin pritës, pasi ne e ekzekutojmë kontejnerin në mënyra e paprivilegjuar. Bazuar në këtë informacion, ju mund të vlerësoni rrezikun e përfshirjes së shtesave në laborator jupyter.

Krijoi fletore IPython (faqet në laborator jupyter) tani do të krijohet në drejtorinë kryesore të përdoruesit - /home/jupyter, por planet tona janë të ndajmë të dhënat (ndarjen) midis hostit dhe kontejnerit, kështu që kthehuni në tastierë dhe ndaloni laborator jupyter duke ekzekutuar tastin e nxehtë - CTRL+C dhe duke u përgjigjur y sipas kërkesës. Pastaj përfundoni seancën interaktive të përdoruesit jupyter kompletimi i një çelësi të nxehtë CTRL+D.

Ndarja e të dhënave me hostin ^

Për të ndarë të dhënat me hostin, duhet të krijoni një pajisje në kontejner që ju lejon ta bëni këtë dhe për ta bërë këtë, ekzekutoni komandën e mëposhtme ku ne specifikojmë çelësat e mëposhtëm:

  • lxc config device add — Komanda shton konfigurimin e pajisjes
  • jupyter — ID e kontejnerit në të cilin është shtuar konfigurimi
  • hostfs - ID e pajisjes. Ju mund të vendosni çdo emër.
  • disk — Tregohet lloji i pajisjes
  • path — Përcakton shtegun në kontejnerin në të cilin LXD do ta montojë këtë pajisje
  • source — Specifikoni burimin, shtegun drejt drejtorisë në host që dëshironi të ndani me kontejnerin. Specifikoni rrugën sipas preferencave tuaja
lxc config device add jupyterlab hostfs disk path=/mnt/hostfs source=/home/dv/projects/ipython-notebooks

Për katalogun /home/dv/projects/ipython-notebooks leja duhet të vendoset për përdoruesin e kontejnerit i cili aktualisht ka një UID të barabartë me SubUID + UID, shih kapitullin Siguria. Privilegjet e kontejnerit në artikull Karakteristikat themelore të sistemeve të kontejnerëve LXD - Linux.

Vendosni lejen për hostin, ku pronari do të jetë përdoruesi i kontejnerit jupyter, dhe ndryshoren $USER do të specifikojë përdoruesin tuaj pritës si një grup:

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

Përshendetje Botë! ^

Nëse keni ende një seancë konsole të hapur në kontejnerin me laborator jupyter, më pas riniseni me një çelës të ri --notebook-dir duke vendosur vlerën /mnt/hostfs si shtegu drejt rrënjës së laptopëve në kontejnerin për pajisjen që krijuam në hapin e mëparshëm:

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

Pastaj shkoni në faqe http://10.0.5.5:8888 dhe krijoni laptopin tuaj të parë duke klikuar butonin në faqe siç tregohet në foton më poshtë:

Lëshimi i Jupyterit në orbitën LXD

Më pas, në fushën në faqe, futni kodin Python që do të shfaqë klasiken Hello World!. Kur të keni përfunduar futjen, shtypni CTRL+ENTER ose butonin "luaj" në shiritin e veglave në krye që JupyterLab të bëjë këtë:

Lëshimi i Jupyterit në orbitën LXD

Në këtë pikë, pothuajse gjithçka është gati për përdorim, por nuk do të jetë interesante nëse nuk instalojmë module shtesë Python (aplikacione të plota) që mund të zgjerojnë ndjeshëm aftësitë standarde të Python në laborator jupyterPrandaj, le të vazhdojmë :)

PS Gjëja interesante është se zbatimi i vjetër Jupiteri nën emrin e koduar Fletore Jupyter nuk është larguar dhe ekziston paralelisht me laborator jupyter. Për të kaluar në versionin e vjetër, ndiqni lidhjen duke shtuar prapashtesën në adresë/tree, dhe kalimi në versionin e ri kryhet me prapashtesë /lab, por nuk duhet të specifikohet:

Zgjerimi i aftësive të Python ^

Në këtë seksion, ne do të instalojmë module të tilla të fuqishme të gjuhës Python si i mprehtë, Pandas, matplotlib, IPyWidgets rezultatet e të cilave janë të integruara në laptopë laborator jupyter.

Përpara se të instaloni modulet e listuara të Python përmes menaxherit të paketave pip së pari duhet të zgjidhim varësitë e sistemit në Alpine Linux:

  • g++ — Nevojitet për përpilimin e moduleve, pasi disa prej tyre janë implementuar në gjuhë C + + dhe lidheni me Python në kohën e ekzekutimit si module binare
  • freetype-dev - varësia për modulin Python matplotlib

Instalimi i varësive:

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

Ekziston një problem: në gjendjen aktuale të shpërndarjes Alpine Linux, nuk do të jetë e mundur të përpilohet versioni i ri i NumPy; do të shfaqet një gabim përpilimi që nuk mund ta zgjidhja:

GABIM: Nuk mund të ndërtohen rrota për numpy të cilat përdorin PEP 517 dhe nuk mund të instalohen drejtpërdrejt

Prandaj, ne do ta instalojmë këtë modul si një paketë sistemi që shpërndan një version tashmë të përpiluar, por pak më të vjetër se ai që është aktualisht i disponueshëm në sit:

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

Më pas, instaloni modulet Python përmes menaxherit të paketave pip. Jini të durueshëm pasi disa module do të përpilohen dhe mund të zgjasin disa minuta. Në makinën time, përpilimi zgjati ~ 15 minuta:

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

Pastrimi i memories së instalimit:

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

Testimi i moduleve në JupyterLab ^

Nëse jeni duke vrapuar laborator jupyter, rinisni atë në mënyrë që modulet e sapo instaluara të aktivizohen. Për ta bërë këtë, në një seancë konsole, klikoni CTRL+C ku e keni në punë dhe hyni y për të ndaluar kërkesën dhe më pas për të filluar përsëri laborator jupyter duke shtypur shigjetën lart në tastierë që të mos futet përsëri komanda dhe më pas Enter për ta nisur atë:

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

Shkoni në faqe http://10.0.5.5:8888/lab ose rifreskoni faqen në shfletuesin tuaj dhe më pas futni kodin e mëposhtëm në një qelizë të re të fletores:

%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

Ju duhet të merrni një rezultat si në foton më poshtë, ku IPyWidgets gjeneron një element UI në faqe që ndërvepron në mënyrë interaktive me kodin burimor, dhe gjithashtu matplotlib shfaq rezultatin e kodit në formën e një fotografie si grafik funksioni:

Lëshimi i Jupyterit në orbitën LXD

Shumë shembuj IPyWidgets mund ta gjeni në tutorial këtu

Çfarë tjetër? ^

Bravo nëse qëndruat dhe arritët në fund të artikullit. Unë qëllimisht nuk postova një skenar të gatshëm në fund të artikullit që do të instalohej laborator jupyter në "një klik" për të inkurajuar punëtorët :) Por ju mund ta bëni vetë, pasi tashmë e dini se si, pasi keni mbledhur komandat në një skenar të vetëm Bash :)

Ju gjithashtu mund të:

  • Vendosni një emër rrjeti për kontejnerin në vend të një adrese IP duke e shkruar atë në një të thjeshtë /etc/hosts dhe shkruani adresën në shfletues http://jupyter.local:8888
  • Luani me kufirin e burimeve për kontejnerin, për këtë lexoni kapitullin në aftësitë bazë LXD ose merrni më shumë informacion në faqen e zhvilluesit të LXD.
  • Ndryshoni temën:

Lëshimi i Jupyterit në orbitën LXD

Dhe shumë më tepër që mund të bëni! Kjo eshte e gjitha. Ju uroj suksese!

PËRDITËSIM: 15.04.2020 18:30 - Gabimet e korrigjuara në kapitullin "Përshëndetje, Botë!"
PËRDITËSIM: 16.04.2020 10:00 — Teksti i korrigjuar dhe shtuar në përshkrimin e aktivizimit të menaxherit të zgjerimit laborator jupyter
PËRDITËSIM: 16.04.2020 10:40 — Gabimet e korrigjuara të gjetura në tekst dhe të ndryshuara pak për mirë në kapitullin "Instalimi i softuerit bazë dhe konfigurimi i sistemit"

Burimi: www.habr.com

Shto një koment