Ali ste kdaj morali eksperimentirati s kodo ali sistemskimi pripomočki v Linuxu, da ne bi skrbeli za osnovni sistem in ne bi porušili vsega v primeru napake v kodi, ki bi se morala izvajati s korenskimi pravicami?
Kaj pa dejstvo, da morate recimo preizkusiti ali zagnati celotno gručo različnih mikrostoritev na enem računalniku? Sto ali celo tisoč?
Z virtualnimi stroji, ki jih upravlja hipervizor, se takšne težave lahko in tudi bodo rešile, toda za kakšno ceno? Na primer, vsebnik v LXD, ki temelji na distribuciji Alpine Linux, porabi samo 7.60MB
RAM in mesto korenske particije po zagonu 9.5MB
! Kako ti je to všeč, Elon Musk? Priporočam ogled osnovne zmogljivosti LXD - kontejnerskega sistema v Linuxu
Potem ko je na splošno postalo jasno, kaj so vsebniki LXD, pojdimo dlje in pomislimo, kaj če bi obstajala taka platforma harvesterja, kjer bi lahko varno zagnali kodo za gostitelja, ustvarili grafe, dinamično (interaktivno) povezali UI-widgete s svojo kodo, dopolniti kodo z besedilom z blackjack... formatiranje? Nekakšen interaktivni blog? Vau... Želim si! želim! 🙂
Poglejte pod mačko, kamor bomo izstrelili posodo jupyter lab - naslednja generacija uporabniškega vmesnika namesto zastarelega Jupyter Notebooka, namestili pa bomo tudi module Python kot npr. numpy, pand, matplotlib, IPyWidgets ki vam bo omogočil vse zgoraj našteto in vse skupaj shranil v posebno datoteko - prenosnik IPython.
Navigacija
- Načrt orbitalnega vzleta
- Namestitev in konfiguracija osnovnega sistema
- Namestitev osnovne programske opreme in nastavitev sistema
- Namestitev in konfiguracija JupyterLab
- Deljenje podatkov z gostiteljem
- Pozdravljen, svet!
- Razširitev zmogljivosti Pythona
- Testiranje modulov v JupyterLab
- Kaj drugega?
Načrt orbitalnega vzleta ^
Oglejmo si kratek akcijski načrt, ki nam bo olajšal izvajanje zgornje sheme:
- Namestimo in zaženimo vsebnik, ki temelji na distribucijskem kompletu Alpski Linux. To distribucijo bomo uporabljali, ker je usmerjena v minimalizem in bo vanjo namestila samo najbolj potrebno programsko opremo, nič odvečnega.
- Dodajmo dodaten virtualni disk v vsebnik in ga poimenujmo -
hostfs
in ga namestite v korenski datotečni sistem. Ta disk bo omogočil uporabo datotek na gostitelju iz danega imenika znotraj vsebnika. Tako bodo naši podatki neodvisni od vsebnika. Če vsebnik izbrišete, bodo podatki ostali na gostitelju. Ta shema je uporabna tudi za skupno rabo istih podatkov med številnimi vsebniki brez uporabe standardnih omrežnih mehanizmov distribucije vsebnika. - Namestimo Bash, sudo, potrebne knjižnice, dodamo in konfiguriramo sistemskega uporabnika
- Namestimo Python, module in sestavimo binarne odvisnosti zanje
- Namestimo in zaženemo jupyter lab, prilagodite videz, namestite razširitve zanj.
V tem članku bomo začeli z zagonom vsebnika, ne bomo razmišljali o namestitvi in konfiguraciji LXD, vse to lahko najdete v drugem članku - Osnovne značilnosti LXD - Linux kontejnerskih sistemov.
Namestitev in konfiguracija osnovnega sistema ^
Ustvarimo vsebnik z ukazom, v katerem podamo sliko - alpine3
, identifikator za vsebnik - jupyterlab
in po potrebi konfiguracijske profile:
lxc init alpine3 jupyterlab --profile=default --profile=hddroot
Tukaj uporabljam konfiguracijski profil hddroot
ki določa ustvarjanje vsebnika s korensko particijo Bazen za shranjevanje ki se nahaja na fizičnem HDD disku:
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
To mi daje priložnost, da eksperimentiram z vsebniki na disku HDD, pri čemer prihranim vire diska SSD, ki je na voljo tudi v mojem sistemu 🙂, za katerega sem ustvaril ločen konfiguracijski profil ssdroot
.
Ko je vsebnik ustvarjen, je v stanju STOPPED
, zato ga moramo zagnati tako, da v njem zaženemo init sistem:
lxc start jupyterlab
S tipko prikažimo seznam vsebnikov v LXD -c
ki označuje kateri cprikaz olumov:
lxc list -c ns4b
+------------+---------+-------------------+--------------+
| NAME | STATE | IPV4 | STORAGE POOL |
+------------+---------+-------------------+--------------+
| jupyterlab | RUNNING | 10.0.5.198 (eth0) | hddpool |
+------------+---------+-------------------+--------------+
Pri ustvarjanju vsebnika smo naslov IP izbrali naključno, saj smo uporabili konfiguracijski profil default
ki je bil predhodno konfiguriran v članku Osnovne značilnosti LXD - Linux kontejnerskih sistemov.
Ta naslov IP bomo spremenili v bolj nepozabnega, tako da bomo ustvarili omrežni vmesnik na ravni vsebnika in ne na ravni konfiguracijskega profila, kot je zdaj v trenutni konfiguraciji. Tega vam ni treba narediti, lahko ga preskočite.
Ustvarjanje omrežnega vmesnika eth0
ki ga povežemo s stikalom (omrežni most) lxdbr0
v katerem smo omogočili NAT po prejšnjem členu in kontejner bo sedaj imel dostop do interneta, vmesniku pa dodelimo tudi statični IP naslov - 10.0.5.5
:
lxc config device add jupyterlab eth0 nic name=eth0 nictype=bridged parent=lxdbr0 ipv4.address=10.0.5.5
Po dodajanju naprave je treba vsebnik znova zagnati:
lxc restart jupyterlab
Preverjanje statusa posode:
lxc list -c ns4b
+------------+---------+------------------+--------------+
| NAME | STATE | IPV4 | STORAGE POOL |
+------------+---------+------------------+--------------+
| jupyterlab | RUNNING | 10.0.5.5 (eth0) | hddpool |
+------------+---------+------------------+--------------+
Namestitev osnovne programske opreme in nastavitev sistema ^
Za upravljanje našega vsebnika morate namestiti naslednjo programsko opremo:
paket
Opis
bash
Lupina GNU Bourne Again
bash-dokončanje
Programabilno dokončanje lupine bash
sudo
Določenim uporabnikom omogočite izvajanje nekaterih ukazov kot root
senca
Paket orodij za upravljanje gesel in računov s podporo za senčne datoteke in PAM
tzdata
Viri podatkov o časovnem pasu in poletnem času
nano
Klon urejevalnika Pico z izboljšavami
Poleg tega lahko namestite podporo na sistemskih man-straneh z namestitvijo naslednjih paketov − man man-pages mdocml-apropos less
lxc exec jupyterlab -- apk add bash bash-completion sudo shadow tzdata nano
Poglejmo ukaze in tipke, ki smo jih uporabili:
lxc
— Pokličite stranko LXDexec
- Odjemalska metoda LXD, ki zažene ukaz v vsebnikujupyterlab
— ID vsebnika--
- Poseben ključ, ki določa, da se nadaljnji ključi ne razlagajo kot ključi zalxc
in preostali del niza prenesite v vsebnikapk
— Upravitelj distribucijskih paketov Alpine Linuxadd
— Metoda upravitelja paketov, ki namesti pakete, določene za ukazom
Nato bomo v sistemu nastavili časovni pas Europe/Moscow
:
lxc exec jupyterlab -- cp /usr/share/zoneinfo/Europe/Moscow /etc/localtime
Po namestitvi časovnega pasu paket tzdata
ni več potreben v sistemu, bo zavzel prostor, zato ga izbrišite:
lxc exec jupyterlab -- apk del tzdata
Preverjanje časovnega pasu:
lxc exec jupyterlab -- date
Wed Apr 15 10:49:56 MSK 2020
Da ne bi porabili veliko časa za nastavitev Bash za nove uporabnike v vsebniku, bomo v naslednjih korakih vanj kopirali že pripravljene datoteke skel iz gostiteljskega sistema. To vam bo omogočilo, da interaktivno polepšate Bash v vsebniku. Moj gostiteljski sistem je Manjaro Linux in datoteke, ki se kopirajo /etc/skel/.bash_profile
, /etc/skel/.bashrc
, /etc/skel/.dir_colors
načeloma so primerni za Alpine Linux in ne povzročajo kritičnih težav, vendar imate morda drugačno distribucijo in morate neodvisno ugotoviti, ali je prišlo do napake pri izvajanju Bash v vsebniku.
Kopirajte datoteke skel v vsebnik. Ključ --create-dirs
bo ustvaril potrebne imenike, če ne obstajajo:
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
Za že obstoječega uporabnika root kopirajte datoteke skel, ki ste jih pravkar kopirali v vsebnik, v domači imenik:
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 namesti sistemsko lupino za uporabnike /bin/sh
, ga bomo nadomestili z root
uporabnik v Bashu:
lxc exec jupyterlab -- usermod --shell=/bin/bash root
To root
uporabnik ni bil brez gesla, mora nastaviti geslo. Naslednji ukaz mu bo ustvaril in nastavil novo naključno geslo, ki ga boste po izvedbi videli na zaslonu konzole:
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
Prav tako ustvarimo novega sistemskega uporabnika - jupyter
za katerega bomo kasneje konfigurirali jupyter lab:
lxc exec jupyterlab -- useradd --create-home --shell=/bin/bash jupyter
Ustvarimo in nastavimo geslo zanj:
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
Nato bomo izvedli dva ukaza, prvi bo ustvaril sistemsko skupino sudo
, drugi pa mu bo dodal uporabnika jupyter
:
lxc exec jupyterlab -- groupadd --system sudo
lxc exec jupyterlab -- groupmems --group sudo --add jupyter
Poglejmo, katerim skupinam uporabnik pripada jupyter
:
lxc exec jupyterlab -- id -Gn jupyter
jupyter sudo
Vse je ok, gremo naprej.
Dovoli vsem uporabnikom, ki so člani skupine sudo
uporabite ukaz sudo
. Če želite to narediti, zaženite naslednji skript, kjer sed
odkomentira vrstico parametrov v konfiguracijski datoteki /etc/sudoers
:
lxc exec jupyterlab -- /bin/bash -c "sed --in-place -e '/^#[ t]*%sudo[ t]*ALL=(ALL)[ t]*ALL$/ s/^[# ]*//' /etc/sudoers"
Namestitev in konfiguracija JupyterLab ^
jupyter lab je aplikacija Python, zato moramo najprej namestiti ta tolmač. tudi jupyter lab namestili bomo z upraviteljem paketov Python pip
, in ne sistemskega, ker je morda zastarel v sistemskem repozitoriju in moramo zato ročno razrešiti odvisnosti zanj z namestitvijo naslednjih paketov − python3 python3-dev gcc libc-dev zeromq-dev
:
lxc exec jupyterlab -- apk add python3 python3-dev gcc libc-dev zeromq-dev
Posodobimo module python in upravitelja paketov pip
na trenutno različico:
lxc exec jupyterlab -- python3 -m pip install --upgrade pip setuptools wheel
Set jupyter lab prek upravitelja paketov pip
:
lxc exec jupyterlab -- python3 -m pip install jupyterlab
Ker so razširitve v jupyter lab so eksperimentalni in niso uradno dobavljeni s paketom jupyterlab, zato jih moramo namestiti in konfigurirati ročno.
Namestimo NodeJS in upravitelja paketov zanj - NPM, saj jupyter lab jih uporablja za svoje razširitve:
lxc exec jupyterlab -- apk add nodejs npm
Do podaljškov za jupyter lab ki jih bomo namestili, so delovale, namestiti jih je treba v uporabniški imenik, saj bo aplikacija zagnana od uporabnika jupyter
. Težava je v tem, da v ukazu za zagon ni parametra, ki bi ga bilo mogoče posredovati v imenik; aplikacija sprejme samo spremenljivko okolja, zato jo moramo definirati. Da bi to naredili, bomo napisali ukaz za izvoz spremenljivke JUPYTERLAB_DIR
v okolju uporabnika jupyter
, v datoteko .bashrc
ki se izvede vsakič, ko se uporabnik prijavi:
lxc exec jupyterlab -- su -l jupyter -c "echo -e "nexport JUPYTERLAB_DIR=$HOME/.local/share/jupyter/lab" >> .bashrc"
Naslednji ukaz bo namestil posebno razširitev - upravitelj razširitev jupyter lab:
lxc exec jupyterlab -- su -l jupyter -c "export JUPYTERLAB_DIR=$HOME/.local/share/jupyter/lab; jupyter labextension install --no-build @jupyter-widgets/jupyterlab-manager"
Zdaj je vse pripravljeno za prvi zagon jupyter lab, vendar lahko vseeno namestimo nekaj uporabnih razširitev:
toc
— Kazalo, ustvari seznam naslovov v članku/zvezkujupyterlab-horizon-theme
— Tema uporabniškega vmesnikajupyterlab_neon_theme
— Tema uporabniškega vmesnikajupyterlab-ubu-theme
- Še en tema od avtorja ta članek :) Toda v tem primeru bo prikazana namestitev iz repozitorija GitHub
Torej, zaporedno zaženite naslednje ukaze, da namestite te razširitve:
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"
Ko namestimo razširitve, jih moramo prevesti, saj smo predhodno med namestitvijo določili ključ --no-build
da prihranite čas. Zdaj jih bomo znatno pospešili, tako da jih bomo sestavili skupaj naenkrat:
lxc exec jupyterlab -- su -l jupyter -c "export JUPYTERLAB_DIR=$HOME/.local/share/jupyter/lab; jupyter lab build"
Zdaj zaženite naslednja dva ukaza, da ga zaženete prvič jupyter lab. Lahko bi ga zagnali z enim ukazom, vendar si bo v tem primeru ukaz za zagon, ki si ga je težko zapomniti v mislih, zapomnil bash v kontejnerju in ne na gostitelju, kjer je ukazov že dovolj da jih zapišem v zgodovino :)
Prijavite se v vsebnik kot uporabnik jupyter
:
lxc exec jupyterlab -- su -l jupyter
Naprej teci jupyter lab s ključi in parametri, kot je navedeno:
[jupyter@jupyterlab ~]$ jupyter lab --ip=0.0.0.0 --no-browser
Pojdite na naslov v spletnem brskalniku http://10.0.5.5:8888 in na strani, ki se odpre, vnesite žeton dostop, ki ga boste videli v konzoli. Kopirajte in prilepite na stran, nato kliknite Prijava. Po prijavi pojdite v meni razširitev na levi, kot je prikazano na spodnji sliki, kjer boste ob aktiviranju upravitelja razširitev pozvani, da prevzamete varnostna tveganja z namestitvijo razširitev tretjih oseb, za katere ukaz Razvoj JupyterLaba ni odgovoren:
Vendar pa izoliramo celotno jupyter lab in ga postavimo v vsebnik, da razširitve tretjih oseb, ki zahtevajo in uporabljajo NodeJS, ne morejo vsaj ukrasti podatkov na disku, razen tistih, ki jih odpremo znotraj vsebnika. Pridite do svojih zasebnih dokumentov na gostitelju /home
procesi iz vsebnika verjetno ne bodo uspeli, in če bodo, potem morate imeti privilegije za datoteke v gostiteljskem sistemu, saj izvajamo vsebnik v neprivilegiran način. Na podlagi teh informacij lahko ocenite tveganje vključitve razširitev v jupyter lab.
Ustvaril zvezke IPython (strani v jupyter lab) bodo zdaj ustvarjene v uporabnikovem domačem imeniku - /home/jupyter
, a naši načrti so razdeliti podatke (delež) med gostiteljem in vsebnikom, zato se vrnite na konzolo in ustavite jupyter lab z izvajanjem hitre tipke - CTRL+C
in odgovarjanje y
na zahtevo. Nato prekinite uporabnikovo interaktivno sejo jupyter
dokončanje bližnjične tipke CTRL+D
.
Deljenje podatkov z gostiteljem ^
Če želite deliti podatke z gostiteljem, morate v vsebniku ustvariti napravo, ki vam to omogoča, in za to zaženite naslednji ukaz, kjer podamo naslednje ključe:
lxc config device add
— Ukaz doda konfiguracijo napravejupyter
— ID vsebnika, v katerega je dodana konfiguracijahostfs
— ID naprave. Nastavite lahko poljubno ime.disk
— Prikazana je vrsta napravepath
— Določa pot v vsebniku, kamor bo LXD namestil to napravosource
— Določite vir, pot do imenika na gostitelju, ki ga želite deliti z vsebnikom. Določite pot glede na svoje želje
lxc config device add jupyterlab hostfs disk path=/mnt/hostfs source=/home/dv/projects/ipython-notebooks
Za katalog /home/dv/projects/ipython-notebooks
dovoljenje mora biti nastavljeno na uporabnika vsebnika, ki ima trenutno enak UID SubUID + UID
, glejte poglavje Varnost. Privilegiji vsebnika v članku Osnovne značilnosti LXD - Linux kontejnerskih sistemov.
Nastavite dovoljenje za gostitelja, kjer bo lastnik uporabnik vsebnika jupyter
, in spremenljivko $USER
bo določil vašega gostiteljskega uporabnika kot skupino:
sudo chown 1001000:$USER /home/dv/projects/ipython-notebooks
Pozdravljen, svet! ^
Če imate še vedno odprto sejo konzole v vsebniku z jupyter lab, nato pa ga znova zaženite z novim ključem --notebook-dir
z nastavitvijo vrednosti /mnt/hostfs
kot pot do korena prenosnikov v vsebniku za napravo, ki smo jo ustvarili v prejšnjem koraku:
jupyter lab --ip=0.0.0.0 --no-browser --notebook-dir=/mnt/hostfs
Nato pojdite na stran http://10.0.5.5:8888 in ustvarite svoj prvi prenosni računalnik s klikom na gumb na strani, kot je prikazano na spodnji sliki:
Nato v polje na strani vnesite kodo Python, ki bo prikazala klasiko Hello World!
. Ko končate z vnosom, pritisnite CTRL+ENTER
ali gumb "play" v orodni vrstici na vrhu, da JupyterLab naredi to:
Na tej točki je skoraj vse pripravljeno za uporabo, vendar bo nezanimivo, če ne bomo namestili dodatnih modulov Python (polnopravnih aplikacij), ki lahko znatno razširijo standardne zmogljivosti Pythona v jupyter lab, torej gremo naprej :)
PS Zanimivo je, da stara izvedba Jupiter pod kodnim imenom Jupyter Notebook ni izginil in obstaja vzporedno z jupyter lab. Če želite preklopiti na staro različico, sledite povezavi in dodajte pripono v naslov/tree
, prehod na novo različico pa se izvede s pripono /lab
, vendar ni treba navesti:
- Jupyter Notebook - http://10.0.5.5:8888/tree
- Jupyter Lab - http://10.0.5.5:8888/lab
Razširitev zmogljivosti Pythona ^
V tem razdelku bomo namestili tako zmogljive jezikovne module Python, kot je numpy, pand, matplotlib, IPyWidgets katerih rezultati so integrirani v prenosnike jupyter lab.
Preden namestite navedene module Python prek upravitelja paketov pip
najprej moramo razrešiti sistemske odvisnosti v Alpine Linux:
g++
— Potreben za prevajanje modulov, saj so nekateri od njih implementirani v jeziku C + + in se med izvajanjem povežejo s Pythonom kot binarni modulifreetype-dev
- odvisnost za modul Python matplotlib
Namestitev odvisnosti:
lxc exec jupyterlab -- apk add g++ freetype-dev
Obstaja ena težava: v trenutnem stanju distribucije Alpine Linux ne bo mogoče prevesti nove različice NumPy; pojavila se bo napaka prevajanja, ki je nisem mogel odpraviti:
NAPAKA: Ni bilo mogoče zgraditi koles za numpy, ki uporabljajo PEP 517 in jih ni mogoče neposredno namestiti
Zato bomo ta modul namestili kot sistemski paket, ki distribuira že prevedeno različico, vendar nekoliko starejšo od tiste, ki je trenutno na voljo na spletnem mestu:
lxc exec jupyterlab -- apk add py3-numpy py3-numpy-dev
Nato namestite module Python prek upravitelja paketov pip
. Bodite potrpežljivi, saj se bodo nekateri moduli prevedli in lahko traja nekaj minut. Na mojem računalniku je prevajanje trajalo približno 15 minut:
lxc exec jupyterlab -- python3 -m pip install pandas ipywidgets matplotlib
Čiščenje predpomnilnika namestitve:
lxc exec jupyterlab -- rm -rf /home/*/.cache/pip/*
lxc exec jupyterlab -- rm -rf /root/.cache/pip/*
Testiranje modulov v JupyterLab ^
Če tečete jupyter lab, ga znova zaženite, da se aktivirajo na novo nameščeni moduli. Če želite to narediti, v seji konzole kliknite CTRL+C
kjer imate zagnano in vstopite y
da ustavite zahtevo in nato začnete znova jupyter lab s pritiskom na puščico navzgor na tipkovnici, da ukaza ne vnesete znova in nato Enter
za začetek:
jupyter lab --ip=0.0.0.0 --no-browser --notebook-dir=/mnt/hostfs
Pojdite na stran http://10.0.5.5:8888/lab ali osvežite stran v brskalniku in nato v novo celico beležnice vnesite to kodo:
%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
Morali bi dobiti rezultat kot na spodnji sliki, kjer IPyWidgets ustvari element uporabniškega vmesnika na strani, ki interaktivno sodeluje z izvorno kodo, in tudi matplotlib prikaže rezultat kode v obliki slike kot funkcijski graf:
Veliko primerov IPyWidgets najdete ga v vadnicah tukaj
Kaj drugega? ^
Bravo, če si ostal in prišel do samega konca članka. Na koncu članka namenoma nisem objavil že pripravljenega skripta, ki bi se namestil jupyter lab v “enem kliku” za spodbujanje delavcev :) Lahko pa to storite sami, saj že veste kako, ko ste zbrali ukaze v en sam Bash skript :)
Lahko tudi:
- Nastavite omrežno ime za vsebnik namesto naslova IP, tako da ga napišete v preprostem
/etc/hosts
in vtipkajte naslov v brskalnik http://jupyter.local:8888 - Poigrajte se z omejitvijo virov za vsebnik, za to preberite poglavje v osnovne zmogljivosti LXD ali dobite več informacij na spletnem mestu za razvijalce LXD.
- Spremenite temo:
In še veliko več lahko storite! To je vse. Želim ti uspeh!
POSODOBITEV: 15.04.2020. 18. 30 XNUMX:XNUMX - Popravljene napake v poglavju “Hello, World!”
POSODOBITEV: 16.04.2020. 10. 00 XNUMX:XNUMX — Popravljeno in dodano besedilo v opisu aktivacije upravitelja razširitev jupyter lab
POSODOBITEV: 16.04.2020. 10. 40 XNUMX:XNUMX — Popravljene najdene napake v besedilu in nekoliko spremenjeno na bolje poglavje “Namestitev osnovne programske opreme in nastavitev sistema”
Vir: www.habr.com