Izstrelitev Jupytra v orbito LXD

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.

Izstrelitev Jupytra v orbito LXD

Načrt orbitalnega vzleta ^

Izstrelitev Jupytra v orbito LXD

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 LXD
  • exec - Odjemalska metoda LXD, ki zažene ukaz v vsebniku
  • jupyterlab — ID vsebnika
  • -- - Poseben ključ, ki določa, da se nadaljnji ključi ne razlagajo kot ključi za lxc in preostali del niza prenesite v vsebnik
  • apk — Upravitelj distribucijskih paketov Alpine Linux
  • add — 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 .bashrcki 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/zvezku
  • jupyterlab-horizon-theme — Tema uporabniškega vmesnika
  • jupyterlab_neon_theme — Tema uporabniškega vmesnika
  • jupyterlab-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:

Izstrelitev Jupytra v orbito LXD

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 naprave
  • jupyter — ID vsebnika, v katerega je dodana konfiguracija
  • hostfs — ID naprave. Nastavite lahko poljubno ime.
  • disk — Prikazana je vrsta naprave
  • path — Določa pot v vsebniku, kamor bo LXD namestil to napravo
  • source — 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:

Izstrelitev Jupytra v orbito LXD

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:

Izstrelitev Jupytra v orbito LXD

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:

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 moduli
  • freetype-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:

Izstrelitev Jupytra v orbito LXD

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:

Izstrelitev Jupytra v orbito LXD

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

Dodaj komentar