Melancarkan Jupyter ke orbit LXD

Pernahkah anda bereksperimen dengan kod atau utiliti sistem di Linux tanpa perlu risau tentang sistem asas dan meruntuhkan segala-galanya sekiranya berlaku ralat dalam kod yang sepatutnya dijalankan dengan keistimewaan root?

Tetapi bagaimana pula dengan hakikat bahawa katakan anda perlu menguji atau menjalankan keseluruhan kluster pelbagai perkhidmatan mikro pada satu mesin? Seratus malah seribu?

Dengan mesin maya yang diuruskan oleh hypervisor, masalah sedemikian boleh dan akan diselesaikan, tetapi pada kos berapa? Sebagai contoh, bekas dalam LXD berdasarkan pengedaran Alpine Linux menggunakan sahaja 7.60MB RAM, dan di mana partition root menduduki selepas permulaan 9.5MB! Bagaimanakah anda menyukainya, Elon Musk? Saya cadangkan anda menyemak keupayaan asas LXD - sistem kontena dalam Linux

Selepas menjadi jelas secara umum apa itu bekas LXD, mari kita pergi lebih jauh dan fikirkan, bagaimana jika terdapat platform penuai sedemikian di mana anda boleh menjalankan kod untuk hos dengan selamat, menjana graf, memautkan widget UI- secara dinamik (secara interaktif) dengan kod anda, tambah kod dengan teks dengan blackjack... pemformatan? Semacam blog interaktif? Wah... saya mahu! nak! πŸ™‚

Lihat di bawah kucing di mana kita akan melancarkan dalam bekas makmal jupyter - antara muka pengguna generasi seterusnya dan bukannya Buku Nota Jupyter yang sudah lapuk, dan kami juga akan memasang modul Python seperti numpy, Pandas, Matplotlib, IPyWidgets yang akan membolehkan anda melakukan semua yang disenaraikan di atas dan menyimpan semuanya dalam fail khas - komputer riba IPython.

Melancarkan Jupyter ke orbit LXD

Pelan berlepas orbit ^

Melancarkan Jupyter ke orbit LXD

Mari kita gariskan pelan tindakan ringkas untuk memudahkan kita melaksanakan skim di atas:

  • Mari pasang dan lancarkan bekas berdasarkan kit pengedaran Alpine Linux. Kami akan menggunakan pengedaran ini kerana ia bertujuan untuk minimalism dan akan memasang hanya perisian yang paling diperlukan di dalamnya, tiada apa-apa yang berlebihan.
  • Mari tambahkan cakera maya tambahan dalam bekas dan beri nama - hostfs dan lekapkannya ke sistem fail akar. Cakera ini akan membolehkan anda menggunakan fail pada hos daripada direktori yang diberikan di dalam bekas. Oleh itu, data kami akan bebas daripada bekas. Jika bekas dipadamkan, data akan kekal pada hos. Selain itu, skim ini berguna untuk berkongsi data yang sama antara banyak bekas tanpa menggunakan mekanisme rangkaian standard pengedaran kontena.
  • Mari pasang Bash, sudo, perpustakaan yang diperlukan, tambah dan konfigurasi pengguna sistem
  • Mari pasang Python, modul dan susun kebergantungan binari untuknya
  • Mari pasang dan lancarkan makmal jupyter, sesuaikan penampilan, pasang sambungan untuknya.

Dalam artikel ini kami akan mulakan dengan melancarkan bekas, kami tidak akan mempertimbangkan untuk memasang dan mengkonfigurasi LXD, anda boleh menemui semua ini dalam artikel lain - Ciri asas LXD - sistem kontena Linux.

Pemasangan dan konfigurasi sistem asas ^

Kami mencipta bekas dengan arahan di mana kami menentukan imej - alpine3, pengecam untuk bekas - jupyterlab dan, jika perlu, profil konfigurasi:

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

Di sini saya menggunakan profil konfigurasi hddroot yang menentukan untuk mencipta bekas dengan partition akar masuk Kolam Storan terletak pada cakera HDD fizikal:

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

Ini memberi saya peluang untuk bereksperimen dengan bekas pada cakera HDD, menyimpan sumber cakera SSD, yang juga tersedia dalam sistem saya πŸ™‚ yang mana saya telah mencipta profil konfigurasi berasingan ssdroot.

Selepas bekas dibuat, ia berada dalam keadaan STOPPED, jadi kita perlu memulakannya dengan menjalankan sistem init di dalamnya:

lxc start jupyterlab

Mari paparkan senarai bekas dalam LXD menggunakan kekunci -c yang menunjukkan yang mana cpaparan olumns:

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

Semasa membuat bekas, alamat IP dipilih secara rawak, kerana kami menggunakan profil konfigurasi default yang telah dikonfigurasikan sebelum ini dalam artikel Ciri asas LXD - sistem kontena Linux.

Kami akan menukar alamat IP ini kepada alamat yang lebih mudah diingati dengan mencipta antara muka rangkaian pada tahap kontena, dan bukan pada tahap profil konfigurasi kerana ia kini dalam konfigurasi semasa. Anda tidak perlu melakukan ini, anda boleh melangkaunya.

Mencipta antara muka rangkaian eth0 yang kami pautkan ke suis (jambatan rangkaian) lxdbr0 di mana kami mendayakan NAT mengikut artikel sebelumnya dan bekas itu kini akan mempunyai akses kepada Internet, dan kami juga menetapkan alamat IP statik kepada antara muka - 10.0.5.5:

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

Selepas menambah peranti, bekas mesti dibut semula:

lxc restart jupyterlab

Menyemak status bekas:

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

Memasang perisian asas dan menyediakan sistem ^

Untuk mentadbir bekas kami, anda perlu memasang perisian berikut:

Pakej
Penerangan Produk

menampar
Cangkang GNU Bourne Again

bash-completion
Penyiapan boleh atur cara untuk shell bash

sudo
Beri pengguna tertentu keupayaan untuk menjalankan beberapa arahan sebagai root

bayang-bayang
Suite alat pengurusan kata laluan dan akaun dengan sokongan untuk fail bayangan dan PAM

tzdata
Sumber untuk zon waktu dan data masa penjimatan siang

nano
Klon editor Pico dengan penambahan

Selain itu, anda boleh memasang sokongan dalam halaman manusia sistem dengan memasang pakej berikut βˆ’ man man-pages mdocml-apropos less

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

Mari lihat arahan dan kunci yang kami gunakan:

  • lxc β€” Hubungi pelanggan LXD
  • exec - Kaedah klien LXD yang menjalankan arahan dalam bekas
  • jupyterlab β€” ID kontena
  • -- β€” Kunci khas yang menentukan untuk tidak mentafsir kunci selanjutnya sebagai kunci untuk lxc dan hantar baki rentetan seperti ke bekas
  • apk β€” Pengurus pakej pengedaran Alpine Linux
  • add β€” Kaedah pengurus pakej yang memasang pakej yang ditentukan selepas arahan

Seterusnya, kami akan menetapkan zon waktu dalam sistem Europe/Moscow:

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

Selepas memasang zon waktu, pakej tzdata tidak lagi diperlukan dalam sistem, ia akan mengambil ruang, jadi mari padamkannya:

lxc exec jupyterlab -- apk del tzdata

Menyemak zon waktu:

lxc exec jupyterlab -- date

Wed Apr 15 10:49:56 MSK 2020

Untuk tidak menghabiskan banyak masa menyediakan Bash untuk pengguna baharu dalam bekas, dalam langkah berikut kami akan menyalin fail skel siap sedia daripada sistem hos kepadanya. Ini akan membolehkan anda mempercantikkan Bash dalam bekas secara interaktif. Sistem hos saya ialah Manjaro Linux dan fail sedang disalin /etc/skel/.bash_profile, /etc/skel/.bashrc, /etc/skel/.dir_colors pada dasarnya ia sesuai untuk Alpine Linux dan tidak menyebabkan masalah kritikal, tetapi anda mungkin mempunyai pengedaran yang berbeza dan anda perlu memikirkan secara bebas jika terdapat ralat semasa menjalankan Bash dalam bekas.

Salin fail skel ke bekas. kunci --create-dirs akan mencipta direktori yang diperlukan jika ia tidak wujud:

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

Untuk pengguna akar sedia ada, salin fail skel yang baru disalin ke dalam bekas ke direktori utama:

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 memasang shell sistem untuk pengguna /bin/sh, kami akan menggantikannya dengan root pengguna dalam Bash:

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

Itu root pengguna bukan tanpa kata laluan, dia perlu menetapkan kata laluan. Perintah berikut akan menjana dan menetapkan kata laluan rawak baharu untuknya, yang akan anda lihat pada skrin konsol selepas pelaksanaannya:

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

Juga, mari buat pengguna sistem baharu - jupyter yang akan kami konfigurasikan kemudian makmal jupyter:

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

Mari jana dan tetapkan kata laluan untuknya:

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

Seterusnya, kami akan melaksanakan dua arahan, yang pertama akan membuat kumpulan sistem sudo, dan yang kedua akan menambah pengguna kepadanya jupyter:

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

Mari lihat kumpulan mana pengguna itu tergolong jupyter:

lxc exec jupyterlab -- id -Gn jupyter

jupyter sudo

Semuanya ok, mari kita teruskan.

Benarkan semua pengguna yang menjadi ahli kumpulan sudo gunakan arahan sudo. Untuk melakukan ini, jalankan skrip berikut, di mana sed membatalkan ulasan baris parameter dalam fail konfigurasi /etc/sudoers:

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

Memasang dan mengkonfigurasi JupyterLab ^

makmal jupyter ialah aplikasi Python, jadi kita mesti memasang penterjemah ini terlebih dahulu. Juga, makmal jupyter kami akan memasang menggunakan pengurus pakej Python pip, dan bukan sistem satu, kerana ia mungkin sudah lapuk dalam repositori sistem dan oleh itu, kita perlu menyelesaikan kebergantungan secara manual untuknya dengan memasang pakej berikut βˆ’ python3 python3-dev gcc libc-dev zeromq-dev:

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

Mari kemas kini modul python dan pengurus pakej pip kepada versi semasa:

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

Tetapkan makmal jupyter melalui pengurus pakej pip:

lxc exec jupyterlab -- python3 -m pip install jupyterlab

Sejak sambungan dalam makmal jupyter adalah percubaan dan tidak dihantar secara rasmi dengan pakej jupyterlab, jadi kami perlu memasang dan mengkonfigurasinya secara manual.

Mari pasang NodeJS dan pengurus pakej untuknya - NPM, sejak makmal jupyter menggunakannya untuk sambungannya:

lxc exec jupyterlab -- apk add nodejs npm

Kepada sambungan untuk makmal jupyter yang kami akan pasang berfungsi, ia perlu dipasang dalam direktori pengguna kerana aplikasi akan dilancarkan daripada pengguna jupyter. Masalahnya ialah tiada parameter dalam arahan pelancaran yang boleh dihantar ke direktori; aplikasi hanya menerima pembolehubah persekitaran dan oleh itu kita mesti menentukannya. Untuk melakukan ini, kami akan menulis perintah eksport pembolehubah JUPYTERLAB_DIR dalam persekitaran pengguna jupyter, untuk memfailkan .bashrcyang dilaksanakan setiap kali pengguna log masuk:

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

Perintah seterusnya akan memasang sambungan khas - pengurus sambungan masuk makmal jupyter:

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

Kini semuanya sudah sedia untuk pelancaran pertama makmal jupyter, tetapi kami masih boleh memasang beberapa sambungan berguna:

  • toc β€” Jadual Kandungan, menghasilkan senarai tajuk dalam artikel/buku nota
  • jupyterlab-horizon-theme β€” Tema UI
  • jupyterlab_neon_theme β€” Tema UI
  • jupyterlab-ubu-theme - Yang lagi satu tema daripada pengarang artikel ini :) Tetapi dalam kes ini, pemasangan daripada repositori GitHub akan ditunjukkan

Jadi, jalankan arahan berikut secara berurutan untuk memasang sambungan ini:

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"

Selepas memasang sambungan, kami mesti menyusunnya, kerana sebelum ini, semasa pemasangan, kami menentukan kuncinya --no-build untuk menjimatkan masa. Sekarang kami akan mempercepatkan dengan ketara dengan menyusunnya bersama-sama sekali gus:

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

Sekarang jalankan dua arahan berikut untuk menjalankannya buat kali pertama makmal jupyter. Ia mungkin untuk melancarkannya dengan satu arahan, tetapi dalam kes ini, arahan pelancaran, yang sukar diingati dalam fikiran anda, akan diingati oleh bash dalam bekas, dan bukan pada hos, di mana sudah terdapat arahan yang mencukupi untuk mencatatnya dalam sejarah :)

Log masuk ke bekas sebagai pengguna jupyter:

lxc exec jupyterlab -- su -l jupyter

Seterusnya, lari makmal jupyter dengan kunci dan parameter seperti yang ditunjukkan:

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

Pergi ke alamat dalam pelayar web anda http://10.0.5.5:8888 dan pada halaman yang terbuka masukkan token akses yang anda akan lihat dalam konsol. Salin dan tampal pada halaman, kemudian klik Log Masuk. Selepas log masuk, pergi ke menu sambungan di sebelah kiri, seperti yang ditunjukkan dalam rajah di bawah, di mana anda akan digesa, apabila mengaktifkan pengurus sambungan, untuk mengambil risiko keselamatan dengan memasang sambungan daripada pihak ketiga yang arahannya pembangunan JupyterLab tidak bertanggungjawab:

Melancarkan Jupyter ke orbit LXD

Walau bagaimanapun, kami mengasingkan keseluruhannya makmal jupyter dan letakkannya dalam bekas supaya sambungan pihak ketiga yang memerlukan dan menggunakan NodeJS tidak boleh sekurang-kurangnya mencuri data pada cakera selain daripada yang kami buka di dalam bekas. Dapatkan dokumen peribadi anda pada hos masuk /home proses daripada bekas tidak mungkin berjaya, dan jika ia berjaya, maka anda perlu mempunyai keistimewaan pada fail pada sistem hos, kerana kami menjalankan kontena dalam mod tidak bernasib baik. Berdasarkan maklumat ini, anda boleh menilai risiko memasukkan sambungan dalam makmal jupyter.

Mencipta buku nota IPython (halaman dalam makmal jupyter) kini akan dibuat dalam direktori rumah pengguna - /home/jupyter, tetapi rancangan kami adalah untuk memisahkan data (kongsi) antara hos dan bekas, jadi kembali ke konsol dan berhenti makmal jupyter dengan melaksanakan hotkey - CTRL+C dan menjawab y atas permintaan. Kemudian tamatkan sesi interaktif pengguna jupyter melengkapkan hotkey CTRL+D.

Berkongsi data dengan hos ^

Untuk berkongsi data dengan hos, anda perlu mencipta peranti dalam bekas yang membolehkan anda melakukan ini dan untuk melakukan ini, jalankan arahan berikut di mana kami menentukan kunci berikut:

  • lxc config device add β€” Perintah menambah konfigurasi peranti
  • jupyter β€” ID bekas yang konfigurasi ditambah
  • hostfs β€” ID peranti. Anda boleh menetapkan sebarang nama.
  • disk β€” Jenis peranti ditunjukkan
  • path β€” Menentukan laluan dalam bekas yang LXD akan melekapkan peranti ini
  • source β€” Tentukan sumber, laluan ke direktori pada hos yang anda ingin kongsi dengan bekas. Tentukan laluan mengikut keutamaan anda
lxc config device add jupyterlab hostfs disk path=/mnt/hostfs source=/home/dv/projects/ipython-notebooks

Untuk katalog /home/dv/projects/ipython-notebooks kebenaran mesti ditetapkan kepada pengguna kontena yang pada masa ini mempunyai UID bersamaan dengan SubUID + UID, lihat bab Keselamatan. Keistimewaan Kontena dalam artikel Ciri asas LXD - sistem kontena Linux.

Tetapkan kebenaran pada hos, di mana pemiliknya akan menjadi pengguna kontena jupyter, dan pembolehubah $USER akan menentukan pengguna hos anda sebagai kumpulan:

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

Hai dunia! ^

Jika anda masih mempunyai sesi konsol terbuka dalam bekas dengan makmal jupyter, kemudian mulakan semula dengan kunci baharu --notebook-dir dengan menetapkan nilai /mnt/hostfs sebagai laluan ke akar komputer riba dalam bekas untuk peranti yang kami buat dalam langkah sebelumnya:

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

Kemudian pergi ke halaman http://10.0.5.5:8888 dan buat komputer riba pertama anda dengan mengklik butang pada halaman seperti yang ditunjukkan dalam gambar di bawah:

Melancarkan Jupyter ke orbit LXD

Kemudian, dalam medan pada halaman, masukkan kod Python yang akan memaparkan klasik Hello World!. Apabila anda telah selesai memasukkan, tekan CTRL+ENTER atau butang "main" pada bar alat di bahagian atas untuk meminta JupyterLab melakukan ini:

Melancarkan Jupyter ke orbit LXD

Pada ketika ini, hampir semuanya sedia untuk digunakan, tetapi tidak menarik jika kita tidak memasang modul Python tambahan (aplikasi penuh) yang boleh mengembangkan keupayaan standard Python dengan ketara dalam makmal jupyter, oleh itu, mari kita teruskan :)

PS Perkara yang menarik ialah pelaksanaan lama Musytari di bawah nama kod Notebook Jupyter tidak hilang dan ia wujud selari dengan makmal jupyter. Untuk beralih kepada versi lama, ikut pautan menambah akhiran dalam alamat/tree, dan peralihan kepada versi baharu dijalankan dengan akhiran /lab, tetapi ia tidak perlu dinyatakan:

Memperluaskan keupayaan Python ^

Dalam bahagian ini, kami akan memasang modul bahasa Python yang berkuasa seperti numpy, Pandas, Matplotlib, IPyWidgets yang hasilnya diintegrasikan ke dalam komputer riba makmal jupyter.

Sebelum memasang modul Python yang disenaraikan melalui pengurus pakej pip kita mesti terlebih dahulu menyelesaikan kebergantungan sistem dalam Alpine Linux:

  • g++ β€” Diperlukan untuk menyusun modul, kerana sebahagian daripadanya dilaksanakan dalam bahasa C + + dan sambungkan ke Python semasa runtime sebagai modul binari
  • freetype-dev - pergantungan untuk modul Python Matplotlib

Memasang kebergantungan:

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

Terdapat satu masalah: dalam keadaan semasa pengedaran Linux Alpine, ia tidak akan mungkin untuk menyusun versi baharu NumPy; ralat kompilasi akan muncul yang tidak dapat saya selesaikan:

RALAT: Tidak dapat membina roda untuk numpy yang menggunakan PEP 517 dan tidak boleh dipasang terus

Oleh itu, kami akan memasang modul ini sebagai pakej sistem yang mengedarkan versi yang telah disusun, tetapi lebih tua sedikit daripada yang tersedia pada masa ini di tapak:

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

Seterusnya, pasang modul Python melalui pengurus pakej pip. Harap bersabar kerana beberapa modul akan disusun dan mungkin mengambil masa beberapa minit. Pada mesin saya, penyusunan mengambil masa ~15 minit:

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

Membersihkan cache pemasangan:

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

Menguji modul dalam JupyterLab ^

Jika anda sedang berlari makmal jupyter, mulakan semula supaya modul yang baru dipasang diaktifkan. Untuk melakukan ini, dalam sesi konsol, klik CTRL+C di mana anda menjalankannya dan masuk y untuk menghentikan permintaan dan kemudian mulakan semula makmal jupyter dengan menekan anak panah ke atas pada papan kekunci supaya tidak memasukkan arahan lagi dan kemudian Enter untuk memulakannya:

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

Pergi ke halaman http://10.0.5.5:8888/lab atau muat semula halaman dalam penyemak imbas anda, dan kemudian masukkan kod berikut dalam sel buku nota baharu:

%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

Anda sepatutnya mendapat keputusan seperti dalam gambar di bawah, di mana IPyWidgets menjana elemen UI pada halaman yang berinteraksi secara interaktif dengan kod sumber, dan juga Matplotlib memaparkan hasil kod dalam bentuk gambar sebagai graf fungsi:

Melancarkan Jupyter ke orbit LXD

Banyak contoh IPyWidgets anda boleh menemuinya dalam tutorial di sini

Apa lagi? ^

Syabas jika anda kekal dan sampai ke penghujung artikel. Saya sengaja tidak menyiarkan skrip siap pada akhir artikel yang akan dipasang makmal jupyter dalam "satu klik" untuk menggalakkan pekerja :) Tetapi anda boleh melakukannya sendiri, kerana anda sudah tahu caranya, setelah mengumpulkan arahan ke dalam satu skrip Bash :)

Anda juga boleh:

  • Tetapkan nama rangkaian untuk bekas dan bukannya alamat IP dengan menulisnya dalam yang ringkas /etc/hosts dan taip alamat dalam penyemak imbas http://jupyter.local:8888
  • Main-main dengan had sumber untuk bekas, untuk ini baca bab dalam keupayaan asas LXD atau dapatkan maklumat lanjut di tapak pembangun LXD.
  • Tukar tema:

Melancarkan Jupyter ke orbit LXD

Dan banyak lagi yang boleh anda lakukan! Itu sahaja. Semoga anda berjaya!

KEMASKINI: 15.04.2020/18/30 XNUMX:XNUMX - Ralat diperbetulkan dalam bab β€œHello, World!”
KEMASKINI: 16.04.2020/10/00 XNUMX:XNUMX β€” Membetulkan dan menambah teks dalam perihalan pengaktifan pengurus sambungan makmal jupyter
KEMASKINI: 16.04.2020/10/40 XNUMX:XNUMX β€” Membetulkan ralat yang ditemui dalam teks dan diubah sedikit untuk lebih baik bab "Memasang perisian asas dan menyediakan sistem"

Sumber: www.habr.com

Tambah komen