将Jupyter发射到轨道LXD

您是否曾经尝试过在Linux上使用代码或系统实用工具进行实验,以确保您不会摇动基本系统,并且在发生应以root特权运行的代码错误的情况下,也不会将其全部删除?


但是,例如必须在一台机器上测试或运行各种微服务的整个集群的事实又如何呢?一百甚至一千?


使用由管理程序管理的虚拟机,这样的任务可以并且将成功,但是要付出多少代价?例如,基于Alpine Linux发行版的LXD中的容器最小地消耗了所有7.60MBRAM,并且在启动后占用了根分区9.5MB埃隆·马斯克(Elon Musk),您觉得怎么样?我建议您熟悉LXD基本功能-Linux中的容器系统


在大致了解LXD容器是什么之后,让我们继续思考一下,如果有这样的平台处理器,可以安全地为主机运行代码,生成图形,动态(交互)绑定UI-带有代码的小部件,添加带有文本的代码 二十一点...格式化?像交互式博客一样?哇...我想要!想! :)


看看这只猫,我们将在容器中启动JupyterLab-下一代用户界面而不是过时的Jupyter Notebook,并安装Python模块(例如NumPyPandasMatplotlibIPyWidgets),它们将允许您执行上述所有操作并将其保存在特殊文件中-IPython-laptop 。


图片


导航



计划起飞进入轨道^


图片


我们将概述一个简短的行动计划,以便我们更轻松地实施上述计划:


  • Alpine Linux. , .
  • hostfs . . . , . , .
  • Bash, sudo, ,
  • Python,
  • JupyterLab, , .

, LXD, — LXD — Linux.


^


alpine3, — jupyterlab :


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

hddroot root- Storage Pool 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      |
+------------+---------+------------------+--------------+

^


:


PackageDescription
bashThe GNU Bourne Again shell
bash-completionProgrammable completion for the bash shell
sudoGive certain users the ability to run some commands as root
shadowPassword and account management tool suite with support for shadow files and PAM
tzdataSources for time zone and daylight saving time data
nanoPico 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 — LXD
  • exec — LXD,
  • jupyterlab
  • -- — , lxc
  • apk — Alpine Linux
  • add

, - 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 , .bash_profile, .bashrc, .dir_colors /etc/skel , Bash , . , Manjaro Linux , , .


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 JupyterLab


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 ^


JupyterLab — Python , . , JupyterLab 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

JupyterLab pip:


lxc exec jupyterlab -- python3 -m pip install jupyterlab

JupyterLab jupyterlab, , .


NodeJS — NPM, JupyterLab :


lxc exec jupyterlab -- apk add nodejs npm

JupyterLab , jupyter. , , . , JUPYTERLAB_DIR jupyter, .bashrc, :


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

JupyterLab:


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

JupyterLab, :


  • toc — Table of Contents, /
  • jupyterlab-horizon-theme — UI
  • jupyterlab_neon_theme — UI
  • jupyterlab-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"

:


lxc exec jupyterlab -- su -l jupyter -c "jupyter lab clean && jlpm cache clean && npm cache clean --force"

JupyterLab. , , JupyterLab bash' , , :)


jupyter:


lxc exec jupyterlab -- su -l jupyter

JupyterLab :


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

web- http://10.0.5.5:8888 token . , Login. , , , JupyterLab development :


图片


, JupyterLab , NodeJS , . /home , , , . JupyterLab.


IPython- ( JupyterLab) — /home/jupyter, () , , JupyterLab 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

Hello, World! ^


JupyterLab, --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 JupyterLab, , :)


P.S. , Jupyter Jupyter Notebook JupyterLab. /tree, /lab, :



Python ^


Python NumPy, Pandas, Matplotlib, IPyWidgets JupyterLab.


Python pip Alpine Linux:


  • g++ — , C++ Python
  • freetype-dev — Python Matplotlib

:


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

, Alpine Linux NumPy , :


ERROR: Could not build wheels for 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 matplotlib ipywidgets

:


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

JupyterLab ^


JupyterLab, , . CTRL+C y , JupyterLab "", 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


? ^


, . JupyterLab " ", :) , , Bash :)


, :



图片


! . !




UPDATE: 15.04.2020 18:30 — "Hello, World!"
UPDATE: 16.04.2020 10:00 — JupyterLab
UPDATE: 16.04.2020 10:40 — " "


All Articles