Ці даводзілася вам эксперыментаваць з кодам або сістэмнымі ўтылітамі ў Linux так, каб не трэсціся за базавую сістэму і не знесці ўсё з вантробамі ў выпадку памылкі кода які павінен запусціцца з root-прывілеямі?
А як на рахунак таго, што дапушчальны, неабходна пратэставаць ці запусціць цэлы кластар разнастайных мікрасэрвісаў на адной машыне? Сотню ці нават тысячу?
З віртуальнымі машынамі кіраваныя гіпервізарам такія задачы вырашыць можа і атрымаецца, але якім коштам? Напрыклад, кантэйнер у LXD на базе дыстрыбутыва Alpine Linux мінімальна спажывае за ўсё 7.60MB
АЗП, і дзе каранёвая частка пасля запуску займае 9.5MB
! Як табе такое, Ілон Маск? Рэкамендую азнаёміцца з базавымі магчымасцямі LXD - сістэмы кантэйнераў у Linux
Пасля таго, як у цэлым стала ясна, што такое кантэйнеры LXD, пойдзем далей і падумаем, а што, калі б была такая платформа-камбайн, дзе можна было б бяспечна запускаць код для хаста, генераваць графікі, дынамічна (інтэрактыўна) злучаць UI- фішкі з тваім кодам, дапаўняць код тэкстам з блэкджэкам… фарматаваннем? Нешта тыпу інтэрактыўнага блога? Вауу… Хачу! Жадаю! 🙂
Зазірай пад кат дзе мы запусцім у кантэйнеры лабараторыя Юпітэра - наступнай генерацыі карыстацкага інтэрфейсу замест састарэлага Jupyter Notebook, а таксама ўсталюем такія модулі Python як numpy, Панды, matplotlib, IPyWidgets якія дазволяць вытвараць усё пералічанае вышэй і захоўваць гэта ўсё ў адмысловым файле - IPython-наўтбуку.
Навігацыя
- План узлёту на арбіту
- Устаноўка і настройка базавай сістэмы
- Ўстаноўка базавага софту і настройка сістэмы
- Ўстаноўка і настройка JupyterLab
- Падзяляем дадзеныя з хастом
- Прывітанне Сусвет!
- Пашыраем магчымасці Python
- Тэстуем модулі ў JupyterLab
- Што яшчэ?
План узлёту на арбіту ^
Накідаем кароткі план дзеянняў, каб нам было прасцей рэалізаваць схему вышэй:
- Усталюем і запусцім кантэйнер на базе дыстрыбутыва Alpine Linux. Мы будзем выкарыстоўваць гэты дыстрыбутыў бо ён накіраваны на мінімалістычнасць і ўсталюем у яго толькі самы неабходны софт, нічога лішняга.
- Дадамо дадатковы віртуальны дыск у кантэйнеры якому задамо імя
hostfs
і змантаваны да каранёвай ФС. Гэты дыск дасць магчымасць выкарыстоўваць файлы на хасце з зададзенага каталога ўнутры кантэйнера. Тым самым дадзеныя будуць у нас незалежныя ад кантэйнера. У выпадку выдалення кантэйнера, дадзеныя застануцца на хасце. Таксама, гэтая схема карысная для падзелу адных дадзеных паміж шматлікімі кантэйнерамі не выкарыстоўваючы штатныя сеткавыя механізмы дыстрыбутыва кантэйнера. - Усталюем Bash, sudo, неабходныя бібліятэкі, дадамо і наладзім сістэмнага карыстальніка
- Усталюем Python, модулі і скампілюем для іх бінарныя залежнасці
- Усталюем і запусцім лабараторыя Юпітэра, наладзім вонкавы выгляд, усталюем пашырэнні для яго.
У гэтым артыкуле мы з вамі пачнем з запуску кантэйнера, не будзем разглядаць усталёўку і наладу LXD, усё гэта вы можаце знайсці ў іншым артыкуле — Базавыя магчымасці LXD - сістэмы кантэйнераў у Linux.
Устаноўка і настройка базавай сістэмы ^
Ствараем кантэйнер камандай у якой паказваем вобраз - alpine3
, ідэнтыфікатар для кантэйнера jupyterlab
і пры неабходнасці профілі канфігурацыі:
lxc init alpine3 jupyterlab --profile=default --profile=hddroot
Тут я выкарыстоўваю профіль канфігурацыі hddroot
які паказвае стварыць кантэйнер з root-часткай у Басейн захоўвання размешчаным на фізічным HDD дыску:
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
Гэта дае мне магчымасць эксперыментаваць з кантэйнерамі на HDD дыску эканомячы рэсурсы SSD дыска які таксама маецца ў маёй сістэме 🙂 для якога ў мяне створаны асобны профіль канфігурацыі ssdroot
.
Пасля стварэння кантэйнера ён знаходзіцца ў стане STOPPED
, таму нам трэба яго стартануць запусціўшы ў ім init-сістэму:
lxc start jupyterlab
Вывядзем спіс кантэйнераў у LXD выкарыстоўваючы ключ -c
які паказвае якія columns вывесці на экран:
lxc list -c ns4b
+------------+---------+-------------------+--------------+
| NAME | STATE | IPV4 | STORAGE POOL |
+------------+---------+-------------------+--------------+
| jupyterlab | RUNNING | 10.0.5.198 (eth0) | hddpool |
+------------+---------+-------------------+--------------+
Пры стварэнні кантэйнера IP адрас абраўся выпадковым чынам, бо мы выкарыстоўвалі профіль канфігурацыі. default
які быў раней сканфігураваны ў артыкуле Базавыя магчымасці LXD - сістэмы кантэйнераў у Linux.
Мы памяняем гэты IP адрас на больш запамінальны, стварыўшы сеткавы інтэрфейс на ўзроўні кантэйнера, а не на ўзроўні профіля канфігурацыі як гэта цяпер у бягучай канфігурацыі. Гэта не абавязкова рабіць, вы можаце прапусціць гэта.
Ствараем сеткавы інтэрфейс eth0
які лінцуем з камутатарам (сеткавым мастом) lxdbr0
у якім мы ўключылі NAT па мінулым артыкуле і кантэйнеру зараз будзе доступ у Інтэрнэт, а таксама інтэрфейсу прызначаем статычны IP адрас 10.0.5.5
:
lxc config device add jupyterlab eth0 nic name=eth0 nictype=bridged parent=lxdbr0 ipv4.address=10.0.5.5
Пасля дадання прылады, кантэйнер неабходна перазагрузіць:
lxc restart jupyterlab
Правяраем статут кантэйнера:
lxc list -c ns4b
+------------+---------+------------------+--------------+
| NAME | STATE | IPV4 | STORAGE POOL |
+------------+---------+------------------+--------------+
| jupyterlab | RUNNING | 10.0.5.5 (eth0) | hddpool |
+------------+---------+------------------+--------------+
Ўстаноўка базавага софту і настройка сістэмы ^
Для адміністравання нашага кантэйнера неабходна ўсталяваць наступны софт:
пакет
Апісанне
біць
The GNU Bourne Again shell
bash-завяршэнне
Programmable completion for bash shell
Sudo
Give certain users ability to run some commands as root
цень
Password and account management tool suite with support for shadow files and PAM
тздата
Sources for time zone and daylight saving time data
нана
Pico editor clone with enhancements
Дадаткова, вы можаце ўсталяваць падтрымку ў сістэме man-pages, усталяваўшы наступныя пакеты. man man-pages mdocml-apropos less
lxc exec jupyterlab -- apk add bash bash-completion sudo shadow tzdata nano
Разбярэм каманды і ключы які мы выкарыстоўвалі:
lxc
- Выклік кліента LXDexec
- Метад кліента LXD, які запускае каманду ў кантэйнерыjupyterlab
- Ідэнтыфікатар кантэйнера--
- Спецыяльны ключ, які паказвае не інтэрпрэтаваць далей ключы як ключы дляlxc
і перадаць увесь астатні радок як ёсць у кантэйнерapk
- Пакетны менеджэр дыстрыбутыва Alpine Linuxadd
- Метад пакетнага мэнэджара які ўсталеўвае паказаныя пасля каманды пакеты
Далей, усталюем у сістэме тайм-зону Europe/Moscow
:
lxc exec jupyterlab -- cp /usr/share/zoneinfo/Europe/Moscow /etc/localtime
Пасля ўстаноўкі тайм-зоны, пакет tzdata
у сістэме больш не патрэбен, ён будзе займаць месца, таму, выдалім яго:
lxc exec jupyterlab -- apk del tzdata
Правяраем тайм-зону:
lxc exec jupyterlab -- date
Wed Apr 15 10:49:56 MSK 2020
Каб не марнаваць шмат часу на наладу Bash для новых карыстачоў у кантэйнеры, наступнымі дзеяннямі, мы скапіюем у яго з хаставой сістэмы ўжо гатовыя skel-файлы. Гэта дазволіць перафарбаваць Bash у кантэйнеры ў інтрактыўным рэжыме. У мяне хаставая сістэма - Manjaro Linux і капіюемыя файлы /etc/skel/.bash_profile
, /etc/skel/.bashrc
, /etc/skel/.dir_colors
у прынцыпе падыходзяць да Alpine Linux і крытычных праблем не выклікаюць, але ў вас гэта можа быць іншы дыстрыбутыў і вам трэба самастойна разабрацца ў выпадку памылкі запускае Bash ў кантэйнеры.
Капіяваны skel-файлы ў кантэйнер. Ключ --create-dirs
створыць неабходныя дырэкторыі, калі яны не існуюць:
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
Для ўжо існага root-карыстача скапіюем у хатнюю дырэкторыю толькі што скапіяваныя ў кантэйнер skel-файлы:
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 для карыстачоў усталёўваецца сістэмная абалонка /bin/sh
, мы заменім яе ў root
карыстальніка на Bash:
lxc exec jupyterlab -- usermod --shell=/bin/bash root
Каб root
карыстач не быў беспарольным, яму трэба ўсталяваць пароль. Наступная каманда згенеруе і ўсталюе яму новы выпадковы пароль які вы ўбачыце на экране кансолі пасля яе выканання:
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
Таксама, створым новага сістэмнага карыстальніка - jupyter
для якога пазней настроім лабараторыя Юпітэра:
lxc exec jupyterlab -- useradd --create-home --shell=/bin/bash jupyter
Які згенеруецца і ўсталюем яму пароль:
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
Далей выканаем дзве каманды, першая створыць сістэмную групу sudo
, а другая дадасць у яе карыстальніка jupyter
:
lxc exec jupyterlab -- groupadd --system sudo
lxc exec jupyterlab -- groupmems --group sudo --add jupyter
Прагледзім, у якія групы ўваходзіць карыстач jupyter
:
lxc exec jupyterlab -- id -Gn jupyter
jupyter sudo
Усё - ок, рухаемся далей.
Дазволім усім карыстальнікам якія ўваходзяць у групу sudo
выкарыстоўваць каманду sudo
. Для гэтага выканайце наступны скрыпт, дзе sed
раскаментуе радок параметру ў канфігурацыйным файле /etc/sudoers
:
lxc exec jupyterlab -- /bin/bash -c "sed --in-place -e '/^#[ t]*%sudo[ t]*ALL=(ALL)[ t]*ALL$/ s/^[# ]*//' /etc/sudoers"
Ўстаноўка і настройка JupyterLab ^
лабараторыя Юпітэра - гэта Python дадатак, таму мы павінны перш усталяваць гэты інтэрпрэтатар. Таксама, лабараторыя Юпітэра мы будзем усталёўваць з дапамогай пітонаўскага пакетнага мэнэджара pip
, а не сістэмнага, таму што ў сістэмным рэпазітары ён можа быць састарэлым, і таму, мы павінны ўручную дазволіць залежнасці для яго усталяваўшы наступныя пакеты python3 python3-dev gcc libc-dev zeromq-dev
:
lxc exec jupyterlab -- apk add python3 python3-dev gcc libc-dev zeromq-dev
Абновім python-модулі і пакетны менеджэр pip
да актуальнай версіі:
lxc exec jupyterlab -- python3 -m pip install --upgrade pip setuptools wheel
Усталёўваны лабараторыя Юпітэра праз пакетны менеджэр pip
:
lxc exec jupyterlab -- python3 -m pip install jupyterlab
Так як пашырэння ў лабараторыя Юпітэра з'яўляюцца эксперыментальнымі і афіцыйна яны не пастаўляюцца разам з jupyterlab пакет, таму мы павінны ўсталяваць і наладзіць гэта ўручную.
Усталюем NodeJS і менеджэр пакетаў для яго – NPM, бо лабараторыя Юпітэра выкарыстоўвае іх для сваіх пашырэнняў:
lxc exec jupyterlab -- apk add nodejs npm
Каб пашырэння для лабараторыя Юпітэра якія мы ўсталюем працавалі, іх трэба ўсталёўваць у карыстацкую дырэкторыю так як прыкладанне будзе запускацца ад карыстальніка jupyter
. Праблема ў тым, што няма параметра ў камандзе запуску якой можна перадаць каталог, прыкладанне ўспрымае толькі зменную асяроддзі і таму мы яе павінны вызначыць. Для гэтага, мы прапішам каманду экспарту зменнай JUPYTERLAB_DIR
у асяроддзі карыстальніка jupyter
, у файл .bashrc
, які выконваецца кожны раз пры ўваходзе карыстальніка ў сістэму:
lxc exec jupyterlab -- su -l jupyter -c "echo -e "nexport JUPYTERLAB_DIR=$HOME/.local/share/jupyter/lab" >> .bashrc"
Наступнай камандай усталюем спецыяльнае пашырэнне - менеджэр пашырэнняў у лабараторыя Юпітэра:
lxc exec jupyterlab -- su -l jupyter -c "export JUPYTERLAB_DIR=$HOME/.local/share/jupyter/lab; jupyter labextension install --no-build @jupyter-widgets/jupyterlab-manager"
Цяпер ужо ўсё гатова для першага запуску лабараторыя Юпітэра, але мы можам яшчэ ўсталяваць некалькі карысных пашырэнняў:
toc
— Table of Contents, генеруе спіс загалоўкаў у артыкуле/наўтбукуjupyterlab-horizon-theme
- Тэма афармлення UIjupyterlab_neon_theme
- Тэма афармлення UIjupyterlab-ubu-theme
- Яшчэ адна тэма афармлення ад аўтара гэтага артыкула 🙂 Але ў гэтым выпадку, будзе паказана ўстаноўка з рэпазітара GitHub
Такім чынам, выканайце паслядоўна наступныя каманды, каб усталяваць гэтыя пашырэнні:
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"
Пасля ўсталёўкі пашырэнняў мы павінны іх скампіляваць, бо раней, пры ўсталёўцы паказвалі ключ --no-build
для эканоміі часу. Цяпер мы значна паскорымся скампіляваўшы іх разам за адзін раз:
lxc exec jupyterlab -- su -l jupyter -c "export JUPYTERLAB_DIR=$HOME/.local/share/jupyter/lab; jupyter lab build"
Цяпер выканайце наступныя дзве каманды для першага запуску лабараторыя Юпітэра. Можна было б яго запусціць адной камандай, але ў гэтым выпадку, каманда запуску, якую ў розуме праца трымаць, яна будзе запамінацца bash'ем у кантэйнеры, а не на хасце, дзе і так каманд хапае для запісу іх у гісторыю 🙂
Лагін у кантэйнеры як карыстальнік jupyter
:
lxc exec jupyterlab -- su -l jupyter
Далей запусціце лабараторыя Юпітэра з ключамі і параметрамі як паказана:
[jupyter@jupyterlab ~]$ jupyter lab --ip=0.0.0.0 --no-browser
Перайдзіце ў web-браўзэры па адрасе http://10.0.5.5:8888 і на старонцы, якая адкрылася, увядзіце знак доступу які вы ўбачыце ў кансолі. Скапіюйце яго і ўстаўце на старонцы, затым націсніце Увайсці. Пасля ўваходу, перайдзіце злева ў меню пашырэнняў, як паказана на малюнку ніжэй, дзе вам прапануюць пры актывацыі мэнэджара пашырэнняў прыняць на сябе рызыкі па бяспецы усталёўваючы пашырэнні ад трэціх асоб за якія каманда JupyterLab development адказнасці не нясе:
Аднак, мы якраз для гэтага ізалюем цалкам лабараторыя Юпітэра і змяшчаем яго ў кантэйнер, каб іншыя пашырэнні патрабавальныя і выкарыстоўвалыя NodeJS не змаглі прынамсі выкрасці дадзеныя на дыску акрамя тых, якія мы адкрыем усярэдзіне кантэйнера. Дабрацца да вашых прыватных дакументаў на хасце ў /home
працэсам з кантэйнера наўрад атрымаецца, а калі і атрымаецца, то на гэта трэба мець прывілеі на файлы ў хаставой сістэме, бо мы запускаем кантэйнер у непрывілеяваным рэжыме. Зыходзячы з гэтай інфармацыі вы можаце ацаніць рызыку ўключэння пашырэнняў у лабараторыя Юпітэра.
Створаныя IPython-наўтбукі (старонкі ў лабараторыя Юпітэра) зараз будуць стварацца ў хатняй дырэкторыі карыстальніка — /home/jupyter
, але ў нашых планах падзяліць дадзеныя (расшарыць) паміж хастом і кантэйнерам, таму, вярніцеся ў кансоль і спыніце лабараторыя Юпітэра выканаўшы hotkey - CTRL+C
і адказаўшы y
на запыт. Затым разарвіце інтэрактыўную сесію карыстальніка jupyter
выканаўшы жадай CTRL+D
.
Падзяляем дадзеныя з хастом ^
Каб падзяліць дадзеныя з хастом, трэба стварыць у кантэйнеры такую прыладу, якое гэта дазваляе рабіць і для гэтага выканайце наступную каманду дзе мы паказваем наступныя ключы:
lxc config device add
- Каманда дадае канфігурацыю прыладыjupyter
- Ідэнтыфікатар кантэйнера ў які дадаецца канфігурацыяhostfs
- Ідэнтыфікатар прылады. Вы можаце задаць любое імя.disk
- Указваецца тып прыладыpath
- Указваецца шлях у кантэйнеры да якога LXD змантуе гэтую прыладуsource
- Указваецца крыніца, шлях да каталога на хасце які вы жадаеце падзяліць з кантэйнерам. Пазначце шлях згодна з вашым перавагам
lxc config device add jupyterlab hostfs disk path=/mnt/hostfs source=/home/dv/projects/ipython-notebooks
Для каталога /home/dv/projects/ipython-notebooks
павінна быць усталявана дазвол кантэйнернаму карыстачу які зараз мае UID роўны SubUID + UID
, глядзіце главу Бяспека. Прывілеі кантэйнераў у артыкуле Базавыя магчымасці LXD - сістэмы кантэйнераў у Linux.
Усталёўваны дазвол на хасце, дзе ўладальнікам будзе кантэйнерны карыстач jupyter
, а зменная $USER
пакажа вашага хоставага карыстальніка ў якасці групы:
sudo chown 1001000:$USER /home/dv/projects/ipython-notebooks
Прывітанне Сусвет! ^
Калі ў вас яшчэ адкрыта кансольная сесія ў кантэйнеры з лабараторыя Юпітэра, то перазапусціце яе з новым ключом --notebook-dir
задаўшы значэнне /mnt/hostfs
у якасці шляху да кораня наўтбукаў у кантэйнеры для прылады якое мы стварылі ў папярэднім кроку:
jupyter lab --ip=0.0.0.0 --no-browser --notebook-dir=/mnt/hostfs
Затым перайдзіце на старонку http://10.0.5.5:8888 і стварыце першы ваш наўтбук націснуўшы кнопку на старонцы як паказана на малюнку ніжэй:
Затым у поле на старонцы увядзіце код на мове Python які выведзе класічны Hello World!
. Па заканчэнні ўводу націсніце CTRL+ENTER
або кнопку "play" на панэлі прылад зверху каб JupyterLab выканаў гэта:
На гэтым амаль усё гатова да выкарыстання, але будзе нецікава, калі мы не ўсталюем дадатковыя Python-модулі (паўнавартасныя прыкладанні) якія дазваляюць значна пашырыць стандартныя магчымасці Python у лабараторыя Юпітэра, таму, рухаемся далей 🙂
PS Цікава тое, што старая рэалізацыя Юпітэр пад кодавым імем Jupyter наўтбукаў нікуды не падзелася і яна існуе паралельна з лабараторыя Юпітэра. Для пераходу да старой версіі перайдзіце па спасылцы дадаўшы ў адрасе суфікс/tree
, а пераход да новай версіі ажыццяўляецца з суфіксам /lab
, Але яго не абавязкова паказваць:
- Jupyter Notebook http://10.0.5.5:8888/tree
- Jupyter Lab - http://10.0.5.5:8888/lab
Пашыраем магчымасці Python ^
У гэтым раздзеле мы ўсталюем такія магутныя модулі мовы Python як numpy, Панды, matplotlib, IPyWidgets вынікі працы якіх інтэгруюцца ў наўтбукі лабараторыя Юпітэра.
Перш чым усталяваць пералічаныя модулі Python праз пакетны мэнэджар pip
мы павінны спачатку дазволіць сістэмныя залежнасці ў Alpine Linux:
g++
- Патрэбны для кампіляцыі модуляў, бо некаторыя з іх рэалізаваны на мове C + + і падключаюцца да Python у рантайме як бінарныя модуліfreetype-dev
- залежнасць для Python модуля matplotlib
Усталёўваны залежнасці:
lxc exec jupyterlab -- apk add g++ freetype-dev
Ёсць адна праблема, у бягучым стане дыстрыбутыва Alpine Linux скампіляваць новую версію NumPy не атрымаецца, вылеціць памылка кампіляцыі якую мне не атрымалася дазволіць:
ПАМЫЛКА: Не трэба пабудаваць wheels для numpy which use PEP 517 and cannot be installed directly
Таму, гэты модуль мы ўсталюем як сістэмны пакет які распаўсюджвае ўжо скампіляваную версію, але крыху старэй, чым даступная цяпер на сайце:
lxc exec jupyterlab -- apk add py3-numpy py3-numpy-dev
Далей усталёўваны Python-модулі праз пакетны мэнэджар pip
. Набярыцеся цярпенні, бо некаторыя модулі будуць кампілявацца і гэта зойме некалькі хвілін. На маёй машыне кампіляцыя заняла ~15 хвілін:
lxc exec jupyterlab -- python3 -m pip install pandas ipywidgets matplotlib
Які чысціцца кэшы ўсталёвак:
lxc exec jupyterlab -- rm -rf /home/*/.cache/pip/*
lxc exec jupyterlab -- rm -rf /root/.cache/pip/*
Тэстуем модулі ў JupyterLab ^
Калі ў вас запушчаны лабараторыя Юпітэра, перазапусціце яго, каб новыя ўсталяваныя модулі актываваліся. Для гэтага ў кансольнай сесіі націсніце CTRL+C
там дзе ён у вас запушчаны і ўвядзіце y
на запыт прыпынку, а затым запусціце нанова лабараторыя Юпітэра націснуўшы стрэлачку на клавіятуры «уверх», каб не ўводзіць каманду нанова і потым Enter
каб запусціць:
jupyter lab --ip=0.0.0.0 --no-browser --notebook-dir=/mnt/hostfs
Перайдзіце на старонку http://10.0.5.5:8888/lab або абновіце ў браўзэры старонку, а затым увядзіце наступны код у новым вочку наўтбука:
%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
У вас павінен атрымацца вынік як на малюнку ніжэй, дзе IPyWidgets генеруе UI-элемент на старонцы які інтэрактыўна ўзаемадзейнічае з зыходным кодам, а таксама matplotlib выводзіць вынік кода ў выглядзе карцінкі як графік функцыі:
Многія прыклады IPyWidgets вы можаце знайсці ў тутарыял тут
Што яшчэ? ^
Вы малайцы, калі засталіся і дайшлі да самага канца артыкула. Я спецыяльна не стаў выкладваць гатовы скрыпт у канцы артыкула які б устанавіў лабараторыя Юпітэра у "адзін клік", каб заахвоціць працаўнікоў 🙂 Але вы можаце гэта зрабіць самастойна, бо ўжо ведаеце як, сабраўшы каманды ў адзіны Bash скрыпт 🙂
Таксама, вы можаце:
- Задаць сеткавае імя для кантэйнера замест IP адрасу прапісаўшы яго ў простым
/etc/hosts
і ў браўзэры набіраць адрас http://jupyter.local:8888 - Пагуляцца з абмежаваннем рэсурсаў для кантэйнера, для гэтага прачытайце раздзел у базавых магчымасцях LXD ці атрымаеце больш інфармацыі на сайце распрацоўніка LXD.
- Памяняць тэму афармлення:
І шмат чаго яшчэ вы можаце! На гэтым усё. Жадаю вам поспехаў!
UPDATE: 15.04.2020 18:30 - Выправіў памылкі ў главе «Hello, World!»
UPDATE: 16.04.2020 10:00 — Адкарэктаваў і дадаў тэкст у апісанні актывацыі мэнэджара пашырэнняў лабараторыя Юпітэра
UPDATE: 16.04.2020 10:40 — Выправіў знойдзеныя памылкі ў тэксце і крыху змяніў да лепшага кіраўніка «Усталяванне базавага софту і настройка сістэмы»
Крыніца: habr.com