LancĂ©iere Jupyter an LXD Ëmlafbunn

Hues du jeemools mat Code oder Systemprogrammer experimentéiert? Linux Sou datt Dir Iech keng Suergen ëm den ënnerlÀitende System maache musst an alles zerstéiere musst, wann et e Feeler am Code gëtt, deen mat Root-Privilegien lafe muss?

Awer wat iwwer d'Tatsaach datt loosst eis soen datt Dir e ganze StÀrekoup vu verschiddene Mikroservicer op enger Maschinn testen oder ausféiert? Honnert oder souguer dausend?

Hypervisor-verwaltete virtuell Maschinnen kéinten esou Problemer léisen, awer zu wéi engem PrÀis? Zum Beispill, en LXD Container baséiert op der Alpine Distributioun Linux verbraucht nëmme minimal Energie 7.60MB RAM, a wou d'Root Partition nom Startup besetzt 9.5MB! Wéi gefÀllt Dir dat, Elon Musk? Ech recommandéieren erauszekréien BasisfÀegkeeten vun LXD - engem Containersystem an Linux

Nodeems et allgemeng kloer gouf wat LXD Container sinn, loosst eis mĂ©i wĂ€it goen an denken, wat wann et sou eng Ernteplattform wier, wou Dir sĂ©cher Code fir den Host lafe kĂ«nnt, Grafike generĂ©ieren, dynamesch (interaktiv) UI- Widgets mat Ärem Code verbannen, ergĂ€nzen de Code mat Text mat Blackjack ... FormatĂ©ieren? Eng Zort interaktiv Blog? Wow ... ech wĂ«ll et! WĂ«llt! 🙂

Kuckt ënnert der Kaz wou mir an engem Container starten Jupyter Labo - déi nÀchst Generatioun vu Benotzerinterface amplaz vum alen Jupyter Notizbuch, a mir wÀerten och Python Moduler installéieren wéi z. NummPy, Pandas, matplotlib, IPyWidgets wat Iech erlaabt alles uewen opgezielt ze maachen an alles an enger spezieller Datei ze spÀicheren - en IPython Laptop.

LancĂ©iere Jupyter an LXD Ëmlafbunn

Orbital Startplang ^

LancĂ©iere Jupyter an LXD Ëmlafbunn

Loosst eis e kuerzen Handlungsplang skizzéieren fir et méi einfach ze maachen fir de Schema hei uewen ëmzesetzen:

  • Loosst eis e Container installĂ©ieren a starten op Basis vum Verdeelungskit Alpine Linux. Mir wĂ€erten dĂ«s Verdeelung benotzen well se op Minimalismus zielt a wĂ€ert nĂ«mmen dĂ©i nĂ©ideg Software dran installĂ©ieren, nĂ€ischt iwwerflĂ«sseg.
  • Loosst eis eng zousĂ€tzlech virtuell Scheif am Container derbĂ€i a ginn et en Numm - hostfs a montĂ©iert et op de Root Dateisystem. DĂ«s Disk wĂ€ert et mĂ©iglech maachen Dateien um Host aus engem bestĂ«mmte Verzeechnes am Container ze benotzen. Sou wĂ€erten eis DonnĂ©eĂ«n onofhĂ€ngeg vum Container sinn. Wann de Container gelĂ€scht gĂ«tt, bleiwen d'DonnĂ©eĂ«n um Host. Och dĂ«st Schema ass nĂ«tzlech fir dĂ©iselwecht DonnĂ©eĂ«n tĂ«scht ville Container ze deelen ouni d'Standard Netzwierkmechanismen vun der Containerverdeelung ze benotzen.
  • Loosst eis Bash, sudo, dĂ©i nĂ©ideg BibliothĂ©iken installĂ©ieren, e System Benotzer addĂ©ieren a konfigurĂ©ieren
  • Loosst eis Python, Moduler installĂ©ieren a binĂ€r OfhĂ€ngegkeete fir si kompilĂ©ieren
  • Loosst eis installĂ©ieren a starten Jupyter Labo, d'Erscheinung personalisĂ©ieren, Extensiounen dofir installĂ©ieren.

An dësem Artikel fÀnke mir mam Container unzefÀnken, mir betruechten net d'LXD z'installéieren an ze konfiguréieren, Dir kënnt dat alles an engem aneren Artikel fannen - Déi grondleeënd FÀegkeeten vun LXD, engem Containersystem an Linux.

Installatioun an Configuratioun vun der Basis System ^

Mir erstellen e Container mam Kommando an deem mir d'Bild spezifizéieren - alpine3, Identifizéierer fir de Container - jupyterlab an, wann néideg, Konfiguratiounsprofile:

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

Hei benotzen ech e Konfiguratiounsprofil hddroot déi spezifizéiert fir e Container mat enger Root-Partition ze kreéieren Stockage Pool op enger kierperlecher HDD Disk lÀit:

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

DĂ«st gĂ«tt mir d'MĂ©iglechkeet fir mat Container op der HDD Disk ze experimentĂ©ieren, d'Ressourcen vun der SSD Disk ze spueren, dĂ©i och a mengem System verfĂŒgbar ass 🙂 fir deen ech e separaten Konfiguratiounsprofil erstallt hunn ssdroot.

Nodeems de Container erstallt ass, ass et am Staat STOPPED, also musse mir et starten andeems Dir den Init System dran leeft:

lxc start jupyterlab

Loosst eis eng Lëscht vu Container am LXD mat dem Schlëssel weisen -c wat weist wéi eng columnen weisen:

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

Wann Dir de Container erstellt, gouf d'IP Adress zoufÀlleg gewielt, well mir e Konfiguratiounsprofil benotzt hunn default déi virdru am Artikel konfiguréiert war Déi grondleeënd FÀegkeeten vun LXD, engem Containersystem an Linux.

Mir wÀerten dës IP Adress op eng méi memorablen Ànneren andeems en Netzwierk Interface um Containerniveau erstellt, an net um Konfiguratiounsprofilniveau wéi et elo an der aktueller Konfiguratioun ass. Dir musst dat net maachen, Dir kënnt et iwwersprangen.

Schafen engem Netzwierk Interface eth0 déi mir un de Schalter verlinken (Netzbréck) lxdbr0 an deem mir NAT no dem viregten Artikel aktivéiert hunn an de Container elo Zougang zum Internet huet, a mir ginn och eng statesch IP Adress un d'Interface zou - 10.0.5.5:

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

Nodeems Dir en Apparat bĂ€igefĂŒĂŒgt hutt, muss de Container nei gestart ginn:

lxc restart jupyterlab

Iwwerpréift de Status vum Container:

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

Basis Software installéieren an de System opbauen ^

Fir eise Container ze administréieren, musst Dir déi folgend Software installéieren:

Pak
Beschreiwung

ze brong
D'GNU Bourne Again Shell

bash-VervollstÀnnegung
Programméierbar FÀerdegstellung fir d'Bash Shell

sudo
Gitt bestëmmte Benotzer d'FÀegkeet fir e puer Kommandoen als Root auszeféieren

Schied
Passwuert a Kontemanagement Tool Suite mat ËnnerstĂ«tzung fir Schattendateien a PAM

tzdaten
Quelle fir ZÀitzone an DagesliichtzÀitdaten

Nanotechnike sinn
Pico Editor Klon mat Verbesserungen

ZousĂ€tzlech kĂ«nnt Dir ËnnerstĂ«tzung an de System Man-SĂ€iten installĂ©ieren andeems Dir dĂ©i folgend Packagen installĂ©iert - man man-pages mdocml-apropos less

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

Loosst eis d'Befehle an d'Schlësselen kucken, déi mir benotzt hunn:

  • lxc - Call LXD Client
  • exec - LXD Client Method dĂ©i e Kommando am Container leeft
  • jupyterlab - Container ID
  • -- - E spezielle SchlĂ«ssel datt spezifizĂ©iert net weider SchlĂ«sselen als SchlĂ«ssel interpretĂ©ieren fir lxc a gitt de Rescht vun der String wĂ©i et an de Container
  • apk — Verdeelungspaketmanager vun Alpine Linux
  • add - Eng Package Manager Method dĂ©i Packagen installĂ©iert dĂ©i nom Kommando spezifizĂ©iert sinn

Als nÀchst wÀerte mir eng ZÀitzone am System setzen Europe/Moscow:

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

No der Installatioun vun der ZÀitzone, de Package tzdata ass net méi am System gebraucht, et wÀert Plaz ophuelen, also loosse mer et lÀschen:

lxc exec jupyterlab -- apk del tzdata

Iwwerpréift vun der ZÀitzone:

lxc exec jupyterlab -- date

Wed Apr 15 10:49:56 MSK 2020

Fir ZÀit ze spueren beim Astellen vu Bash fir nei Benotzer am Container, kopéiere mir fÀerdeg Skel-Dateien vum Hostsystem drop. Dëst erlaabt eis, Bash am Container am interaktiven Modus unzepassen. MÀi Hostsystem ass Manjaro. Linux a kopéiert Dateien /etc/skel/.bash_profile, /etc/skel/.bashrc, /etc/skel/.dir_colors am Prinzip passen se op Alpine Linux an verursaachen keng kritesch Problemer, awer Dir kënnt eng aner Verdeelung hunn an Dir musst selwer erausfannen, ob et e Feeler beim Ausféiere vu Bash am Container gëtt.

Kopie der skel Fichier'en op de Container. Schlëssel --create-dirs wÀert déi néideg Verzeichnisser erstellen wa se net existéieren:

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

Fir eng bestehend root Benotzer, Kopie der skel Fichier'en just an de Container an d'Haus Verzeechnes kopéiert:

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

An den Alpen Linux eng Systemshell ass fir Benotzer installéiert /bin/sh, mir ersetzen et mat root Benotzer am Bash:

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

datt root de Benotzer war net ouni Passwuert, hie muss e Passwuert astellen. De folgende Kommando generéiert a setzt en neit zoufÀlleg Passwuert fir hien, dat Dir op der Konsolebildschierm no senger Ausféierung gesitt:

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

Loosst eis och en neie System Benotzer erstellen - jupyter fir déi mir spéider konfiguréieren Jupyter Labo:

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

Loosst eis e Passwuert generéieren an setzen:

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

Als nÀchst wÀerte mir zwee Kommandoen ausféieren, déi éischt wÀert e Systemgrupp erstellen sudo, an déi zweet wÀert e Benotzer dobÀi ginn jupyter:

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

Loosst eis kucken wéi eng Gruppen de Benotzer gehéiert jupyter:

lxc exec jupyterlab -- id -Gn jupyter

jupyter sudo

Alles ass ok, loosst eis weidergoen.

Erlaabt all Benotzer déi Member vum Grupp sinn sudo benotzen Kommando sudo. Fir dëst ze maachen, lafen déi folgend Skript, wou sed decommentéiert d'Parameterlinn an der Konfiguratiounsdatei /etc/sudoers:

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

JupyterLab installéieren an konfiguréieren ^

Jupyter Labo ass eng Python Applikatioun, also musse mir als éischt dësen Dolmetscher installéieren. Och, Jupyter Labo mir installéiere mam Python Package Manager pip, an net de System eent, well et am Systemrepository verÀnnert ka sinn an dofir musse mir d'OfhÀngegkeete fir et manuell léisen andeems Dir déi folgend Packagen installéiert - python3 python3-dev gcc libc-dev zeromq-dev:

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

Loosst eis Python Moduler a Package Manager aktualiséieren pip op déi aktuell Versioun:

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

Installéieren Jupyter Labo iwwer Package Manager pip:

lxc exec jupyterlab -- python3 -m pip install jupyterlab

Zënter den Extensiounen an Jupyter Labo sinn experimentell a ginn net offiziell mam Jupyterlab Package verschéckt, also musse mir et manuell installéieren an konfiguréieren.

Loosst eis NodeJS an de Package Manager fir et installéieren - NPM, zënter Jupyter Labo benotzt se fir seng Extensiounen:

lxc exec jupyterlab -- apk add nodejs npm

Zu Erweiderunge fir Jupyter Labo dĂ©i mir installĂ©ieren geschafft hunn, mussen se am Benotzerverzeichnis installĂ©iert ginn, well d'Applikatioun vum Benotzer lancĂ©iert gĂ«tt jupyter. De Problem ass datt et kee Parameter am Startbefehl gĂ«tt deen an e Verzeechnes weidergeleet ka ginn; d'Applikatioun akzeptĂ©iert nĂ«mmen eng Ëmfeldvariabel an dofir musse mir se definĂ©ieren. Fir dĂ«st ze maachen, schreiwen mir de Variabel Export Kommando JUPYTERLAB_DIR an der Ëmwelt vum Benotzer jupyter, ze Fichier .bashrcdĂ©i ausgefouert gĂ«tt all KĂ©ier wann de Benotzer aloggen:

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

De nÀchste Kommando wÀert eng speziell Extensioun installéieren - Extensioun Manager an Jupyter Labo:

lxc exec jupyterlab -- su -l jupyter -c "export JUPYTERLAB_DIR=$HOME/.local/share/jupyter/lab; jupyter labextension install --no-build @jupyter-widgets/jupyterlab-manager"

Elo ass alles prett fir den éischte Start Jupyter Labo, awer mir kënnen nach ëmmer e puer nëtzlech Extensiounen installéieren:

  • toc - Inhaltsverzeechnes, generĂ©iert eng LĂ«scht vun Rubriken an engem Artikel / Notizbuch
  • jupyterlab-horizon-theme - UI Thema
  • jupyterlab_neon_theme - UI Thema
  • jupyterlab-ubu-theme - Eng aner Thema vum Auteur dĂ«sen Artikel :) Awer an dĂ«sem Fall gĂ«tt d'Installatioun vum GitHub Repository gewisen

Also, lafen déi folgend Kommandoen sequenziell fir dës Extensiounen ze installéieren:

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"

Nodeems mir d'Extensiounen installéiert hunn, musse mir se kompiléieren, well virdrun, wÀhrend der Installatioun, hu mir de Schlëssel uginn --no-build ZÀit ze spueren. Elo wÀerte mir dÀitlech beschleunegen andeems se se an engem Go kompiléieren:

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

Elo lafen dĂ©i folgend zwee Kommandoen fir et fir d'Ă©ischte KĂ©ier auszefĂ©ieren Jupyter Labo. Et wier mĂ©iglech et mat engem Kommando ze lancĂ©ieren, awer an dĂ«sem Fall gĂ«tt de Startbefehl, dee schwĂ©ier an Ärem Kapp ze erĂ«nneren ass, duerch Bash am Container erĂ«nnert ginn, an net um Host, wou et scho genuch Kommandoen sinn fir se an d'Geschicht opzehuelen :)

Aloggen op de Container als Benotzer jupyter:

lxc exec jupyterlab -- su -l jupyter

Als nÀchst, lafen Jupyter Labo mat Schlësselen a Parameteren wéi uginn:

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

Gitt op d'Adress an Ärem Webbrowser http://10.0.5.5:8888 an op der SĂ€it dĂ©i opmaacht gitt Token Zougang deen Dir an der Konsole gesitt. KopĂ©iert a paste se op d'SĂ€it, da klickt Login. Nodeems Dir Iech ugemellt hutt, gitt op d'ExtensiounsmenĂŒ op der lĂ©nker SĂ€it, wĂ©i an der Figur hei Ă«nnendrĂ«nner, wou Dir gefuerdert gĂ«tt, wann Dir den Extensiounsmanager aktivĂ©iert, SĂ©cherheetsrisiken ze huelen andeems Dir Extensiounen vun DrĂ«tt Parteien installĂ©iert fir dĂ©i de Kommando JupyterLab EntwĂ©cklung ass net verantwortlech:

LancĂ©iere Jupyter an LXD Ëmlafbunn

Mir isolĂ©ieren awer dat Ganzt Jupyter Labo a plazĂ©iert et an engem Container sou datt DrĂ«tt-Partei-Extensiounen dĂ©i NodeJS erfuerderen a benotzen, kĂ«nnen net op d'mannst Daten op der Disk klauen wĂ©i dĂ©i, dĂ©i mir am Container opmaachen. Gitt op Är privat Dokumenter um Host an /home Prozesser aus dem Container sinn onwahrscheinlech erfollegrĂ€ich, a wa se et maachen, da musst Dir Privilegien op Dateien am Hostsystem hunn, well mir de Container lafen onprivilegiĂ©ierten Modus. BasĂ©ierend op dĂ«s Informatioun, kĂ«nnt Dir de Risiko bewĂ€erten fir Extensiounen anzebezĂ©ien Jupyter Labo.

Erstellt IPython Notizbicher (SĂ€iten an Jupyter Labo) gĂ«tt elo am Heemverzeechnes vum Benotzer erstallt - /home/jupyter, awer eis PlĂ€ng sinn d'DonnĂ©eĂ«n (deelen) tĂ«scht dem Host an dem Container opzedeelen, also zrĂ©ck an d'Konsole a stoppen Jupyter Labo andeems Dir Hotkey ausfĂ©iert - CTRL+C an Äntwert y op Ufro. Dann ofschlĂ©issen d'Interaktiv Sessioun vum Benotzer jupyter eng Hotkey ausfĂ«llen CTRL+D.

Deelen Daten mam Host ^

Fir Daten mat dem Host ze deelen, musst Dir en Apparat am Container erstellen deen Iech erlaabt dëst ze maachen an dëst ze maachen, fuert de folgende Kommando, wou mir déi folgend Schlësselen spezifizéieren:

  • lxc config device add - De Kommando fĂŒĂŒgt d'Apparatkonfiguratioun un
  • jupyter - ID vum Container an deem d'Konfiguratioun bĂ€igefĂŒĂŒgt gĂ«tt
  • hostfs - Apparat ID. Dir kĂ«nnt all Numm setzen.
  • disk - D'Zort vum Apparat gĂ«tt uginn
  • path - SpezifizĂ©iert de Wee am Container op deen LXD dĂ«sen Apparat montĂ©iert
  • source - Gitt d'Quell un, de Wee zum Verzeechnes um Host deen Dir mam Container deele wĂ«llt. SpezifizĂ©iert de Wee no Äre VirlĂ©iften
lxc config device add jupyterlab hostfs disk path=/mnt/hostfs source=/home/dv/projects/ipython-notebooks

Fir de Katalog /home/dv/projects/ipython-notebooks Erlaabnis muss op de Container Benotzer gesat ginn, deen am Moment eng UID glÀich ass SubUID + UID, kuckt Kapitel Sécherheet. Container Privilegien an Artikel Déi grondleeënd FÀegkeeten vun LXD, engem Containersystem an Linux.

Setzt d'Erlaabnis op den Host, wou de BesĂ«tzer de Container Benotzer ass jupyter, an d'Variabel $USER wĂ€ert Äre Host Benotzer als Grupp uginn:

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

Moien Welt! ^

Wann Dir nach eng Konsol Sessioun oppen am Container mat Jupyter Labo, da restart et mat engem neie Schlëssel --notebook-dir andeems Dir de WÀert setzt /mnt/hostfs wéi de Wee op d'Wurzel vun de Laptops am Container fir den Apparat deen mir am virege Schrëtt erstallt hunn:

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

Da gitt op d'SĂ€it http://10.0.5.5:8888 a erstellt Ären Ă©ischte Laptop andeems Dir op de KnĂ€ppchen op der SĂ€it klickt wĂ©i op der Foto hei Ă«nnendrĂ«nner:

LancĂ©iere Jupyter an LXD Ëmlafbunn

Dann, am Feld op der SÀit, gitt de Python Code deen de Klassiker weist Hello World!. Wann Dir fÀerdeg sidd aginn, dréckt CTRL+ENTER oder de "Spill" KnÀppchen op der Toolbar uewen fir JupyterLab dëst ze maachen:

LancĂ©iere Jupyter an LXD Ëmlafbunn

Zu dësem ZÀitpunkt ass bal alles prett fir ze benotzen, awer et wÀert oninteressant sinn wa mir keng zousÀtzlech Python Moduler installéieren (vollwÀerteg Uwendungen) déi d'StandardfÀegkeete vum Python wesentlech ausbaue kënnen Jupyter Laboalso loosst eis weidergoen :)

PS DĂ©i interessant Saach ass, datt dĂ©i al Ëmsetzung jupyter Ă«nner Code Numm Jupyter Notizbuch ass net fortgaang an et existĂ©iert parallel mat Jupyter Labo. Fir op dĂ©i al Versioun ze wiesselen, befollegt de Link deen de Suffix an der Adress bĂ€idrĂ©it/tree, an den Iwwergank op dĂ©i nei Versioun gĂ«tt mam Suffix duerchgefouert /lab, awer et muss net spezifizĂ©iert ginn:

Erweidert d'FĂ€egkeete vum Python ^

An dëser Rubrik wÀerte mir sou mÀchteg Python Sproochmoduler installéieren wéi NummPy, Pandas, matplotlib, IPyWidgets d'Resultater vun deenen an Laptops integréiert sinn Jupyter Labo.

Ier Dir déi opgelëscht Python Moduler duerch de Package Manager installéiert pip Mir mussen als éischt d'SystemofhÀngegkeeten an Alpine léisen Linux:

  • g++ - Noutwendeg fir Moduler ze kompilĂ©ieren, well e puer vun hinnen an der Sprooch implementĂ©iert sinn C ++ a verbĂ«nnt mam Python beim Runtime als binĂ€re Moduler
  • freetype-dev - OfhĂ€ngegkeet fir Python Modul matplotlib

OfhÀngegkeeten installéieren:

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

Et gëtt ee Problem mam aktuellen Zoustand vun der Alpenverbreedung. Linux Ech kann déi nei Versioun vun NumPy net kompiléieren; ech kréien e Kompilatiounsfehler, deen ech net léise kann:

Feeler: Konnt net bauen Rieder fir numpy déi PEP benotzen 517 a kann net direkt installéiert ginn

Dofir wĂ€erte mir dĂ«se Modul als System Package installĂ©ieren, deen eng scho kompilĂ©iert Versioun verdeelt, awer e bĂ«sse mĂ©i al wĂ©i dat wat de Moment um Site verfĂŒgbar ass:

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

Als nÀchst installéiert Python Moduler duerch de Package Manager pip. Gitt w.e.g. Gedold well e puer Moduler kompiléieren a kënnen e puer Minutten daueren. Op menger Maschinn huet d'Kompilatioun ~15 Minutten gedauert:

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

Installatioun Cache lÀschen:

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

Testen Moduler am JupyterLab ^

Wann Dir lafen Jupyter Labo, Restart et sou datt déi nei installéiert Moduler aktivéiert ginn. Fir dëst ze maachen, klickt an enger Konsolsessioun CTRL+C wou Dir hutt et Lafen an gitt y Ufro ze stoppen an dann erëm ufÀnken Jupyter Labo andeems Dir den Up-Pfeil op der Tastatur dréckt fir de Kommando net erëm an dann anzeginn Enter fir et unzefÀnken:

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

Gitt op d'SĂ€it http://10.0.5.5:8888/lab oder erfrĂ«scht d'SĂ€it an Ärem Browser, a gitt dann de folgende Code an enger neier Notizbuchzelle:

%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

Dir sollt e Resultat kréien wéi am Bild hei drënner, wou IPyWidgets generéiert en UI Element op der SÀit déi interaktiv mam Quellcode interagéiert, an och matplotlib weist d'Resultat vum Code a Form vun engem Bild als Funktiounsgraf:

LancĂ©iere Jupyter an LXD Ëmlafbunn

Vill Beispiller IPyWidgets Dir kënnt et an Tutorials fannen hei

Wat soss? ^

Gutt geschafft wann Dir bliwwen sidd an um Enn vum Artikel erreecht hutt. Ech hunn bewosst kee fÀerdege Skript um Enn vum Artikel gepost deen installéiere géif Jupyter Labo an "eem Klick" fir d'Aarbechter ze encouragéieren :) Awer Dir kënnt et selwer maachen, well Dir scho wësst wéi, wann Dir d'Kommandoen an engem eenzege Bash Skript gesammelt hutt :)

Dir kënnt och:

  • Setzt en Netznumm fir de Container anstatt eng IP Adress andeems Dir et einfach schreift /etc/hosts a gitt d'Adress am Browser http://jupyter.local:8888
  • Spillt ronderĂ«m mat der Ressourcelimit fir de Container, fir dĂ«st liest d'Kapitel an Basis LXD FĂ€egkeeten oder kritt mĂ©i Informatiounen op der LXD EntwĂ©ckler Site.
  • Ännert d'Thema:

LancĂ©iere Jupyter an LXD Ëmlafbunn

A vill méi kënnt Dir maachen! Dat ass alles. Ech wënschen Iech Erfolleg!

UPDATE: 15.04.2020/18/30 XNUMX:XNUMX - Korrigéiert Feeler am Kapitel "Hallo, Welt!"
UPDATE: 16.04.2020/10/00 XNUMX:XNUMX - KorrigĂ©iert a bĂ€igefĂŒĂŒgt Text an der Beschreiwung vun der Extensioun Manager Aktivatioun Jupyter Labo
UPDATE: 16.04.2020/10/40 XNUMX:XNUMX - Korrigéiert Feeler am Text fonnt a liicht geÀnnert fir d'Besserung d'Kapitel "Basis Software installéieren an de System opzestellen"

Source: will.com

Kaaft zouverlĂ€sseg Hosting fir Site mat DDoS Schutz, VPS VDS Server đŸ”„ Kaaft zouverlĂ©issegt WebsĂ€ithosting mat DDoS-Schutz, VPS VDS Server | ProHoster