Vai jums kÄdreiz ir nÄcies eksperimentÄt ar kodu vai sistÄmas utilÄ«tprogrammÄm operÄtÄjsistÄmÄ Linux, neuztraucoties par pamatÄ esoÅ”o sistÄmu un nenojaucot visu, ja rodas kļūda kodÄ, kuram vajadzÄtu darboties ar root tiesÄ«bÄm?
Bet kÄ ir ar to, ka pieÅemsim, ka vienÄ maŔīnÄ ir jÄpÄrbauda vai jÄpalaiž vesela dažÄdu mikropakalpojumu kopa? Simts vai pat tÅ«kstotis?
Ar virtuÄlajÄm maŔīnÄm, kuras pÄrvalda hipervizors, Å”Ädas problÄmas var un tiks atrisinÄtas, bet par kÄdu cenu? PiemÄram, konteiners LXD, kura pamatÄ ir Alpine Linux izplatÄ«Å”ana, patÄrÄ tikai 7.60MB
RAM un vieta, kur pÄc palaiÅ”anas atrodas saknes nodalÄ«jums 9.5MB
! KÄ tev tas patÄ«k, ÄŖlons Masks? Iesaku pÄrbaudÄ«t pamata iespÄjas LXD - konteineru sistÄma Linux
PÄc tam, kad kopumÄ kļuva skaidrs, kas ir LXD konteineri, dosimies tÄlÄk un padomÄsim, kÄ bÅ«tu, ja bÅ«tu tÄda harvestera platforma, kurÄ varÄtu droÅ”i palaist resursdatora kodu, Ä£enerÄt grafikus, dinamiski (interaktÄ«vi) saistÄ«t UI logrÄ«kus ar savu kodu, papildinÄt kodu ar tekstu ar blekdžeku... formatÄjumu? Kaut kÄds interaktÄ«vs emuÄrs? Oho... es to gribu! Gribi! š
Paskaties zem kaÄ·a, kur mÄs palaidÄ«sim konteinerÄ jupyter laboratorija - nÄkamÄs paaudzes lietotÄja interfeiss novecojuÅ”Ä Jupyter piezÄ«mjdatora vietÄ, un mÄs arÄ« instalÄsim Python moduļus, piemÄram, nejutÄ«gs, Pandas, matplotlib, IPyWidgets kas ļaus izdarÄ«t visu iepriekÅ” minÄto un to visu saglabÄt Ä«paÅ”Ä failÄ ā IPython klÄpjdatorÄ.
NavigÄcija
- OrbitÄlÄs pacelÅ”anÄs plÄns
- PamatsistÄmas uzstÄdÄ«Å”ana un konfigurÄÅ”ana
- PamatprogrammatÅ«ras instalÄÅ”ana un sistÄmas iestatÄ«Å”ana
- JupyterLab instalÄÅ”ana un konfigurÄÅ”ana
- Datu koplietoŔana ar saimniekdatoru
- Sveika pasaule!
- Python iespÄju paplaÅ”inÄÅ”ana
- Moduļu testÄÅ”ana programmÄ JupyterLab
- Kas vÄl?
OrbitÄlÄs pacelÅ”anÄs plÄns ^
IeskicÄsim Ä«su rÄ«cÄ«bas plÄnu, lai mums bÅ«tu vieglÄk Ä«stenot iepriekÅ” minÄto shÄmu:
- InstalÄsim un palaidÄ«sim konteineru, pamatojoties uz izplatÄ«Å”anas komplektu Alpine Linux. MÄs izmantosim Å”o izplatÄ«Å”anu, jo tas ir vÄrsts uz minimÄlismu un tajÄ instalÄs tikai paÅ”u nepiecieÅ”amÄko programmatÅ«ru, nekas nav lieks.
- Pievienosim konteinerÄ papildu virtuÄlo disku un pieŔķirsim tam nosaukumu -
hostfs
un pievienojiet to saknes failu sistÄmai. Å is disks ļaus izmantot resursdatorÄ esoÅ”os failus no dotÄ direktorija konteinera iekÅ”pusÄ. TÄdÄjÄdi mÅ«su dati bÅ«s neatkarÄ«gi no konteinera. Ja konteiners tiek dzÄsts, dati paliks resursdatorÄ. Å Ä« shÄma ir noderÄ«ga arÄ« to paÅ”u datu koplietoÅ”anai starp daudziem konteineriem, neizmantojot konteineru izplatÄ«Å”anas standarta tÄ«kla mehÄnismus. - InstalÄsim Bash, sudo, nepiecieÅ”amÄs bibliotÄkas, pievienosim un konfigurÄsim sistÄmas lietotÄju
- InstalÄsim Python, moduļus un apkoposim tiem binÄrÄs atkarÄ«bas
- InstalÄsim un palaidÄ«sim jupyter laboratorija, pielÄgojiet izskatu, instalÄjiet tam paplaÅ”inÄjumus.
Å ajÄ rakstÄ mÄs sÄksim ar konteinera palaiÅ”anu, mÄs neapsvÄrsim LXD instalÄÅ”anu un konfigurÄÅ”anu, to visu varat atrast citÄ rakstÄ - LXD - Linux konteineru sistÄmu pamatfunkcijas.
PamatsistÄmas uzstÄdÄ«Å”ana un konfigurÄÅ”ana ^
MÄs izveidojam konteineru ar komandu, kurÄ norÄdÄm attÄlu - alpine3
, konteinera identifikators - jupyterlab
un, ja nepiecieÅ”ams, konfigurÄcijas profili:
lxc init alpine3 jupyterlab --profile=default --profile=hddroot
Å eit es izmantoju konfigurÄcijas profilu hddroot
kas nosaka izveidot konteineru ar saknes nodalÄ«jumu UzglabÄÅ”anas baseins atrodas fiziskajÄ HDD diskÄ:
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
Tas dod man iespÄju eksperimentÄt ar konteineriem HDD diskÄ, ietaupot SSD diska resursus, kas ir pieejams arÄ« manÄ sistÄmÄ š kuram esmu izveidojis atseviŔķu konfigurÄcijas profilu ssdroot
.
PÄc konteinera izveides tas ir stÄvoklÄ« STOPPED
, tÄpÄc mums tas jÄsÄk, palaižot tajÄ init sistÄmu:
lxc start jupyterlab
ParÄdÄ«sim konteineru sarakstu LXD, izmantojot taustiÅu -c
kas norÄda uz kuru ckolonnu displejs:
lxc list -c ns4b
+------------+---------+-------------------+--------------+
| NAME | STATE | IPV4 | STORAGE POOL |
+------------+---------+-------------------+--------------+
| jupyterlab | RUNNING | 10.0.5.198 (eth0) | hddpool |
+------------+---------+-------------------+--------------+
Veidojot konteineru, IP adrese tika izvÄlÄta nejauÅ”i, jo mÄs izmantojÄm konfigurÄcijas profilu default
kas iepriekÅ” tika konfigurÄts rakstÄ LXD - Linux konteineru sistÄmu pamatfunkcijas.
MÄs mainÄ«sim Å”o IP adresi uz neaizmirstamÄku, izveidojot tÄ«kla saskarni konteinera lÄ«menÄ«, nevis konfigurÄcijas profila lÄ«menÄ«, kÄ tas tagad ir paÅ”reizÄjÄ konfigurÄcijÄ. Jums tas nav jÄdara, varat to izlaist.
TÄ«kla interfeisa izveide eth0
kuru mÄs saistÄm ar slÄdzi (tÄ«kla tilts) lxdbr0
kurÄ mÄs iespÄjojÄm NAT saskaÅÄ ar iepriekÅ”Äjo rakstu, un konteineram tagad bÅ«s piekļuve internetam, kÄ arÄ« interfeisam pieŔķiram statisku IP adresi - 10.0.5.5
:
lxc config device add jupyterlab eth0 nic name=eth0 nictype=bridged parent=lxdbr0 ipv4.address=10.0.5.5
PÄc ierÄ«ces pievienoÅ”anas konteiners ir jÄpÄrstartÄ:
lxc restart jupyterlab
Konteinera statusa pÄrbaude:
lxc list -c ns4b
+------------+---------+------------------+--------------+
| NAME | STATE | IPV4 | STORAGE POOL |
+------------+---------+------------------+--------------+
| jupyterlab | RUNNING | 10.0.5.5 (eth0) | hddpool |
+------------+---------+------------------+--------------+
PamatprogrammatÅ«ras instalÄÅ”ana un sistÄmas iestatÄ«Å”ana ^
Lai administrÄtu mÅ«su konteineru, jums jÄinstalÄ Å”Äda programmatÅ«ra:
Pakete
Apraksts
stipri iesist
GNU Bourne Again apvalks
bash-pabeigŔana
ProgrammÄjama bash Äaulas pabeigÅ”ana
sudo
Dodiet dažiem lietotÄjiem iespÄju palaist dažas komandas kÄ root
Äna
Paroles un konta pÄrvaldÄ«bas rÄ«ku komplekts ar atbalstu Änu failiem un PAM
tzdata
Laika joslas un vasaras laika datu avoti
nano
Pico redaktora klons ar uzlabojumiem
TurklÄt jÅ«s varat instalÄt atbalstu sistÄmas man-lapÄs, instalÄjot Å”Ädas pakotnes ā man man-pages mdocml-apropos less
lxc exec jupyterlab -- apk add bash bash-completion sudo shadow tzdata nano
ApskatÄ«sim izmantotÄs komandas un taustiÅus:
lxc
ā Zvaniet LXD klientamexec
- LXD klienta metode, kas palaiž komandu konteinerÄjupyterlab
ā Konteinera ID--
- ÄŖpaÅ”a atslÄga, kas nosaka turpmÄkÄs atslÄgas neinterpretÄt kÄ atslÄgas priekÅ”lxc
un nodot pÄrÄjo virkni, kÄ tas ir konteinerÄapk
ā Alpine Linux izplatÄ«Å”anas pakotÅu pÄrvaldnieksadd
ā pakotÅu pÄrvaldnieka metode, kas instalÄ pakotnes, kas norÄdÄ«tas pÄc komandas
TÄlÄk mÄs sistÄmÄ iestatÄ«sim laika joslu Europe/Moscow
:
lxc exec jupyterlab -- cp /usr/share/zoneinfo/Europe/Moscow /etc/localtime
PÄc laika joslas instalÄÅ”anas pakotne tzdata
sistÄmÄ vairs nav nepiecieÅ”ams, tas aizÅems vietu, tÄpÄc izdzÄsÄ«sim to:
lxc exec jupyterlab -- apk del tzdata
Laika joslas pÄrbaude:
lxc exec jupyterlab -- date
Wed Apr 15 10:49:56 MSK 2020
Lai netÄrÄtu daudz laika, iestatot Bash jaunajiem lietotÄjiem konteinerÄ, turpmÄkajÄs darbÄ«bÄs no resursdatora sistÄmas uz to kopÄsim gatavus skel failus. Tas ļaus interaktÄ«vi izrotÄt BaÅ”u konteinerÄ. Mana resursdatora sistÄma ir Manjaro Linux, un faili tiek kopÄti /etc/skel/.bash_profile
, /etc/skel/.bashrc
, /etc/skel/.dir_colors
principÄ tie ir piemÄroti Alpine Linux un nerada kritiskas problÄmas, taÄu jums var bÅ«t atŔķirÄ«gs sadalÄ«jums, un jums ir patstÄvÄ«gi jÄnoskaidro, vai, palaižot Bash konteinerÄ, ir radusies kļūda.
KopÄjiet skel failus konteinerÄ. AtslÄga --create-dirs
izveidos nepiecieÅ”amos direktorijus, ja tie neeksistÄ:
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
EsoÅ”am root lietotÄjam kopÄjiet skel failus, kas tikko iekopÄti konteinerÄ, uz mÄjas direktoriju:
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 instalÄ lietotÄjiem sistÄmas apvalku /bin/sh
, mÄs to aizstÄsim ar root
lietotÄjs Bash:
lxc exec jupyterlab -- usermod --shell=/bin/bash root
Ka root
lietotÄjs nebija bezparoles, viÅam jÄiestata parole. Å Ä« komanda Ä£enerÄs un iestatÄ«s viÅam jaunu nejauÅ”u paroli, kuru pÄc tÄs izpildes redzÄsit konsoles ekrÄnÄ:
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
TÄpat izveidosim jaunu sistÄmas lietotÄju - jupyter
kuru mÄs konfigurÄsim vÄlÄk jupyter laboratorija:
lxc exec jupyterlab -- useradd --create-home --shell=/bin/bash jupyter
Izveidosim un iestatīsim tam paroli:
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
TÄlÄk mÄs izpildÄ«sim divas komandas, no kurÄm pirmÄ izveidos sistÄmas grupu sudo
, un otrais tam pievienos lietotÄju jupyter
:
lxc exec jupyterlab -- groupadd --system sudo
lxc exec jupyterlab -- groupmems --group sudo --add jupyter
ApskatÄ«sim, kurÄm grupÄm lietotÄjs pieder jupyter
:
lxc exec jupyterlab -- id -Gn jupyter
jupyter sudo
Viss kÄrtÄ«bÄ, ejam tÄlÄk.
Atļaut visiem lietotÄjiem, kas ir grupas dalÄ«bnieki sudo
izmantot komandu sudo
. Lai to izdarÄ«tu, palaidiet Å”Ädu skriptu, kur sed
atceļ parametru rindiÅas komentÄrus konfigurÄcijas failÄ /etc/sudoers
:
lxc exec jupyterlab -- /bin/bash -c "sed --in-place -e '/^#[ t]*%sudo[ t]*ALL=(ALL)[ t]*ALL$/ s/^[# ]*//' /etc/sudoers"
JupyterLab instalÄÅ”ana un konfigurÄÅ”ana ^
jupyter laboratorija ir Python lietojumprogramma, tÄpÄc mums vispirms ir jÄinstalÄ Å”is tulks. TÄpat jupyter laboratorija mÄs instalÄsim, izmantojot Python pakotÅu pÄrvaldnieku pip
, nevis sistÄmas, jo tas var bÅ«t novecojis sistÄmas repozitorijÄ, un tÄpÄc mums ir manuÄli jÄatrisina tÄs atkarÄ«bas, instalÄjot Å”Ädas pakotnes - python3 python3-dev gcc libc-dev zeromq-dev
:
lxc exec jupyterlab -- apk add python3 python3-dev gcc libc-dev zeromq-dev
AtjauninÄsim python moduļus un pakotÅu pÄrvaldnieku pip
uz paÅ”reizÄjo versiju:
lxc exec jupyterlab -- python3 -m pip install --upgrade pip setuptools wheel
Komplekts jupyter laboratorija caur pakotÅu pÄrvaldnieku pip
:
lxc exec jupyterlab -- python3 -m pip install jupyterlab
KopÅ” paplaÅ”inÄjumiem jupyter laboratorija ir eksperimentÄli un netiek oficiÄli piegÄdÄti kopÄ ar jupyterlab pakotni, tÄpÄc mums tÄ ir jÄinstalÄ un jÄkonfigurÄ manuÄli.
InstalÄsim NodeJS un tam paredzÄto pakotÅu pÄrvaldnieku - NPM, kopÅ” jupyter laboratorija izmanto tos saviem paplaÅ”inÄjumiem:
lxc exec jupyterlab -- apk add nodejs npm
Uz paplaÅ”inÄjumiem for jupyter laboratorija kurus mÄs instalÄsim, tie ir jÄinstalÄ lietotÄja direktorijÄ, jo lietojumprogramma tiks palaista no lietotÄja jupyter
. ProblÄma ir tÄda, ka palaiÅ”anas komandÄ nav parametru, ko varÄtu nodot direktorijai; lietojumprogramma pieÅem tikai vides mainÄ«go, un tÄpÄc mums tas ir jÄdefinÄ. Lai to izdarÄ«tu, mÄs uzrakstÄ«sim mainÄ«gÄ eksporta komandu JUPYTERLAB_DIR
lietotÄja vidÄ jupyter
, uz failu .bashrc
kas tiek izpildÄ«ts katru reizi, kad lietotÄjs piesakÄs:
lxc exec jupyterlab -- su -l jupyter -c "echo -e "nexport JUPYTERLAB_DIR=$HOME/.local/share/jupyter/lab" >> .bashrc"
NÄkamÄ komanda instalÄs Ä«paÅ”u paplaÅ”inÄjumu - paplaÅ”inÄjumu pÄrvaldnieku jupyter laboratorija:
lxc exec jupyterlab -- su -l jupyter -c "export JUPYTERLAB_DIR=$HOME/.local/share/jupyter/lab; jupyter labextension install --no-build @jupyter-widgets/jupyterlab-manager"
Tagad viss ir gatavs pirmajai palaiÅ”anai jupyter laboratorija, taÄu mÄs joprojÄm varam instalÄt dažus noderÄ«gus paplaÅ”inÄjumus:
toc
ā Satura rÄdÄ«tÄjs, Ä£enerÄ raksta/piezÄ«mju grÄmatiÅas virsrakstu sarakstujupyterlab-horizon-theme
ā UI tÄmajupyterlab_neon_theme
ā UI tÄmajupyterlab-ubu-theme
- VÄl viens tÄma no autora Å”o rakstu :) Bet Å”ajÄ gadÄ«jumÄ tiks rÄdÄ«ta instalÄcija no GitHub repozitorija
TÄtad, lai instalÄtu Å”os paplaÅ”inÄjumus, secÄ«gi palaidiet Å”Ädas komandas:
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"
PÄc paplaÅ”inÄjumu instalÄÅ”anas mums tie ir jÄapkopo, jo iepriekÅ” instalÄÅ”anas laikÄ mÄs norÄdÄ«jÄm atslÄgu --no-build
lai ietaupÄ«tu laiku. Tagad mÄs ievÄrojami paÄtrinÄsim, apkopojot tos kopÄ vienÄ piegÄjienÄ:
lxc exec jupyterlab -- su -l jupyter -c "export JUPYTERLAB_DIR=$HOME/.local/share/jupyter/lab; jupyter lab build"
Tagad palaidiet Ŕīs divas komandas, lai to palaistu pirmo reizi jupyter laboratorija. To varÄtu palaist ar vienu komandu, taÄu Å”ajÄ gadÄ«jumÄ palaiÅ”anas komandu, kuru prÄtÄ grÅ«ti atcerÄties, atcerÄsies bash konteinerÄ, nevis resursdatorÄ, kur komandu jau ir pietiekami daudz. ierakstÄ«t tos vÄsturÄ :)
Piesakieties konteinerÄ kÄ lietotÄjs jupyter
:
lxc exec jupyterlab -- su -l jupyter
TÄlÄk, skrien jupyter laboratorija ar taustiÅiem un parametriem, kÄ norÄdÄ«ts:
[jupyter@jupyterlab ~]$ jupyter lab --ip=0.0.0.0 --no-browser
PÄrejiet uz adresi savÄ tÄ«mekļa pÄrlÅ«kprogrammÄ http://10.0.5.5:8888 un atvÄrtajÄ lapÄ ievadiet žetons piekļuvi, ko redzÄsit konsolÄ. KopÄjiet un ielÄ«mÄjiet to lapÄ, pÄc tam noklikŔķiniet uz PieslÄgties. PÄc pieteikÅ”anÄs dodieties uz paplaÅ”inÄjumu izvÄlni kreisajÄ pusÄ, kÄ parÄdÄ«ts attÄlÄ zemÄk, kur, aktivizÄjot paplaÅ”inÄjumu pÄrvaldnieku, jums tiks piedÄvÄts uzÅemties droŔības risku, instalÄjot treÅ”o puÅ”u paplaÅ”inÄjumus, kuriem tiek veikta komanda JupyterLab izstrÄde nav atbildÄ«gs:
TomÄr mÄs izolÄjam visu jupyter laboratorija un ievietojiet to konteinerÄ, lai treÅ”o puÅ”u paplaÅ”inÄjumi, kuriem nepiecieÅ”ams un izmanto NodeJS, nevarÄtu vismaz nozagt datus diskÄ, izÅemot tos, kurus mÄs atveram konteinerÄ. Piekļūstiet saviem privÄtajiem dokumentiem resursdatorÄ /home
procesi no konteinera, visticamÄk, neizdosies, un, ja tÄ izdodas, jums ir jÄbÅ«t privilÄÄ£ijÄm uz failiem resursdatora sistÄmÄ, jo mÄs palaižam konteineru nepievilcÄ«gs režīms. Pamatojoties uz Å”o informÄciju, varat novÄrtÄt paplaÅ”inÄjumu iekļauÅ”anas risku jupyter laboratorija.
Izveidotas IPython piezÄ«mju grÄmatiÅas (lapas iekÅ”Ä jupyter laboratorija) tagad tiks izveidots lietotÄja mÄjas direktorijÄ - /home/jupyter
, taÄu mÅ«su plÄni ir sadalÄ«t datus (koplietot) starp resursdatoru un konteineru, tÄpÄc atgriezieties konsolÄ un pÄrtraucam jupyter laboratorija izpildot karsto taustiÅu - CTRL+C
un atbildot y
pÄc pieprasÄ«juma. PÄc tam pÄrtrauciet lietotÄja interaktÄ«vo sesiju jupyter
aizpildot karsto taustiÅu CTRL+D
.
Datu koplietoŔana ar saimniekdatoru ^
Lai koplietotu datus ar resursdatoru, konteinerÄ ir jÄizveido ierÄ«ce, kas ļauj to izdarÄ«t, un, lai to izdarÄ«tu, palaidiet Å”Ädu komandu, kurÄ norÄdÄm Å”Ädas atslÄgas:
lxc config device add
ā komanda pievieno ierÄ«ces konfigurÄcijujupyter
ā konteinera ID, kuram pievienota konfigurÄcijahostfs
ā IerÄ«ces ID. Varat iestatÄ«t jebkuru nosaukumu.disk
ā Ir norÄdÄ«ts ierÄ«ces veidspath
ā norÄda ceļu konteinerÄ, kuram LXD pievienos Å”o ierÄ«cisource
ā NorÄdiet avotu, ceļu uz resursdatora direktoriju, kuru vÄlaties koplietot ar konteineru. NorÄdiet ceļu atbilstoÅ”i savÄm vÄlmÄm
lxc config device add jupyterlab hostfs disk path=/mnt/hostfs source=/home/dv/projects/ipython-notebooks
Par katalogu /home/dv/projects/ipython-notebooks
atļauja ir jÄiestata konteinera lietotÄjam, kuram paÅ”laik ir vienÄds ar UID SubUID + UID
, skatiet nodaļu DroŔība. Konteinera privilÄÄ£ijas rakstÄ LXD - Linux konteineru sistÄmu pamatfunkcijas.
Iestatiet resursdatora atļauju, kur Ä«paÅ”nieks bÅ«s konteinera lietotÄjs jupyter
, un mainīgais $USER
norÄdÄ«s jÅ«su resursdatora lietotÄju kÄ grupu:
sudo chown 1001000:$USER /home/dv/projects/ipython-notebooks
Sveika pasaule! ^
Ja jums joprojÄm ir atvÄrta konsoles sesija konteinerÄ ar jupyter laboratorija, pÄc tam restartÄjiet to ar jaunu atslÄgu --notebook-dir
iestatot vÄrtÄ«bu /mnt/hostfs
kÄ ceļŔ uz klÄpjdatoru sakni ierÄ«ces konteinerÄ, kuru izveidojÄm iepriekÅ”ÄjÄ darbÄ«bÄ:
jupyter lab --ip=0.0.0.0 --no-browser --notebook-dir=/mnt/hostfs
PÄc tam dodieties uz lapu http://10.0.5.5:8888 un izveidojiet savu pirmo klÄpjdatoru, noklikŔķinot uz pogas lapÄ, kÄ parÄdÄ«ts attÄlÄ zemÄk:
PÄc tam lapas laukÄ ievadiet Python kodu, kas parÄdÄ«s klasisko Hello World!
. Kad esat pabeidzis ievadīŔanu, nospiediet CTRL+ENTER
vai pogu "AtskaÅot" rÄ«kjoslÄ augÅ”pusÄ, lai JupyterLab veiktu Å”Ädas darbÄ«bas:
Å obrÄ«d gandrÄ«z viss ir gatavs lietoÅ”anai, taÄu bÅ«s neinteresanti, ja mÄs neinstalÄsim papildu Python moduļus (pilnvÄrtÄ«gas lietojumprogrammas), kas var ievÄrojami paplaÅ”inÄt Python standarta iespÄjas jupyter laboratorija, tÄpÄc ejam tÄlÄk :)
P.S. Interesanti ir tas, ka vecÄ ievieÅ”ana Jupters zem koda nosaukuma Jupyter piezÄ«mju grÄmatiÅa nav pazudis un pastÄv paralÄli jupyter laboratorija. Lai pÄrslÄgtos uz veco versiju, sekojiet saitei, pievienojot adresÄ sufiksu/tree
, un pÄreja uz jauno versiju tiek veikta ar sufiksu /lab
, bet tas nav jÄnorÄda:
- Jupitera piezÄ«mju grÄmatiÅa ā http://10.0.5.5:8888/tree
- Jupyter Lab - http://10.0.5.5:8888/lab
Python iespÄju paplaÅ”inÄÅ”ana ^
Å ajÄ sadaÄ¼Ä mÄs instalÄsim tÄdus jaudÄ«gus Python valodas moduļus kÄ nejutÄ«gs, Pandas, matplotlib, IPyWidgets kuru rezultÄti tiek integrÄti klÄpjdatoros jupyter laboratorija.
Pirms uzskaitÄ«to Python moduļu instalÄÅ”anas, izmantojot pakotÅu pÄrvaldnieku pip
vispirms mums ir jÄatrisina sistÄmas atkarÄ«bas Alpine Linux:
g++
ā NepiecieÅ”ams moduļu kompilÄÅ”anai, jo daži no tiem ir ieviesti valodÄ C + + un izveidojiet savienojumu ar Python izpildlaikÄ kÄ binÄri moduļifreetype-dev
- atkarība no Python moduļa matplotlib
AtkarÄ«bu instalÄÅ”ana:
lxc exec jupyterlab -- apk add g++ freetype-dev
Ir viena problÄma: paÅ”reizÄjÄ Alpine Linux izplatÄ«Å”anas stÄvoklÄ« nebÅ«s iespÄjams apkopot jauno NumPy versiju; parÄdÄ«sies kompilÄcijas kļūda, kuru nevarÄju novÄrst:
KÄ»ÅŖDA: Nevar izveidot riteÅus, kas izmanto PEP 517 un kurus nevar uzstÄdÄ«t tieÅ”i
TÄpÄc mÄs instalÄsim Å”o moduli kÄ sistÄmas pakotni, kas izplata jau kompilÄtu versiju, bet nedaudz vecÄku par to, kas paÅ”laik ir pieejama vietnÄ:
lxc exec jupyterlab -- apk add py3-numpy py3-numpy-dev
PÄc tam instalÄjiet Python moduļus, izmantojot pakotÅu pÄrvaldnieku pip
. LÅ«dzu, esiet pacietÄ«gs, jo daži moduļi tiks apkopoti un var aizÅemt dažas minÅ«tes. ManÄ maŔīnÄ kompilÄcija aizÅÄma ~15 minÅ«tes:
lxc exec jupyterlab -- python3 -m pip install pandas ipywidgets matplotlib
InstalÄcijas keÅ”atmiÅas notÄ«rÄ«Å”ana:
lxc exec jupyterlab -- rm -rf /home/*/.cache/pip/*
lxc exec jupyterlab -- rm -rf /root/.cache/pip/*
Moduļu testÄÅ”ana programmÄ JupyterLab ^
Ja jÅ«s skrienat jupyter laboratorija, restartÄjiet to, lai tiktu aktivizÄti tikko instalÄtie moduļi. Lai to izdarÄ«tu, konsoles sesijÄ noklikŔķiniet uz CTRL+C
kur tas darbojas, un ievadiet y
lai apturÄtu pieprasÄ«jumu un pÄc tam sÄktu no jauna jupyter laboratorija nospiežot tastatÅ«ras augÅ”upvÄrsto bultiÅu, lai neievadÄ«tu komandu vÄlreiz un pÄc tam Enter
lai to sÄktu:
jupyter lab --ip=0.0.0.0 --no-browser --notebook-dir=/mnt/hostfs
Dodieties uz lapu http://10.0.5.5:8888/lab vai atsvaidziniet lapu savÄ pÄrlÅ«kprogrammÄ un pÄc tam ievadiet Å”Ädu kodu jaunÄ piezÄ«mju grÄmatiÅas ŔūnÄ:
%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
Jums vajadzÄtu iegÅ«t rezultÄtu, piemÄram, attÄlÄ zemÄk, kur IPyWidgets Ä£enerÄ UI elementu lapÄ, kas interaktÄ«vi mijiedarbojas ar avota kodu, kÄ arÄ« matplotlib parÄda koda rezultÄtu attÄla veidÄ kÄ funkciju grafiku:
Daudz piemÄru IPyWidgets to var atrast pamÄcÄ«bÄs Å”eit
Kas vÄl? ^
Labi darÄ«ts, ja palikÄt un sasniedzÄt paÅ”as raksta beigas. Es apzinÄti neievietoju raksta beigÄs gatavu skriptu, kas instalÄtu jupyter laboratorija ar āvienu klikŔķiā, lai iedroÅ”inÄtu strÄdniekus :) Bet jÅ«s to varat izdarÄ«t pats, jo jÅ«s jau zinÄt, kÄ, apkopojot komandas vienÄ Bash skriptÄ :)
Jūs varat arī:
- Iestatiet konteineram tÄ«kla nosaukumu, nevis IP adresi, ierakstot to vienkÄrÅ”Ä veidÄ
/etc/hosts
un pÄrlÅ«kprogrammÄ ierakstiet adresi http://jupyter.local:8888 - Apskatiet konteinera resursu ierobežojumu, lai to uzzinÄtu, izlasiet nodaļu pamata LXD iespÄjas vai iegÅ«stiet vairÄk informÄcijas LXD izstrÄdÄtÄju vietnÄ.
- Mainiet tÄmu:
Un vÄl daudz vairÄk jÅ«s varat darÄ«t! Tas ir viss. Es novÄlu jums panÄkumus!
ATJAUNINÄJUMS: 15.04.2020 18:30 - Izlabotas kļūdas sadaÄ¼Ä āSveika, pasaule!ā
ATJAUNINÄJUMS: 16.04.2020 10:00 ā Izlabots un pievienots teksts paplaÅ”inÄjumu pÄrvaldnieka aktivizÄcijas aprakstÄ jupyter laboratorija
ATJAUNINÄJUMS: 16.04.2020 10:40 ā TekstÄ atrastas izlabotas kļūdas un nedaudz izmainÄ«tas uz labo pusi nodaÄ¼Ä āPamata programmatÅ«ras instalÄÅ”ana un sistÄmas iestatÄ«Å”anaā
Avots: www.habr.com