Szükséged volt arra, hogy kódot vagy rendszersegédprogramokat kísérletezz a Linuxban, úgy, hogy ne kelljen félned az alap rendszer elvesztésétől, ha a kód, amelynek root jogosultságokkal kell futnia, hibát tartalmaz?
Mi a helyzet azzal, ha például tesztelni vagy elindítani kell egy egész klasztert különböző mikroszolgáltatásokból egy gépen? Százat vagy akár ezret?
A virtuális gépekkel, amelyeket hypervisor kezel, megoldhatók ezek a feladatok, de milyen áron? Például egy LXD konténer az Alpine Linux disztribúcióra építve minimálisan mindössze 7.60MB RAM-ot fogyaszt, és ahol a gyökérpartíció indítás után foglalja el 9.5MB! Mit szólsz ehhez, Elon Musk? Javaslom, hogy nézd át az LXD alapvető funkcióit — konténerrendszer Linuxban
Miután általában tisztában vagyunk vele, hogy mik is azok az LXD konténerek, nézzük meg, hogy mi lenne, ha lenne egy olyan platform, ahol biztonságosan indíthatnánk kódot a gazda számára, grafikákat generálhatnánk, dinamikusan (interaktívan) összekapcsolhatnánk a UI widgeteket a kódoddal, és szöveget adhatnánk hozzá blackjackkel... és formázással? Valami olyasmi, mint egy interaktív blog? Wow… Akarlak! Akarlak! 🙂
Nézd meg, ahol egy konténerben elindítjuk a JupyterLab — a következő generációs felhasználói felületet az elavult Jupyter Notebook helyett, valamint telepítjük az alábbi Python modulokat, mint például NumPy, Pandas, Matplotlib, IPyWidgets amelyek lehetővé teszik az összes fent említett dolgot, és mindezt egy speciális fájlba — IPython-naplóba — elmenthetjük.

Navigáció
- Kilövési terv az orbitális pályára
- A rendszer alaptelepítése és beállítása
- Alap szoftver telepítése és a rendszer beállítása
- A JupyterLab telepítése és beállítása
- Adatok megosztása a gazdával
- Hello, World!
- A Python képességeinek bővítése
- Modulok tesztelése a JupyterLabban
- Mi mást?
Kilövési terv az orbitális pályára ^

Összeállítunk egy rövid cselekvési tervet, hogy egyszerűbb legyen a fent vázolt rendszer megvalósítása:
- Telepítünk és elindítunk egy konténert a disztribúció alapján Alpine Linux. Ezt a disztribúciót azért választjuk, mert minimalista megközelítést alkalmaz, és csak a legszükségesebb szoftvert telepítjük, semmi feleslegeset.
- Hozzáadunk egy további virtuális lemezt a konténerhez, amelynek nevet adunk —
hostfsés csatlakozunk a gyökér fájlrendszerhez. Ez a lemez lehetővé teszi, hogy a hoszton található fájlokat a konténeren belüli megadott mappából használjuk. Így az adatok függetlenek maradnak a konténertől. Ha a konténert töröljük, az adatok megmaradnak a hoszton. Ez a megoldás hasznos az adatok több konténer közötti megosztásában anélkül, hogy a konténer disztribúciójának beépített hálózati mechanizmusait használnánk. - Telepítjük a Bash-t, a sudo-t, a szükséges könyvtárakat, hozzáadjuk és beállítjuk a rendszerfelhasználót.
- Telepítjük a Python-t, a modulokat, és lefordítjuk a hozzájuk tartozó bináris függőségeket.
- Telepítjük és elindítjuk. JupyterLab, beállítjuk a megjelenést, telepítünk bővítményeket hozzá.
Ebben a cikkben a konténer indításával kezdjük, nem fogjuk megvizsgálni az LXD telepítését és konfigurálását, ezt egy másik cikkben találhatja meg — Az LXD alapvető funkciói — konténer rendszerek Linux alatt.
A rendszer alaptelepítése és beállítása ^
Konténert hozunk létre a következő parancs segítségével, amelyben megadjuk a képet — alpine3, azonosítót a konténer számára — jupyterlab és szükség esetén a konfigurációs profilt:
lxc init alpine3 jupyterlab --profile=default --profile=hddrootItt konfigurációs profilt használok, hddroot amely megadja, hogy a konténert a gyökér particióval hozzuk létre, Storage Pool mely a fizikai HDD lemezen található:
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:
- noneEz lehetővé teszi számomra, hogy kísérletezzek a konténerekkel HDD lemezen, miközben spórolok az SSD lemez erőforrásaival, amely szintén megtalálható a rendszeremben 🙂, amelyhez külön konfigurációs profilt hoztam létre. ssdroot.
A konténer létrehozása után az állapota STOPPED, ezért el kell indítanunk, elindítva benne az init rendszert:
lxc start jupyterlabAz LXD konténerek listáját lekérdezzük a következő kulccsal, -c amely megadja, hogy melyek columns jelenjenek meg a képernyőn:
lxc list -c ns4b
+------------+---------+-------------------+--------------+
| NAME | STATE | IPV4 | STORAGE POOL |
+------------+---------+-------------------+--------------+
| jupyterlab | RUNNING | 10.0.5.198 (eth0) | hddpool |
+------------+---------+-------------------+--------------+A konténer létrehozásakor az IP cím véletlenszerűen lett kiválasztva, mivel a korábban konfigurált profilt használtuk. alapértelmezett amely korábban került beállításra a cikkben. Az LXD alapvető funkciói — konténer rendszerek Linux alatt.
Meg fogjuk változtatni ezt az IP címet egy könnyebben megjegyezhetőre, létrehozva egy hálózati interfészt a konténer szintjén, nem pedig a konfigurációs profil szintjén, ahogy a jelenlegi konfigurációban van. Ez nem kötelező, ki is hagyhatja.
Hálózati interfészt hozunk létre eth0 amelyet egy switch-csel (hálózati híddal) kapcsolunk össze lxdbr0 amelyben a NAT-ot a korábbi cikk alapján aktiváltuk, és a konténer mostantól internet-hozzáféréssel rendelkezik, emellett statikus IP-címet is rendelünk az interfészhez — 10.0.5.5:
lxc config device add jupyterlab eth0 nic name=eth0 nictype=bridged parent=lxdbr0 ipv4.address=10.0.5.5Az eszköz hozzáadása után újra kell indítani a konténert:
lxc restart jupyterlabEllenőrizzük a konténer állapotát:
lxc list -c ns4b
+------------+---------+------------------+--------------+
| NAME | STATE | IPV4 | STORAGE POOL |
+------------+---------+------------------+--------------+
| jupyterlab | RUNNING | 10.0.5.5 (eth0) | hddpool |
+------------+---------+------------------+--------------+Alap szoftver telepítése és a rendszer beállítása ^
A konténerünk adminisztrálásához a következő szoftvert kell telepítenünk:
Package
Leírás
bash
A GNU Bourne Again shell
, tehát először is telepítenie kell.
Programozható kiegészítés a bash shellhez
sudo
Bizonyos felhasználók számára lehetővé teszi bizonyos parancsok rootként való futtatását
shadow
Jelszó- és fiókkezelő eszközcsomag shadow fájlok és PAM támogatásával
tzdata
Források az időzónák és a nyári időszámítás adataira vonatkozóan
nano
Pico szövegszerkesztő klón fejlesztésekkel
Továbbá, a rendszer man-pages támogatását telepítheti az alábbi csomagok telepítésével — man man-pages mdocml-apropos less
lxc exec jupyterlab -- apk add bash bash-completion sudo shadow tzdata nanoNézzük meg a parancsokat és az általunk használt kulcsokat:
lxc— Az LXD kliens hívásaexec— Az LXD kliens módszere, amely parancsot indít a konténerbenjupyterlab— A konténer azonosítója--— Különleges kulcs, amely jelzi, hogy a további kulcsokat ne értelmezzük kulcskéntlxcés az összes maradék sort változatlanul adjuk át a konténernekapk— Az Alpine Linux disztribúció csomagkezelőjeadd— A csomagkezelő módszere, amely telepíti a parancs után megadott csomagokat
Ezután állítsuk be a rendszer időzónáját Europe/Moscow:
lxc exec jupyterlab -- cp /usr/share/zoneinfo/Europe/Moscow /etc/localtimeAz időzóna telepítése után a csomag tzdata a rendszerben már nem szükséges, helyet foglal el, így töröljük:
lxc exec jupyterlab -- apk del tzdataEllenőrizzük az időzónát:
lxc exec jupyterlab -- date
Wed Apr 15 10:49:56 MSK 2020Annak érdekében, hogy ne pazaroljuk az időt a Bash új felhasználók számára történő beállítására, a következő lépésekkel a hoszt rendszerből átmásoljuk a kész skel fájlokat a konténerbe. Ez lehetővé teszi a Bash szebbé tételét interaktív módban a konténerben. Az én hoszt rendszerem a Manjaro Linux, és a másolt fájlok /etc/skel/.bash_profile, /etc/skel/.bashrc, /etc/skel/.dir_colors elvileg alkalmasak az Alpine Linuxra, és nem okoznak kritikus problémákat, de előfordulhat, hogy Ön más disztribúciót használ, és önállóan kell megoldania a konténerben futó Bash hibáját.
Másoljuk át a skel fájlokat a konténerbe. A kulcs --create-dirs létrehozza a szükséges könyvtárakat, ha még nem léteznek:
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_colorsA már létező root felhasználónak a konténerbe másolt skel-fájlokat az otthoni könyvtárába másoljuk:
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_colorsAlpine Linuxban a felhasználók számára rendszerszintű shell-t állítunk be /bin/sh, ezt pedig Bash-ra cseréljük: , felhasználó nevében fut, mivel alapvető rendszerbeállításokat módosítanak, de a WordPress közvetlenül egy normál felhasználóként működik. lxc exec jupyterlab -- usermod --shell=/bin/bash root
A felhasználónak nem volt jelszava, ezért jelszót kell beállítania. A következő parancs generál és állít be neki egy új véletlenszerű jelszót, amelyet a konzol képernyőjén fog látni a parancs futása után:Ahhoz, hogy , felhasználó nevében fut, mivel alapvető rendszerbeállításokat módosítanak, de a WordPress közvetlenül egy normál felhasználóként működik. 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
Továbbá, létrehozunk egy új rendszerszintű felhasználót —jupyter akinek később beállítjuk lxc exec jupyterlab -- useradd --create-home --shell=/bin/bash jupyter JupyterLab:
Létrehozunk és beállítunk neki jelszó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
Ezután végrehajtunk két parancsot, az első létrehozza a rendszerszintű csoportot, a második pedig hozzáadja a felhasználót hozzá sudolxc exec jupyterlab -- groupadd --system sudo lxc exec jupyterlab -- groupmems --group sudo --add jupyter akinek később beállítjuk:
Nézzük meg, hogy a felhasználó mely csoportokhoz tartoziklxc exec jupyterlab -- id -Gn jupyterjupyter sudo akinek később beállítjuk:
Minden rendben — folytassuk.Engedélyezzük minden felhasználónak, aki a csoport tagja, hogy használhassa a parancsot
. Ehhez hajtsa végre a következő scriptet, amely sudo kikapcsolja a mondat paraméterét a konfigurációs fájlban sudolxc exec jupyterlab -- /bin/bash -c "sed --in-place -e ' /^#[ t]*%sudo[ t]*ALL=(ALL)[ t]*ALL$/ s/^[# ]*// ' /etc/sudoers" sed — ez egy Python alkalmazás, ezért először telepítenünk kell ezt az értelmezőt. Továbbá, /etc/sudoers:
a python csomagkezelő segítségével fogunk telepíteniA JupyterLab telepítése és beállítása ^
JupyterLab , nem a rendszerszintűvel, mert a rendszerszintű repository-ban elavult lehet, ezért kézzel kell engedélyeznünk a függőségeket az alábbi csomagok telepítésével — JupyterLab python3 python3-dev gcc libc-dev zeromq-dev piplxc exec jupyterlab -- apk add python3 python3-dev gcc libc-dev zeromq-dev Frissítjük a python modulokat és a csomagkezelőt:
a legfrissebb verzióra:lxc exec jupyterlab -- python3 -m pip install --upgrade pip setuptools wheel pip a csomagkezelőn keresztül
lxc exec jupyterlab -- python3 -m pip install jupyterlabTelepítünk JupyterLab Mivel a kiegészítők pip:
lxc exec jupyterlab -- python3 -m pip install jupyterlabMivel az extensionök a JupyterLab kísérleti jellegűek és hivatalosan nem tartoznak a jupyterlab csomaghoz, ezért ezt manuálisan kell telepítenünk és beállítanunk.
Telepítsük a NodeJS-t és a csomagkezelőt, a NPM-et, mivel JupyterLab ezeket használja a bővítményeihez:
lxc exec jupyterlab -- apk add nodejs npmAhhoz, hogy a bővítmények a JupyterLab amelyeket telepítünk működjenek, azokat a felhasználói könyvtárba kell telepíteni, mivel az alkalmazás a felhasználótól indul. akinek később beállítjukA probléma az, hogy a parancsindítóban nincs olyan paraméter, amelyen keresztül megadhatnánk a könyvtárat; az alkalmazás csak a környezeti változót érzékeli, ezért azt definiálnunk kell. Ehhez a következő export parancsot írjuk be: JUPYTERLAB_DIR a felhasználói környezetben akinek később beállítjuk, a következő fájlba: .bashrc, amely minden alkalommal végrehajtásra kerül, amikor a felhasználó bejelentkezik a rendszerbe:
lxc exec jupyterlab -- su -l jupyter -c "echo -e "nexport JUPYTERLAB_DIR=$HOME/.local/share/jupyter/lab" >> .bashrc"A következő parancssal telepítünk egy speciális bővítményt – bővítménykezelőt a JupyterLab:
lxc exec jupyterlab -- su -l jupyter -c "export JUPYTERLAB_DIR=$HOME/.local/share/jupyter/lab; jupyter labextension install --no-build @jupyter-widgets/jupyterlab-manager"Most már minden készen áll az első indításhoz JupyterLab, de még néhány hasznos bővítményt telepíthetünk:
toc— Tartalomjegyzék, generál egy címlistát a cikkben/noteszbenjupyterlab-horizon-theme— UI témajupyterlab_neon_theme— UI témajupyterlab-ubu-theme— Még egy téma a cikk szerzőjétől 🙂 De ebben az esetben, a GitHub tárolóból történik a telepítés. Tehát hajtson végre egymás után a következő parancsokat, hogy telepítse ezeket a bővítményeket:
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"A bővítmények telepítése után össze kell őket állítanunk, mivel korábban a telepítés során megadtuk a--no-build kulcsot az időmegtakarítás érdekében. Most jelentősen felgyorsítjuk az összes egyidejű beállítással: lxc exec jupyterlab -- su -l jupyter -c "export JUPYTERLAB_DIR=$HOME/.local/share/jupyter/lab; jupyter lab build"
Most futtassa az alábbi két parancsot az első indításhoz.Most futtassa az alábbi két parancsot az első indításhoz JupyterLabEgy parancssal elindíthatnánk, de ebben az esetben a parancs, amit észben kell tartani, a bash-en belül a konténerben kerül tárolásra, nem a hoszton, ahol már így is elég parancs van a történelembe való mentéshez 🙂
Jelentkezzünk be a konténerbe mint felhasználó akinek később beállítjuk:
lxc exec jupyterlab -- su -l jupyterEzután indítsa el JupyterLab a megadott kulcsokkal és paraméterekkel:
[jupyter@jupyterlab ~]$ jupyter lab --ip=0.0.0.0 --no-browserNyissa meg a webböngészőt a következő címen http://10.0.5.5:8888 és az megnyíló oldalon írja be token a konzolon megjelenő hozzáférést. Másolja ki, majd illessze be az oldalon, ezután nyomja meg Bejelentkezés. A belépés után a bal oldali menüben lépjen a kiterjesztésekhez, ahogy az alábbi képen látható, ahol felajánlják, hogy a kiterjesztéskezelő aktiválásakor vállalja a biztonsági kockázatokat harmadik fél által biztosított kiterjesztések telepítésekor, amelyekért a csapat A JupyterLab fejlesztés nem vállal felelősséget:

Mindazonáltal, éppen ezért teljesen izoláljuk JupyterLab és a konténerbe helyezzük, hogy a NodeJS-t igénylő és használó külső kiterjesztések ne tudják legalábbis eltulajdonítani az adatokat a lemezen, kivéve azokat, amelyeket megnyitunk a konténeren belül. A privát dokumentaikhoz a hoszton /home a konténerből származó folyamatok valószínűleg nem férnek hozzá, és ha mégis, ahhoz jogosultságok szükségesek a fájlokhoz a hoszt rendszerében, mivel mi egy nem privilégizált módban indítjuk a konténert. Ebből az információból felmérheti a kiterjesztések engedélyezésének kockázatát a JupyterLab.
Készített IPython-notebookok (oldalak a JupyterLab) most a felhasználó otthoni könyvtárában fognak létrejönni — /home/jupyter, de terveink között szerepel az adatok elkülönítése (megosztása) a hoszt és a konténer között, ezért térjen vissza a konzolra és állítsa le JupyterLab a hotkey végrehajtásával — CTRL+C és válaszolva y a kérdésre. Ezután bontsa meg a felhasználó interaktív session-ját akinek később beállítjuk a hotkey végrehajtásával CTRL+D.
Adatok megosztása a gazdával ^
Az adatok megosztásához a hoszttal, egy olyan eszközt kell létrehoznia a konténerben, amely ezt lehetővé teszi, ezért futtassa a következő parancsot, ahol megadjuk a következő kulcsokat:
lxc config device add— A parancs hozzáadja az eszköz konfigurációtakinek később beállítjuk— A konténer azonosítója, amibe a konfigurációt hozzárendeljükhostfs— Az eszköz azonosítója. Bármit megadhat.disk— Az eszköz típusa van megadvapath— A konténerben megadott útvonal, ahol az LXD ezt az eszközt csatoljaforrás— Meg kell adni a forrást, az elérési utat a hoszton, amelyet meg kíván osztani a konténerrel. Adja meg az utat az Ön preferenciái szerint.
lxc config device add jupyterlab hostfs disk path=\/mnt\/hostfs source=\/home\/dv\/projects\/ipython-notebooksA könyvtárhoz /home/dv/projects/ipython-notebooks be kell állítani a konténer felhasználó jogait, amely jelenleg az alábbi UID-del rendelkezik: SubUID + UID, lásd a fejezetet Biztonság. A konténerek jogosultságai a cikkben Az LXD alapvető funkciói — konténer rendszerek Linux alatt.
Állítsa be a jogokat a hoston, ahol a tulajdonos a konténer felhasználója lesz. akinek később beállítjuk, és a változó $USER az Ön host felhasználóját jelöli csoportként:
sudo chown 1001000:$USER \/home\/dv\/projects\/ipython-notebooksHello, World! ^
Ha még mindig nyitva van egy konzolos munkamenet a konténerben, amelyik JupyterLab, indítsa újra az új kulccsal. --notebook-dir meghatározva az értéket /mnt/hostfs a konténerben a jegyzetek gyökeréhez a korábban létrehozott eszköz számára:
jupyter lab --ip=0.0.0.0 --no-browser --notebook-dir=\/mnt\/hostfsEzután lépjen a webhelyre http://10.0.5.5:8888 és hozza létre az első jegyzetét a lenti képen látható gombra kattintva:

Ezután a lapon írja be a Python kódot, amely kiad egy klasszikus. Hello World!. A bevitel befejezése után nyomja meg a CTRL+ENTER vagy a felső szerszámkészlet "play" gombját, hogy a JupyterLab végrehajtsa ezt:

Ez szinte mindent előkészített a használatra, de unalmas lenne, ha nem telepítenénk további Python modulokat (teljes értékű alkalmazásokat), amelyek jelentősen bővítik a Python alapvető lehetőségeit. JupyterLab, így haladjunk tovább 🙂
P.S. Érdekes megjegyezni, hogy a régi megvalósítás Jupyter kódnév alatt Jupyter Notebook nem tűnt el, és párhuzamosan létezik a JupyterLab. A régi verzióra történő áttéréshez látogasson el a linkre, és adja hozzá a végén a szuffixet./tree, a új verzióra való átmenethez szuffikx-t használva, /lab, de ez nem kötelező:
- Jupyter Notebook — http://10.0.5.5:8888/tree
- Jupyter Lab — http://10.0.5.5:8888/lab
A Python képességeinek bővítése ^
Ebben a részben telepítjük az olyan erőteljes Python modulokat, mint NumPy, Pandas, Matplotlib, IPyWidgets melyek eredményei integrálva vannak a jegyzetekbe. JupyterLab.
Mielőtt telepítenénk a megadott Python modulokat a csomagkezelőn keresztül, először engedélyeznünk kell a rendszerszintű függőségeket az Alpine Linux-ban: pip — Szükséges a modulok lefordításához, mivel ezek közül néhány nyelven van megvalósítva
g++és futási időben csatlakozik a Pythonhoz bináris modulokként. C++ freetype-dev— függőség a Python modulhoz.lxc exec jupyterlab -- apk add g++ freetype-dev Matplotlib
A függőségek telepítése:
lxc exec jupyterlab -- apk add g++ freetype-devEgy probléma van: az Alpine Linux disztró jelenlegi állapotában új NumPy verziót nem lehet fordítani, mivel egy fordítási hiba lép fel, amit nem sikerült megoldanom:
HIBA: Nem lehetett létrehozni a numpy kerékfájljait, amelyek használják a PEP 517-et és nem telepíthetők közvetlenül
Ezért ezt a modult rendszerszintű csomagként telepítjük, amely már előre lefordított verziót terjeszt, de egy kicsit régebbi, mint ami jelenleg elérhető a weboldalon:
lxc exec jupyterlab -- apk add py3-numpy py3-numpy-devEzután telepítjük a Python modulokat a csomagkezelőn keresztül pip. Legyen türelmes, mivel néhány modult le kell fordítani, és ez néhány percet is igénybe vehet. Az én gépemen a fordítás körülbelül 15 percig tartott:
lxc exec jupyterlab -- python3 -m pip install pandas ipywidgets matplotlibTisztítsuk meg a telepítések gyorsítótárait:
lxc exec jupyterlab -- rm -rf /home/*/.cache/pip/*
lxc exec jupyterlab -- rm -rf /root/.cache/pip/*Modulok tesztelése a JupyterLabban ^
Ha fut a JupyterLab, indítsa újra, hogy az újonnan telepített modulok aktiválódjanak. Ehhez a konzoli munkamenetben nyomja meg a CTRL+C ahol fut, és írja be y a leállítási kérésre, majd indítsa újra JupyterLab a billentyűzet „felfelé” nyíllal, anélkül hogy újra be kellene írnia a parancsot, majd Enter a futtatásához:
jupyter lab --ip=0.0.0.0 --no-browser --notebook-dir=\/mnt\/hostfsLépjen a következő oldalra http://10.0.5.5:8888/lab vagy frissítse a böngészőben az oldalt, majd írja be az alábbi kódot egy új notebook cellába:
%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_plotAz alábbi képen látható eredménynek kellene lennie, ahol IPyWidgets generál egy UI elemet az oldalon, amely interaktívan működik együtt a forráskóddal, és Matplotlib a kód eredményét ábraként jeleníti meg, mint a függvény grafikája:

Sok példát IPyWidgets találhat az útmutatókban itt
Mi mást? ^
Ügyesek vagyunk, ha itt maradtunk és eljutottunk a cikk végére. Külön nem tettem közzé egy kész szkriptet a cikk végén, amely „egy kattintással” telepítette volna, hogy bátorítsam a munkásokat 🙂 De ezt megteheti önállóan, mivel már tudja, hogyan, a parancsokat egy Bash szkriptbe összeállítva 🙂 JupyterLab Emellett Ön is:
Megadhat egy hálózati nevet a konténer számára az IP-cím helyett, ha egyszerűen beírja
- és a böngészőbe beírja a címet
/etc/hostsJátszadozhat a konténer erőforrás-korlátozásaival, ehhez olvassa el a fejezetet a http://jupyter.local:8888 - LXD alapvető lehetőségeiről vagy további információt szerezhet az LXD fejlesztőjének weboldalán. vagy további információt kaphat az LXD fejlesztőjének weboldalán.
- Témaváltoztatás:

És még sok másra képes! Ennyit a másról. Sok sikert kívánok!
FRISSÍTÉS: 2020.04.15. 18:30 — Javítottam a „Helló, világ!” fejezet hibáit.
FRISSÍTÉS: 2020.04.16. 10:00 — Kiigazítottam és hozzáadtam szöveget a bővítménykezelő aktiválásának leírásához. JupyterLab
FRISSÍTÉS: 2020.04.16. 10:40 — Kijavítottam a szövegben felfedezett hibákat, és egy kicsit változtattam a „Alapvető szoftver telepítése és a rendszer beállítása” fejezeten.
Forrás: habr.com
