Jupyter LXD orbitasiga chiqarilmoqda

Asosiy tizim haqida qayg'urmaslik va ildiz huquqlari bilan ishlashi kerak bo'lgan kodda xatolik yuz berganda hamma narsani buzmaslik uchun Linuxda kod yoki tizim yordam dasturlari bilan tajriba o'tkazishga majbur bo'lganmisiz?

Aytaylik, bitta mashinada turli xil mikroservislarning butun klasterini sinab ko'rish yoki ishga tushirish kerakligi haqida nima deyish mumkin? Yuz yoki hatto mingmi?

Gipervisor tomonidan boshqariladigan virtual mashinalar bilan bunday muammolarni hal qilish mumkin va hal qilinadi, ammo bu qanday narxga? Masalan, Alpine Linux distributiviga asoslangan LXD konteyneri faqat iste'mol qiladi 7.60MB RAM va ishga tushirilgandan so'ng ildiz bo'limi egallagan joy 9.5MB! Bu sizga qanday yoqadi, Ilon Mask? Men tekshirishni tavsiya qilaman LXD ning asosiy imkoniyatlari - Linuxda konteyner tizimi

Umuman olganda, LXD konteynerlari nima ekanligi ma'lum bo'lgandan so'ng, keling, o'ylab ko'raylik, agar siz xost uchun kodni xavfsiz ishga tushirishingiz, grafiklarni yaratishingiz, UI vidjetlarini kodingiz bilan dinamik (interaktiv) bog'lashingiz mumkin bo'lgan kombayn platformasi bo'lsa nima bo'ladi? kodni blackjack... formatlash bilan matn bilan to'ldirish? Qandaydir interaktiv blogmi? Voy... Men buni xohlayman! Xohlasangiz! 🙂

Mushukning ostiga qarang, u erda biz konteynerga tushiramiz Yupiter laboratoriyasi - eskirgan Jupyter Notebook o'rniga foydalanuvchi interfeysining keyingi avlodi va biz Python modullarini o'rnatamiz, masalan numpy, Pandas, matplotlib, IPyVidjetlar bu sizga yuqorida sanab o'tilgan hamma narsani bajarish va barchasini maxsus faylda - IPython noutbukida saqlash imkonini beradi.

Jupyter LXD orbitasiga chiqarilmoqda

Orbital uchish rejasi ^

Jupyter LXD orbitasiga chiqarilmoqda

Yuqoridagi sxemani amalga oshirishni osonlashtirish uchun qisqacha harakatlar rejasini tuzamiz:

  • Keling, tarqatish to'plamiga asoslangan konteynerni o'rnatamiz va ishga tushiramiz Alpine Linux. Biz ushbu tarqatishdan foydalanamiz, chunki u minimalizmga qaratilgan va unda faqat eng kerakli dasturlarni o'rnatadi, ortiqcha narsa yo'q.
  • Keling, konteynerga qo'shimcha virtual disk qo'shamiz va unga nom beramiz - hostfs va uni ildiz fayl tizimiga o'rnating. Ushbu disk konteyner ichidagi ma'lum bir katalogdan xostdagi fayllardan foydalanish imkonini beradi. Shunday qilib, bizning ma'lumotlarimiz konteynerdan mustaqil bo'ladi. Agar konteyner o'chirilsa, ma'lumotlar xostda qoladi. Bundan tashqari, ushbu sxema konteyner taqsimotining standart tarmoq mexanizmlaridan foydalanmasdan bir xil ma'lumotlarni ko'plab konteynerlar o'rtasida almashish uchun foydalidir.
  • Keling, Bash, sudo, kerakli kutubxonalarni o'rnatamiz, tizim foydalanuvchisini qo'shamiz va sozlaymiz
  • Keling, Python, modullarni o'rnatamiz va ular uchun ikkilik bog'liqliklarni kompilyatsiya qilamiz
  • Keling, o'rnatamiz va ishga tushiramiz Yupiter laboratoriyasi, tashqi ko'rinishini moslashtiring, buning uchun kengaytmalarni o'rnating.

Ushbu maqolada biz konteynerni ishga tushirishdan boshlaymiz, biz LXD-ni o'rnatish va sozlashni ko'rib chiqmaymiz, bularning barchasini boshqa maqolada topishingiz mumkin - LXD - Linux konteyner tizimlarining asosiy xususiyatlari.

Asosiy tizimni o'rnatish va sozlash ^

Biz tasvirni ko'rsatadigan buyruq bilan konteyner yaratamiz - alpine3, konteyner uchun identifikator - jupyterlab va agar kerak bo'lsa, konfiguratsiya profillari:

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

Bu erda men konfiguratsiya profilidan foydalanmoqdaman hddroot ichida ildiz bo'limi bo'lgan konteyner yaratishni belgilaydi Saqlash havzasi jismoniy qattiq diskda joylashgan:

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

Bu menga SSD diskining resurslarini tejab, HDD diskidagi konteynerlar bilan tajriba o'tkazish imkoniyatini beradi, bu mening tizimimda ham mavjud 🙂 buning uchun men alohida konfiguratsiya profilini yaratdim. ssdroot.

Konteyner yaratilgandan so'ng, u holatda STOPPED, shuning uchun uni init tizimini ishga tushirish orqali boshlashimiz kerak:

lxc start jupyterlab

Kalit yordamida LXD da konteynerlar ro‘yxatini ko‘rsatamiz -c qaysi birini bildiradi cko'rsatkichlar:

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

Konteynerni yaratishda IP-manzil tasodifiy tanlandi, chunki biz konfiguratsiya profilidan foydalanganmiz default ilgari maqolada tuzilgan LXD - Linux konteyner tizimlarining asosiy xususiyatlari.

Biz ushbu IP-manzilni hozirgi konfiguratsiyadagi kabi konfiguratsiya profili darajasida emas, balki konteyner darajasida tarmoq interfeysini yaratish orqali esda qolarliroq manzilga o'zgartiramiz. Buni qilish shart emas, uni o'tkazib yuborishingiz mumkin.

Tarmoq interfeysini yaratish eth0 biz kommutatorga bog'laymiz (tarmoq ko'prigi) lxdbr0 unda biz oldingi maqolaga muvofiq NAT-ni yoqdik va konteyner endi Internetga kirish imkoniyatiga ega bo'ladi va biz interfeysga statik IP-manzilni ham tayinlaymiz - 10.0.5.5:

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

Qurilmani qo'shgandan so'ng, konteyner qayta ishga tushirilishi kerak:

lxc restart jupyterlab

Konteyner holatini tekshirish:

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

Asosiy dasturiy ta'minotni o'rnatish va tizimni sozlash ^

Konteynerimizni boshqarish uchun siz quyidagi dasturiy ta'minotni o'rnatishingiz kerak:

To'plam
Tavsif

bosh
GNU Bourne Again qobig'i

bash-to'ldirish
Bash qobig'i uchun dasturlashtiriladigan tugatish

sudo
Ba'zi foydalanuvchilarga ba'zi buyruqlarni root sifatida ishlatish imkoniyatini bering

soya
Soya fayllari va PAMni qo'llab-quvvatlaydigan parol va hisobni boshqarish vositalari to'plami

tzdata
Vaqt mintaqasi va yozgi vaqt maʼlumotlari manbalari

Nano
Pico muharriri yaxshilanishlar bilan klon

Bundan tashqari, siz quyidagi paketlarni o'rnatish orqali tizimning man-sahifalarida qo'llab-quvvatlashni o'rnatishingiz mumkin - man man-pages mdocml-apropos less

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

Keling, biz foydalanadigan buyruqlar va kalitlarni ko'rib chiqaylik:

  • lxc — LXD mijoziga qo‘ng‘iroq qiling
  • exec - Konteynerda buyruqni bajaradigan LXD mijoz usuli
  • jupyterlab - Konteyner identifikatori
  • -- - Boshqa kalitlarni kalit sifatida talqin qilmaslikni belgilaydigan maxsus kalit lxc va ipning qolgan qismini konteynerga o'tkazing
  • apk — Alpine Linux tarqatish paketi menejeri
  • add — Buyruqdan keyin ko'rsatilgan paketlarni o'rnatadigan paket menejeri usuli

Keyinchalik, tizimda vaqt zonasini o'rnatamiz. Europe/Moscow:

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

Vaqt mintaqasini o'rnatgandan so'ng, paket tzdata tizimda endi kerak emas, u joy egallaydi, shuning uchun uni o'chirib tashlaymiz:

lxc exec jupyterlab -- apk del tzdata

Vaqt mintaqasini tekshirish:

lxc exec jupyterlab -- date

Wed Apr 15 10:49:56 MSK 2020

Konteynerda yangi foydalanuvchilar uchun Bash-ni o'rnatishga ko'p vaqt sarflamaslik uchun, keyingi bosqichlarda biz tayyor skel fayllarini xost tizimidan unga nusxalaymiz. Bu sizga konteynerdagi Bashni interaktiv tarzda chiroyli qilish imkonini beradi. Mening xost tizimim Manjaro Linux va ko'chirilayotgan fayllar /etc/skel/.bash_profile, /etc/skel/.bashrc, /etc/skel/.dir_colors printsipial jihatdan ular Alpine Linux uchun mos keladi va jiddiy muammolarni keltirib chiqarmaydi, lekin sizda boshqa tarqatish bo'lishi mumkin va konteynerda Bash-ni ishga tushirishda xatolik mavjudligini mustaqil ravishda aniqlashingiz kerak.

Skel fayllarini konteynerga nusxalash. Kalit --create-dirs agar ular mavjud bo'lmasa, kerakli kataloglarni yaratadi:

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

Mavjud ildiz foydalanuvchisi uchun konteynerga ko'chirilgan skel fayllarini uy katalogiga nusxalash:

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 foydalanuvchilar uchun tizim qobig'ini o'rnatadi /bin/sh, bilan almashtiramiz root Bashdagi foydalanuvchi:

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

ekan root foydalanuvchi parolsiz emas edi, u parol o'rnatishi kerak. Quyidagi buyruq u uchun yangi tasodifiy parolni yaratadi va o'rnatadi, uni bajarilgandan so'ng konsol ekranida ko'rasiz:

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

Shuningdek, yangi tizim foydalanuvchisini yarataylik - jupyter buning uchun biz keyinroq sozlaymiz Yupiter laboratoriyasi:

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

Buning uchun parol yaratamiz va o'rnatamiz:

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

Keyinchalik, biz ikkita buyruqni bajaramiz, birinchisi tizim guruhini yaratadi sudo, ikkinchisi esa unga foydalanuvchi qo'shadi jupyter:

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

Keling, foydalanuvchi qaysi guruhlarga tegishli ekanligini ko'rib chiqaylik jupyter:

lxc exec jupyterlab -- id -Gn jupyter

jupyter sudo

Hammasi yaxshi, keling, davom etamiz.

Guruh a'zolari bo'lgan barcha foydalanuvchilarga ruxsat bering sudo buyrug'idan foydalaning sudo. Buning uchun quyidagi skriptni ishga tushiring, bu erda sed konfiguratsiya faylidagi parametr qatorini izohdan chiqaradi /etc/sudoers:

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

JupyterLabni o'rnatish va sozlash ^

Yupiter laboratoriyasi Python ilovasi, shuning uchun biz avval ushbu tarjimonni o'rnatishimiz kerak. Shuningdek, Yupiter laboratoriyasi Python paket menejeri yordamida o'rnatamiz pip, va tizim emas, chunki u tizim omborida eskirgan bo'lishi mumkin va shuning uchun biz quyidagi paketlarni o'rnatish orqali unga bog'liqlikni qo'lda hal qilishimiz kerak - python3 python3-dev gcc libc-dev zeromq-dev:

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

Python modullari va paket menejerini yangilaymiz pip joriy versiyaga:

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

O'rnatish Yupiter laboratoriyasi paket menejeri orqali pip:

lxc exec jupyterlab -- python3 -m pip install jupyterlab

Kengaytmalardan beri Yupiter laboratoriyasi eksperimental bo‘lib, jupyterlab to‘plami bilan rasman jo‘natilmagan, shuning uchun biz uni qo‘lda o‘rnatishimiz va sozlashimiz kerak.

Keling, NodeJS va uning uchun paketlar menejerini o'rnatamiz - NPM, chunki Yupiter laboratoriyasi ularni kengaytmalari uchun ishlatadi:

lxc exec jupyterlab -- apk add nodejs npm

Kengaytmalar uchun Yupiter laboratoriyasi Biz o'rnatadigan dastur ishlagan bo'lsa, ular foydalanuvchi katalogiga o'rnatilishi kerak, chunki dastur foydalanuvchidan ishga tushiriladi jupyter. Muammo shundaki, ishga tushirish buyrug'ida katalogga uzatiladigan parametr yo'q; dastur faqat muhit o'zgaruvchisini qabul qiladi va shuning uchun biz uni aniqlashimiz kerak. Buning uchun o'zgaruvchini eksport qilish buyrug'ini yozamiz JUPYTERLAB_DIR foydalanuvchi muhitida jupyter, faylga .bashrcfoydalanuvchi har safar tizimga kirganida bajariladi:

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

Keyingi buyruq maxsus kengaytmani o'rnatadi - kengaytma menejeri Yupiter laboratoriyasi:

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

Endi hamma narsa birinchi ishga tushirishga tayyor Yupiter laboratoriyasi, lekin biz hali ham bir nechta foydali kengaytmalarni o'rnatishimiz mumkin:

  • toc — Mundarija, maqola/daftarda sarlavhalar roʻyxatini yaratadi
  • jupyterlab-horizon-theme - UI mavzusi
  • jupyterlab_neon_theme - UI mavzusi
  • jupyterlab-ubu-theme - Boshqasi muallifdan mavzu bu maqola :) Lekin bu holda GitHub omboridan o'rnatish ko'rsatiladi

Shunday qilib, ushbu kengaytmalarni o'rnatish uchun quyidagi buyruqlarni ketma-ket bajaring:

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"

Kengaytmalarni o'rnatgandan so'ng, biz ularni kompilyatsiya qilishimiz kerak, chunki ilgari o'rnatish paytida biz kalitni ko'rsatganmiz --no-build vaqtni tejash uchun. Endi biz ularni bir vaqtning o'zida yig'ish orqali sezilarli darajada tezlashtiramiz:

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

Endi birinchi marta ishga tushirish uchun quyidagi ikkita buyruqni bajaring Yupiter laboratoriyasi. Uni bitta buyruq bilan ishga tushirish mumkin edi, lekin bu holda eslab qolish qiyin bo'lgan ishga tushirish buyrug'i allaqachon etarli buyruqlar mavjud bo'lgan hostda emas, balki konteynerda bash orqali eslab qoladi. ularni tarixga yozib qo'yish :)

Konteynerga foydalanuvchi sifatida kiring jupyter:

lxc exec jupyterlab -- su -l jupyter

Keyingi, yugur Yupiter laboratoriyasi ko'rsatilgandek kalitlar va parametrlar bilan:

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

Veb-brauzeringizdagi manzilga o'ting http://10.0.5.5:8888 va ochilgan sahifada kiriting token konsolda ko'rishingiz mumkin bo'lgan kirish. Uni sahifaga nusxalash va joylashtirish, so'ng tugmasini bosing Kirish. Tizimga kirganingizdan so'ng, quyidagi rasmda ko'rsatilganidek, chap tomondagi kengaytmalar menyusiga o'ting, u erda kengaytma menejerini faollashtirishda buyruq berilgan uchinchi tomon kengaytmalarini o'rnatish orqali xavfsizlikka xavf tug'dirish so'raladi. JupyterLab ishlab chiqish javobgar emas:

Jupyter LXD orbitasiga chiqarilmoqda

Biroq, biz butunlay izolyatsiya qilamiz Yupiter laboratoriyasi NodeJS-ni talab qiladigan va ishlatadigan uchinchi tomon kengaytmalari hech bo'lmaganda diskdagi ma'lumotlarni o'g'irlamasligi uchun uni konteynerga joylashtiring, shunda biz konteyner ichida ochamiz. Xostdagi shaxsiy hujjatlaringizga kiring /home konteynerdagi jarayonlar muvaffaqiyatli bo'lishi dargumon va agar shunday bo'lsa, siz xost tizimidagi fayllar uchun imtiyozlarga ega bo'lishingiz kerak, chunki biz konteynerni ishga tushiramiz. imtiyozsiz rejim. Ushbu ma'lumotlarga asoslanib, siz kengaytmalarni kiritish xavfini baholashingiz mumkin Yupiter laboratoriyasi.

Yaratilgan IPython noutbuklari (sahifalar Yupiter laboratoriyasi) endi foydalanuvchining uy katalogida yaratiladi - /home/jupyter, lekin bizning rejalarimiz ma'lumotlarni xost va konteyner o'rtasida bo'lishdir, shuning uchun konsolga qayting va to'xtating. Yupiter laboratoriyasi tezkor tugmani bajarish orqali - CTRL+C va javob berish y iltimosiga binoan. Keyin foydalanuvchining interaktiv seansini to'xtating jupyter tezkor tugmani to'ldirish CTRL+D.

Xost bilan ma'lumotlarni almashish ^

Xost bilan ma'lumotlarni almashish uchun siz konteynerda buni amalga oshirishga imkon beradigan qurilma yaratishingiz kerak va buni amalga oshirish uchun quyidagi buyruqni bajaring, bu erda biz quyidagi tugmachalarni belgilaymiz:

  • lxc config device add — Buyruq qurilma konfiguratsiyasini qo'shadi
  • jupyter — konfiguratsiya qo'shilgan konteyner identifikatori
  • hostfs - Qurilma identifikatori. Siz har qanday nomni o'rnatishingiz mumkin.
  • disk — Qurilmaning turi ko'rsatilgan
  • path — LXD ushbu qurilmani o'rnatadigan konteynerdagi yo'lni belgilaydi
  • source — Konteyner bilan baham ko'rmoqchi bo'lgan xostdagi manbani, katalogga yo'lni belgilang. O'zingizning xohishingizga ko'ra yo'lni belgilang
lxc config device add jupyterlab hostfs disk path=/mnt/hostfs source=/home/dv/projects/ipython-notebooks

Katalog uchun /home/dv/projects/ipython-notebooks ruxsat hozirda teng UIDga ega bo'lgan konteyner foydalanuvchisiga o'rnatilishi kerak SubUID + UID, bobga qarang Xavfsizlik. Konteyner imtiyozlari maqolasida LXD - Linux konteyner tizimlarining asosiy xususiyatlari.

Xostga ruxsatni o'rnating, bu erda egasi konteyner foydalanuvchisi bo'ladi jupyter, va o'zgaruvchi $USER xost foydalanuvchingizni guruh sifatida belgilaydi:

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

Salom Dunyo! ^

Agar siz hali ham konteynerda ochiq konsol seansiga ega bo'lsangiz Yupiter laboratoriyasi, keyin uni yangi kalit bilan qayta ishga tushiring --notebook-dir qiymatni belgilash orqali /mnt/hostfs Avvalgi bosqichda biz yaratgan qurilma uchun konteynerdagi noutbuklarning ildiziga yo'l sifatida:

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

Keyin sahifaga o'ting http://10.0.5.5:8888 va quyidagi rasmda ko'rsatilgandek sahifadagi tugmani bosish orqali birinchi noutbukingizni yarating:

Jupyter LXD orbitasiga chiqarilmoqda

Keyin sahifadagi maydonga klassikani ko'rsatadigan Python kodini kiriting Hello World!. Kirishni tugatgandan so'ng, tugmasini bosing CTRL+ENTER yoki JupyterLab buni amalga oshirishi uchun tepadagi asboblar panelidagi "o'ynash" tugmasi:

Jupyter LXD orbitasiga chiqarilmoqda

Hozirgi vaqtda deyarli hamma narsa foydalanishga tayyor, ammo Python-ning standart imkoniyatlarini sezilarli darajada kengaytira oladigan qo'shimcha Python modullarini (to'liq huquqli ilovalar) o'rnatmasak, bu qiziq bo'lmaydi. Yupiter laboratoriyasi, shuning uchun keling, davom etaylik :)

PS Qizig'i shundaki, eski dastur Yupyter kod nomi ostida Yupyter daftarchasi ketmagan va u bilan parallel ravishda mavjud Yupiter laboratoriyasi. Eski versiyaga o'tish uchun manzilga qo'shimchani qo'shadigan havolaga o'ting/tree, va yangi versiyaga o'tish qo'shimchasi bilan amalga oshiriladi /lab, lekin uni belgilash shart emas:

Python imkoniyatlarini kengaytirish ^

Ushbu bo'limda biz kuchli Python tili modullarini o'rnatamiz numpy, Pandas, matplotlib, IPyVidjetlar natijalari noutbuklarga integratsiya qilingan Yupiter laboratoriyasi.

Ro'yxatdagi Python modullarini paket menejeri orqali o'rnatishdan oldin pip Biz birinchi navbatda Alpine Linux-da tizimga bog'liqlikni hal qilishimiz kerak:

  • g++ — Modullarni kompilyatsiya qilish uchun kerak, chunki ularning ba'zilari tilda amalga oshiriladi C ++ va Python-ga ish vaqtida ikkilik modullar sifatida ulaning
  • freetype-dev - Python moduliga bog'liqlik matplotlib

Bog'liqlarni o'rnatish:

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

Bitta muammo bor: Alpine Linux tarqatishning hozirgi holatida NumPy-ning yangi versiyasini kompilyatsiya qilish mumkin bo'lmaydi; men hal qila olmagan kompilyatsiya xatosi paydo bo'ladi:

ERROR: PEP 517 dan foydalanadigan va to'g'ridan-to'g'ri o'rnatib bo'lmaydigan numpy uchun g'ildiraklar qurib bo'lmadi

Shuning uchun biz ushbu modulni allaqachon tuzilgan versiyani tarqatadigan tizim paketi sifatida o'rnatamiz, lekin hozirda saytda mavjud bo'lganidan biroz eskiroq:

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

Keyin paket menejeri orqali Python modullarini o'rnating pip. Iltimos, sabr qiling, chunki ba'zi modullar kompilyatsiya qilinadi va bir necha daqiqa vaqt olishi mumkin. Mening mashinamda kompilyatsiya ~ 15 daqiqa davom etdi:

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

O'rnatish keshlarini tozalash:

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

JupyterLab-da sinov modullari ^

Agar siz yugurayotgan bo'lsangiz Yupiter laboratoriyasi, yangi o'rnatilgan modullar faollashishi uchun uni qayta ishga tushiring. Buning uchun konsol seansida bosing CTRL+C u ishlayotgan qaerda va kiring y so'rovni to'xtatib, keyin yana boshlash uchun Yupiter laboratoriyasi buyruqni yana va keyin kiritmaslik uchun klaviaturadagi yuqoriga o'qni bosib Enter boshlash uchun:

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

Sahifaga o'ting http://10.0.5.5:8888/lab yoki brauzeringizdagi sahifani yangilang va keyin yangi daftar katagiga quyidagi kodni kiriting:

%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

Quyidagi rasmdagi kabi natija olishingiz kerak, qaerda IPyVidjetlar sahifada manba kodi bilan interaktiv o'zaro ta'sir qiluvchi UI elementini yaratadi va shuningdek matplotlib kod natijasini rasm ko'rinishida funktsiya grafigi sifatida ko'rsatadi:

Jupyter LXD orbitasiga chiqarilmoqda

Ko'p misollar IPyVidjetlar uni o'quv qo'llanmalarida topishingiz mumkin shu yerda

Nima yana? ^

Agar siz qolib, maqolaning oxiriga etib borgan bo'lsangiz, yaxshi. Maqolaning oxirida o'rnatiladigan tayyor skriptni ataylab joylashtirmadim Yupiter laboratoriyasi Ishchilarni rag'batlantirish uchun "bir marta bosish" bilan :) Lekin siz buni o'zingiz qilishingiz mumkin, chunki siz buyruqlarni bitta Bash skriptida to'plaganingiz uchun qanday qilishni allaqachon bilasiz :)

Siz shuningdek:

  • Konteyner uchun IP-manzil o'rniga tarmoq nomini oddiy tarzda yozib qo'ying /etc/hosts va brauzerda manzilni kiriting http://jupyter.local:8888
  • Konteyner uchun resurs chegarasi bilan o'ynang, buning uchun bobni o'qing asosiy LXD imkoniyatlari yoki LXD ishlab chiquvchi saytida qo'shimcha ma'lumot oling.
  • Mavzuni o'zgartiring:

Jupyter LXD orbitasiga chiqarilmoqda

Va yana ko'p narsalarni qila olasiz! Ana xolos. Sizga muvaffaqiyatlar tilayman!

YANGILANISH: 15.04.2020 18:30 - “Salom, dunyo!” bobidagi xatolar tuzatildi.
YANGILANISH: 16.04.2020 10:00 - Kengaytma menejerini faollashtirish tavsifida tuzatilgan va qo'shilgan matn Yupiter laboratoriyasi
YANGILANISH: 16.04.2020 10:40 — Matnda topilgan xatolar tuzatildi va “Asosiy dasturiy taʼminotni oʻrnatish va tizimni sozlash” boʻlimi yaxshi tomonga biroz oʻzgartirildi.

Manba: www.habr.com

a Izoh qo'shish