Lansiranje Jupytera u LXD orbitu

Jeste li ikada morali eksperimentirati s kodom ili sustavnim uslužnim programima u Linuxu bez brige o temeljnom sustavu i rušenja svega u slučaju greške u kodu koji bi trebao raditi s root privilegijama?

Ali što je s činjenicom da recimo trebate testirati ili pokrenuti cijeli klaster raznih mikroservisa na jednom stroju? Sto ili čak tisuću?

S virtualnim strojevima kojima upravlja hipervizor, takvi se problemi mogu i bit će riješeni, ali po koju cijenu? Na primjer, spremnik u LXD-u temeljen na distribuciji Alpine Linuxa troši samo 7.60MB RAM-a i gdje se korijenska particija nalazi nakon pokretanja 9.5MB! Kako ti se to sviđa, Elon Musk? Preporučujem odjavu osnovne mogućnosti LXD-a - kontejnerskog sustava u Linuxu

Nakon što je općenito postalo jasno što su LXD spremnici, idemo dalje i razmislimo, što ako postoji takva harvester platforma na kojoj možete sigurno pokretati kod za host, generirati grafikone, dinamički (interaktivno) povezivati ​​UI- widgete sa svojim kodom, dopuniti kod tekstom s blackjackom... formatiranje? Neka vrsta interaktivnog bloga? Wow... Želim to! želim! 🙂

Pogledajte ispod mačke gdje ćemo lansirati u kontejner jupyter lab - sljedeća generacija korisničkog sučelja umjesto zastarjelog Jupyter Notebooka, a instalirat ćemo i Python module kao npr. numpy, pande, matplotlib, IPyWidgets koji će vam omogućiti sve gore navedeno i sve to spremiti u posebnu datoteku – IPython laptop.

Lansiranje Jupytera u LXD orbitu

Plan orbitalnog polijetanja ^

Lansiranje Jupytera u LXD orbitu

Navedimo kratak akcijski plan koji će nam olakšati provedbu gornje sheme:

  • Instalirajmo i pokrenimo spremnik na temelju distribucijskog kompleta Alpine Linux. Koristit ćemo ovu distribuciju jer je usmjerena na minimalizam i u nju ćemo instalirati samo najnužniji softver, ništa suvišno.
  • Dodajmo dodatni virtualni disk u spremnik i dajmo mu ime - hostfs i montirajte ga na korijenski datotečni sustav. Ovaj disk će omogućiti korištenje datoteka na hostu iz određenog direktorija unutar spremnika. Stoga će naši podaci biti neovisni o spremniku. Ako se spremnik izbriše, podaci će ostati na glavnom računalu. Također, ova je shema korisna za dijeljenje istih podataka između više spremnika bez korištenja standardnih mrežnih mehanizama distribucije spremnika.
  • Instalirajmo Bash, sudo, potrebne biblioteke, dodamo i konfiguriramo korisnika sustava
  • Instalirajmo Python, module i prevedimo binarne ovisnosti za njih
  • Instalirajmo i pokrenimo jupyter lab, prilagodite izgled, instalirajte proširenja za njega.

U ovom ćemo članku započeti s pokretanjem spremnika, nećemo razmatrati instaliranje i konfiguriranje LXD-a, sve to možete pronaći u drugom članku - Osnovne karakteristike LXD - Linux kontejnerskih sustava.

Instalacija i konfiguracija osnovnog sustava ^

Kreiramo spremnik s naredbom u kojoj specificiramo sliku - alpine3, identifikator za spremnik - jupyterlab i, ako je potrebno, konfiguracijski profili:

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

Ovdje koristim konfiguracijski profil hddroot koji specificira stvaranje spremnika s korijenskom particijom Bazen za pohranu nalazi se na fizičkom 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 priliku eksperimentirati sa spremnicima na HDD disku, štedeći resurse SSD diska, koji je također dostupan u mom sustavu 🙂 za koji sam napravio zaseban konfiguracijski profil ssdroot.

Nakon što je spremnik kreiran, on je u stanju STOPPED, pa ga moramo pokrenuti pokretanjem init sustava u njemu:

lxc start jupyterlab

Prikažimo popis spremnika u LXD pomoću tipke -c koji označava koji cglavni prikaz:

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

Prilikom izrade spremnika, IP adresa je odabrana nasumično, jer smo koristili konfiguracijski profil default koji je prethodno konfiguriran u članku Osnovne karakteristike LXD - Linux kontejnerskih sustava.

Promijenit ćemo ovu IP adresu u nezaboravniju stvaranjem mrežnog sučelja na razini spremnika, a ne na razini konfiguracijskog profila kao što je sada u trenutnoj konfiguraciji. Ne morate to učiniti, možete to preskočiti.

Izrada mrežnog sučelja eth0 koji povezujemo s switchem (mrežnim mostom) lxdbr0 u kojem smo uključili NAT prema prethodnom članku i spremnik će sada imati pristup internetu, a sučelju također dodjeljujemo statičku IP adresu - 10.0.5.5:

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

Nakon dodavanja uređaja, spremnik se mora ponovno pokrenuti:

lxc restart jupyterlab

Provjera statusa spremnika:

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

Instalacija osnovnog softvera i postavljanje sustava ^

Za administriranje našeg spremnika morate instalirati sljedeći softver:

Paket
Opis

udariti
Ljuska GNU Bourne Again

bash-završetak
Programabilno dovršenje za bash ljusku

sudo
Dajte određenim korisnicima mogućnost pokretanja nekih naredbi kao root

sjena
Paket alata za upravljanje lozinkama i računima s podrškom za shadow datoteke i PAM

tzdata
Izvori podataka o vremenskoj zoni i ljetnom računanju vremena

nano
Pico editor klon s poboljšanjima

Osim toga, možete instalirati podršku na stranice priručnika sustava instaliranjem sljedećih paketa − man man-pages mdocml-apropos less

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

Pogledajmo naredbe i tipke koje smo koristili:

  • lxc — Nazovite LXD klijenta
  • exec - LXD klijentska metoda koja pokreće naredbu u spremniku
  • jupyterlab — ID kontejnera
  • -- - Poseban ključ koji navodi da se daljnji ključevi ne tumače kao ključevi za lxc i proslijedite ostatak niza kakav jest u spremnik
  • apk — Alpine Linux distribucijski upravitelj paketa
  • add — Metoda upravitelja paketa koja instalira pakete navedene nakon naredbe

Zatim ćemo postaviti vremensku zonu u sustavu Europe/Moscow:

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

Nakon instaliranja vremenske zone, paket tzdata više nije potreban u sustavu, zauzet će prostor, pa ga brišimo:

lxc exec jupyterlab -- apk del tzdata

Provjera vremenske zone:

lxc exec jupyterlab -- date

Wed Apr 15 10:49:56 MSK 2020

Kako ne bismo trošili puno vremena na postavljanje Basha za nove korisnike u spremniku, u sljedećim koracima kopirat ćemo gotove skel datoteke s glavnog sustava na njega. To će vam omogućiti interaktivno uljepšavanje Basha u spremniku. Moj host sustav je Manjaro Linux i datoteke koje se kopiraju /etc/skel/.bash_profile, /etc/skel/.bashrc, /etc/skel/.dir_colors u načelu su prikladni za Alpine Linux i ne uzrokuju kritične probleme, ali možda imate drugačiju distribuciju i morate samostalno otkriti postoji li greška prilikom pokretanja Basha u spremniku.

Kopirajte skel datoteke u spremnik. Ključ --create-dirs će stvoriti potrebne direktorije ako ne postoje:

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 postojećeg root korisnika, kopirajte skel datoteke koje ste upravo kopirali u spremnik u početni direktorij:

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 instalira ljusku sustava za korisnike /bin/sh, zamijenit ćemo ga s root korisnik u Bashu:

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

Da root korisnik nije bio bez lozinke, mora postaviti lozinku. Sljedeća naredba će mu generirati i postaviti novu nasumičnu lozinku, koju ćete vidjeti na ekranu konzole nakon njenog izvršenja:

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

Također, kreirajmo novog korisnika sustava - jupyter za koje ćemo kasnije konfigurirati jupyter lab:

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

Generirajmo i postavimo lozinku za to:

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

Zatim ćemo izvršiti dvije naredbe, prva će stvoriti grupu sustava sudo, a drugi će mu dodati korisnika jupyter:

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

Pogledajmo kojim skupinama korisnik pripada jupyter:

lxc exec jupyterlab -- id -Gn jupyter

jupyter sudo

Sve je ok, idemo dalje.

Dopusti svim korisnicima koji su članovi grupe sudo koristiti naredbu sudo. Da biste to učinili, pokrenite sljedeću skriptu, gdje sed dekomentira red parametra u konfiguracijskoj datoteci /etc/sudoers:

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

Instalacija i konfiguracija JupyterLaba ^

jupyter lab je Python aplikacija, pa prvo moramo instalirati ovaj tumač. Također, jupyter lab instalirat ćemo pomoću Python upravitelja paketa pip, a ne sistemski, jer je možda zastario u sistemskom repozitoriju i stoga moramo ručno riješiti ovisnosti za njega instaliranjem sljedećih paketa − python3 python3-dev gcc libc-dev zeromq-dev:

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

Ažurirajmo python module i upravitelj paketa pip na trenutnu verziju:

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

Postaviti jupyter lab putem upravitelja paketa pip:

lxc exec jupyterlab -- python3 -m pip install jupyterlab

Budući da su ekstenzije u jupyter lab eksperimentalni su i službeno se ne isporučuju s paketom jupyterlab, pa ga moramo ručno instalirati i konfigurirati.

Instalirajmo NodeJS i upravitelj paketa za njega - NPM, jer jupyter lab koristi ih za svoja proširenja:

lxc exec jupyterlab -- apk add nodejs npm

Na ekstenzije za jupyter lab koje ćemo instalirati radile su, potrebno ih je instalirati u korisnički direktorij jer će se aplikacija pokrenuti od korisnika jupyter. Problem je u tome što u naredbi za pokretanje ne postoji parametar koji se može proslijediti direktoriju; aplikacija prihvaća samo varijablu okruženja i stoga je moramo definirati. Da bismo to učinili, napisat ćemo naredbu za izvoz varijable JUPYTERLAB_DIR u okruženju korisnika jupyter, podnijeti .bashrckoji se izvršava svaki put kada se korisnik prijavi:

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

Sljedeća naredba će instalirati posebno proširenje - upravitelj proširenja 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"

Sada je sve spremno za prvo lansiranje jupyter lab, ali još uvijek možemo instalirati nekoliko korisnih proširenja:

  • toc — Sadržaj, generira popis naslova u članku/bilježnici
  • jupyterlab-horizon-theme — Tema korisničkog sučelja
  • jupyterlab_neon_theme — Tema korisničkog sučelja
  • jupyterlab-ubu-theme - Još jedan tema od autora ovaj članak :) Ali u ovom slučaju bit će prikazana instalacija iz repozitorija GitHub

Dakle, redom pokrenite sljedeće naredbe da biste instalirali ova proširenja:

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"

Nakon instaliranja ekstenzija, moramo ih kompajlirati, jer smo prethodno, tijekom instalacije, naveli ključ --no-build da uštedi vrijeme. Sada ćemo značajno ubrzati kompajlirajući ih zajedno u jednom potezu:

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

Sada pokrenite sljedeće dvije naredbe da biste ga pokrenuli prvi put jupyter lab. Bilo bi ga moguće pokrenuti jednom naredbom, ali u ovom slučaju naredbu pokretanja, koju je teško zapamtiti u glavi, bash će zapamtiti u kontejneru, a ne na hostu, gdje već ima dovoljno naredbi da ih upišem u povijest :)

Prijavite se u spremnik kao korisnik jupyter:

lxc exec jupyterlab -- su -l jupyter

Dalje, trči jupyter lab s ključevima i parametrima kako je naznačeno:

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

Idite na adresu u svom web pregledniku http://10.0.5.5:8888 i na stranici koja se otvori unesite znak pristup koji ćete vidjeti u konzoli. Kopirajte ga i zalijepite na stranicu, a zatim kliknite Prijava. Nakon prijave, idite na izbornik proširenja na lijevoj strani, kao što je prikazano na donjoj slici, gdje ćete biti upitani, kada aktivirate upravitelj proširenja, da preuzmete sigurnosne rizike instaliranjem proširenja trećih strana za koje naredba Razvoj JupyterLaba nije odgovoran:

Lansiranje Jupytera u LXD orbitu

Međutim, mi izoliramo cijelu jupyter lab i smjestiti u spremnik tako da ekstenzije trećih strana koje zahtijevaju i koriste NodeJS ne mogu barem ukrasti podatke na disku osim onih koje otvorimo unutar spremnika. Dođite do svojih privatnih dokumenata na mjestu domaćina /home procesi iz spremnika vjerojatno neće uspjeti, a ako uspiju, tada trebate imati privilegije nad datotekama na glavnom sustavu, budući da spremnik pokrećemo u neprivilegirani način rada. Na temelju ovih informacija možete procijeniti rizik uključivanja ekstenzija u jupyter lab.

Kreirane IPython bilježnice (stranice u jupyter lab) sada će se stvoriti u početnom imeniku korisnika - /home/jupyter, ali naši planovi su podijeliti podatke (dijeliti) između glavnog računala i spremnika, stoga se vratite na konzolu i prestanite jupyter lab izvršavanjem prečaca - CTRL+C i odgovaranje y na zahtjev. Zatim prekinite korisnikovu interaktivnu sesiju jupyter dovršavanje prečaca CTRL+D.

Dijeljenje podataka s hostom ^

Da biste dijelili podatke s hostom, morate stvoriti uređaj u spremniku koji vam to omogućuje, a da biste to učinili, pokrenite sljedeću naredbu gdje navodimo sljedeće ključeve:

  • lxc config device add — Naredba dodaje konfiguraciju uređaja
  • jupyter — ID spremnika u koji je dodana konfiguracija
  • hostfs — ID uređaja. Možete postaviti bilo koje ime.
  • disk — Prikazana je vrsta uređaja
  • path — Određuje stazu u spremniku na koji će LXD montirati ovaj uređaj
  • source — Navedite izvor, put do direktorija na hostu koji želite dijeliti sa spremnikom. Odredite put prema svojim željama
lxc config device add jupyterlab hostfs disk path=/mnt/hostfs source=/home/dv/projects/ipython-notebooks

Za katalog /home/dv/projects/ipython-notebooks dopuštenje mora biti postavljeno na korisnika spremnika koji trenutno ima UID jednak SubUID + UID, vidi poglavlje Sigurnost. Privilegije spremnika u članku Osnovne karakteristike LXD - Linux kontejnerskih sustava.

Postavite dopuštenje na glavnom računalu, gdje će vlasnik biti korisnik spremnika jupyter, i varijabla $USER navest će vašeg host korisnika kao grupu:

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

Pozdrav svijete! ^

Ako još uvijek imate otvorenu sesiju konzole u spremniku sa jupyter lab, zatim ga ponovno pokrenite s novim ključem --notebook-dir postavljanjem vrijednosti /mnt/hostfs kao put do korijena prijenosnih računala u spremniku za uređaj koji smo stvorili u prethodnom koraku:

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

Zatim idite na stranicu http://10.0.5.5:8888 i kreirajte svoje prvo prijenosno računalo klikom na gumb na stranici kao što je prikazano na slici ispod:

Lansiranje Jupytera u LXD orbitu

Zatim u polje na stranici unesite Python kod koji će prikazati klasik Hello World!. Kada završite s unosom, pritisnite CTRL+ENTER ili gumb "play" na alatnoj traci na vrhu kako bi JupyterLab učinio ovo:

Lansiranje Jupytera u LXD orbitu

U ovom trenutku gotovo je sve spremno za korištenje, ali bit će nezanimljivo ako ne instaliramo dodatne Python module (punopravne aplikacije) koji mogu značajno proširiti standardne mogućnosti Pythona u jupyter lab, dakle, idemo dalje :)

PS Zanimljivo je da je stara implementacija Jupiter pod kodnim imenom Jupyterova bilježnica nije nestao i postoji paralelno sa jupyter lab. Za prebacivanje na staru verziju slijedite poveznicu dodajući sufiks u adresu/tree, a prijelaz na novu verziju provodi se sufiksom /lab, ali ne mora biti navedeno:

Proširenje mogućnosti Pythona ^

U ovom ćemo odjeljku instalirati tako moćne module jezika Python kao što su numpy, pande, matplotlib, IPyWidgets čiji su rezultati integrirani u prijenosna računala jupyter lab.

Prije instaliranja navedenih Python modula putem upravitelja paketa pip prvo moramo riješiti ovisnosti sustava u Alpine Linuxu:

  • g++ — Potreban za kompajliranje modula, budući da su neki od njih implementirani u jeziku C + + i povezati se s Pythonom tijekom izvođenja kao binarni moduli
  • freetype-dev - ovisnost za Python modul matplotlib

Instaliranje ovisnosti:

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

Postoji jedan problem: u trenutnom stanju distribucije Alpine Linuxa, neće biti moguće kompajlirati novu verziju NumPyja; pojavit će se greška kompilacije koju nisam mogao riješiti:

POGREŠKA: Nije moguće izgraditi kotače za numpy koji koriste PEP 517 i ne mogu se izravno instalirati

Stoga ćemo ovaj modul instalirati kao sistemski paket koji distribuira već kompiliranu verziju, ali malo stariju od onoga što je trenutno dostupno na stranici:

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

Zatim instalirajte Python module putem upravitelja paketa pip. Budite strpljivi jer će se neki moduli kompilirati i može potrajati nekoliko minuta. Na mom stroju kompilacija je trajala ~15 minuta:

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

Brisanje predmemorije instalacije:

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

Testiranje modula u JupyterLabu ^

Ako trčite jupyter lab, ponovno ga pokrenite tako da se aktiviraju novoinstalirani moduli. Da biste to učinili, u sesiji konzole kliknite CTRL+C gdje imate pokrenuto i unesite y da biste zaustavili zahtjev i zatim počeli ponovno jupyter lab pritiskom na strelicu prema gore na tipkovnici kako ne biste ponovno unijeli naredbu i zatim Enter za početak:

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

Idite na stranicu http://10.0.5.5:8888/lab ili osvježite stranicu u svom pregledniku, a zatim unesite sljedeći kod u novu ćeliju bilježnice:

%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

Trebali biste dobiti rezultat kao na slici ispod, gdje IPyWidgets generira element korisničkog sučelja na stranici koji interaktivno komunicira s izvornim kodom, a također matplotlib prikazuje rezultat koda u obliku slike kao graf funkcije:

Lansiranje Jupytera u LXD orbitu

Mnogo primjera IPyWidgets možete ga pronaći u tutorialima здесь

Što drugo? ^

Bravo ako ste ostali i došli do samog kraja članka. Namjerno nisam na kraju članka postavio gotovu skriptu koja bi se instalirala jupyter lab u “jedan klik” za poticanje radnika :) Ali to možete i sami, budući da već znate kako, sakupivši naredbe u jednu Bash skriptu :)

Također možete:

  • Postavite naziv mreže za spremnik umjesto IP adrese tako da ga napišete jednostavnim /etc/hosts i upišite adresu u preglednik http://jupyter.local:8888
  • Poigrajte se s ograničenjem resursa za spremnik, za to pročitajte sljedeće poglavlje osnovne LXD mogućnosti ili potražite više informacija na stranici za razvojne programere LXD.
  • Promjena teme:

Lansiranje Jupytera u LXD orbitu

I još mnogo toga možete učiniti! To je sve. Želim ti uspjeh!

AŽURIRANJE: 15.04.2020 18:30 - Ispravljene greške u poglavlju “Hello, World!”
AŽURIRANJE: 16.04.2020. 10:00 — Ispravljen i dodan tekst u opisu aktivacije upravitelja proširenja jupyter lab
AŽURIRANJE: 16.04.2020 10:40 — Ispravljene greške pronađene u tekstu i malo poboljšano poglavlje “Instalacija osnovnog softvera i postavljanje sustava”

Izvor: www.habr.com

Dodajte komentar