پرتاب ژوپیتر به مدار LXD

آیا تا به حال مجبور شده اید که کد یا ابزارهای سیستمی را در لینوکس آزمایش کنید تا نگران سیستم پایه نباشید و در صورت بروز خطا در کدی که باید با حقوق ریشه اجرا شود، همه چیز را خراب نکنید؟

اما در مورد این واقعیت که فرض کنید باید کلستری از میکروسرویس‌های مختلف را روی یک ماشین آزمایش یا اجرا کنید، چطور؟ صد یا حتی هزار؟

با ماشین های مجازی که توسط یک هایپروایزر مدیریت می شوند، چنین مشکلاتی می توانند حل شوند و حل خواهند شد، اما به چه قیمتی؟ به عنوان مثال، یک کانتینر در LXD مبتنی بر توزیع Alpine Linux فقط مصرف می کند 7.60MB RAM و جایی که پارتیشن ریشه بعد از راه اندازی اشغال می کند 9.5MB! ایلان ماسک چگونه آن را دوست داری؟ توصیه می کنم بررسی کنید قابلیت های اساسی LXD - یک سیستم کانتینری در لینوکس

بعد از اینکه به طور کلی مشخص شد که کانتینرهای LXD چیست، بیایید جلوتر برویم و فکر کنیم، چه می‌شد اگر چنین پلتفرم برداشت‌کننده‌ای وجود داشت که می‌توانستید با خیال راحت کد را برای میزبان اجرا کنید، نمودارها را تولید کنید، ویجت‌های UI را به صورت پویا (به صورت تعاملی) با کد خود پیوند دهید. تکمیل کد با متن با بلک جک ... قالب بندی؟ نوعی وبلاگ تعاملی؟ وای... دلم میخواد! می خواهی! 🙂

به زیر گربه نگاه کنید که در یک ظرف پرتاب خواهیم کرد آزمایشگاه ژوپیتر - نسل بعدی رابط کاربری به جای نوت بوک قدیمی Jupyter و همچنین ماژول های پایتون مانند NumPy, پانداها, matplotlib, IPyWidgets که به شما امکان می دهد تمام کارهای ذکر شده در بالا را انجام دهید و همه آنها را در یک فایل خاص - یک لپ تاپ IPython - ذخیره کنید.

پرتاب ژوپیتر به مدار LXD

طرح برخاستن مداری ^

پرتاب ژوپیتر به مدار LXD

بیایید یک برنامه اقدام مختصر را ترسیم کنیم تا اجرای طرح بالا را برای ما آسان‌تر کند:

  • بیایید یک کانتینر بر اساس کیت توزیع نصب و راه اندازی کنیم آلپ لینوکس. ما از این توزیع استفاده خواهیم کرد زیرا هدف آن مینیمالیسم است و فقط ضروری ترین نرم افزار را در آن نصب می کنیم، هیچ چیز اضافی نیست.
  • بیایید یک دیسک مجازی اضافی در ظرف اضافه کنیم و نامی برای آن بگذاریم - hostfs و آن را به سیستم فایل ریشه نصب کنید. این دیسک امکان استفاده از فایل‌های روی هاست را از یک دایرکتوری مشخص در داخل کانتینر فراهم می‌کند. بنابراین، داده های ما مستقل از ظرف خواهد بود. اگر کانتینر حذف شود، داده ها در هاست باقی می مانند. همچنین، این طرح برای به اشتراک گذاری داده های مشابه بین بسیاری از کانتینرها بدون استفاده از مکانیسم های شبکه استاندارد توزیع کانتینر مفید است.
  • بیایید Bash، sudo، کتابخانه های لازم را نصب کنیم، یک کاربر سیستم را اضافه و پیکربندی کنیم
  • بیایید پایتون، ماژول ها را نصب کنیم و وابستگی های باینری را برای آنها کامپایل کنیم
  • بیایید نصب و راه اندازی کنیم آزمایشگاه ژوپیتر، ظاهر را سفارشی کنید، پسوندها را برای آن نصب کنید.

در این مقاله ما با راه اندازی کانتینر شروع می کنیم، نصب و پیکربندی LXD را در نظر نخواهیم گرفت، می توانید همه اینها را در مقاله دیگری بیابید - ویژگی های اساسی سیستم های کانتینر LXD - Linux.

نصب و پیکربندی سیستم پایه ^

ما با دستوری که در آن تصویر را مشخص می کنیم یک ظرف ایجاد می کنیم - alpine3، شناسه کانتینر - jupyterlab و در صورت لزوم، پروفایل های پیکربندی:

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

در اینجا من از یک نمایه پیکربندی استفاده می کنم hddroot که مشخص می کند یک ظرف با پارتیشن ریشه در آن ایجاد شود استخر ذخیره سازی واقع بر روی یک دیسک 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 که نشان می دهد کدام cنمایش ستون ها:

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      |
+------------+---------+------------------+--------------+

نصب نرم افزارهای اولیه و راه اندازی سیستم ^

برای مدیریت کانتینر ما، باید نرم افزار زیر را نصب کنید:

بسته
توضیحات:

بر هم زدن
پوسته GNU Bourne Again

bash-completing
تکمیل قابل برنامه ریزی برای پوسته bash

کد: sudo
به کاربران خاصی این امکان را بدهید که برخی از دستورات را به صورت روت اجرا کنند

سایه
مجموعه ابزار مدیریت رمز عبور و حساب با پشتیبانی از فایل های سایه و PAM

tzdata
منابع منطقه زمانی و داده های زمان تابستانی

نانو
شبیه سازی ویرایشگر Pico با پیشرفت ها

علاوه بر این، می توانید با نصب بسته های زیر، پشتیبانی را در صفحات man-page نصب کنید 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 - مدیر بسته توزیع لینوکس آلپاین
  • 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 را در یک ظرف به صورت تعاملی زیبا کنید. سیستم میزبان من Manjaro Linux است و فایل ها در حال کپی هستند /etc/skel/.bash_profile, /etc/skel/.bashrc, /etc/skel/.dir_colors در اصل آنها برای لینوکس آلپاین مناسب هستند و مشکلات مهمی ایجاد نمی کنند، اما ممکن است توزیع متفاوتی داشته باشید و باید به طور مستقل متوجه شوید که آیا هنگام اجرای Bash در کانتینر خطایی وجود دارد یا خیر.

فایل های اسکلت را در ظرف کپی کنید. کلید --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

برای یک کاربر ریشه موجود، فایل‌های 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

آلپاین لینوکس یک پوسته سیستم را برای کاربران نصب می کند /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 ^

آزمایشگاه ژوپیتر یک برنامه پایتون است، بنابراین ابتدا باید این مفسر را نصب کنیم. همچنین، آزمایشگاه ژوپیتر ما با استفاده از مدیریت بسته پایتون نصب خواهیم کرد pip، و نه سیستمی، زیرا ممکن است در مخزن سیستم قدیمی شده باشد و بنابراین، ما باید به صورت دستی وابستگی های آن را با نصب بسته های زیر حل کنیم - python3 python3-dev gcc libc-dev zeromq-dev:

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

بیایید ماژول های پایتون و مدیریت بسته را به روز کنیم 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. مشکل این است که هیچ پارامتری در دستور راه اندازی وجود ندارد که بتوان آن را به دایرکتوری منتقل کرد؛ برنامه فقط یک متغیر محیطی را می پذیرد و بنابراین باید آن را تعریف کنیم. برای این کار دستور variable export را می نویسیم 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 - فهرست مطالب، فهرستی از سرفصل ها را در یک مقاله/یادداشت ایجاد می کند
  • 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"

حالا دو دستور زیر را اجرا کنید تا برای اولین بار اجرا شود آزمایشگاه ژوپیتر. می‌توان آن را با یک دستور راه‌اندازی کرد، اما در این حالت، فرمان راه‌اندازی که به خاطر سپردن آن در ذهن شما دشوار است، با bash در کانتینر به یاد می‌آید و نه روی میزبان، جایی که دستورات کافی وجود دارد. برای ثبت آنها در تاریخ :)

به عنوان کاربر وارد کانتینر شوید jupyter:

lxc exec jupyterlab -- su -l jupyter

بعد، اجرا کنید آزمایشگاه ژوپیتر با کلیدها و پارامترهای نشان داده شده:

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

به آدرس موجود در مرورگر وب خود بروید http://10.0.5.5:8888 و در صفحه ای که باز می شود را وارد کنید رمز دسترسی که در کنسول خواهید دید. آن را کپی کرده و در صفحه قرار دهید، سپس کلیک کنید ورود. پس از ورود به منوی افزونه‌ها در سمت چپ، مانند شکل زیر، به منوی افزونه‌ها در سمت چپ بروید، جایی که هنگام فعال‌سازی مدیر برنامه‌های افزودنی از شما خواسته می‌شود تا با نصب برنامه‌های افزودنی از اشخاص ثالث که دستور مربوط به توسعه JupyterLab مسئول نیست:

پرتاب ژوپیتر به مدار LXD

با این حال، ما کل را منزوی می کنیم آزمایشگاه ژوپیتر و آن را در یک ظرف قرار دهید تا افزونه های شخص ثالثی که به NodeJS نیاز دارند و از آنها استفاده می کنند، نتوانند حداقل داده های موجود در دیسک را به غیر از آنهایی که در داخل کانتینر باز می کنیم، بدزدند. به اسناد خصوصی خود در هاست دسترسی پیدا کنید /home بعید است که فرآیندهای کانتینر با موفقیت انجام شوند، و اگر موفق شوند، پس باید روی فایل‌های موجود در سیستم میزبان امتیاز داشته باشید، زیرا ما کانتینر را در حالت بدون امتیاز. بر اساس این اطلاعات، می توانید خطر گنجاندن برنامه های افزودنی را ارزیابی کنید آزمایشگاه ژوپیتر.

نوت بوک های IPython (صفحات در آزمایشگاه ژوپیتر) اکنون در فهرست اصلی کاربر ایجاد می شود - /home/jupyter، اما برنامه های ما این است که داده ها (اشتراک گذاری) را بین میزبان و کانتینر تقسیم کنیم، بنابراین به کنسول برگردید و متوقف شوید آزمایشگاه ژوپیتر با اجرای کلید میانبر - 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 و اولین لپ تاپ خود را با کلیک بر روی دکمه موجود در صفحه همانطور که در تصویر زیر نشان داده شده است ایجاد کنید:

پرتاب ژوپیتر به مدار LXD

سپس در فیلد صفحه، کد پایتون را وارد کنید که کلاسیک را نمایش می دهد Hello World!. پس از اتمام ورود، فشار دهید CTRL+ENTER یا دکمه "play" را در نوار ابزار در بالا انجام دهید تا JupyterLab این کار را انجام دهد:

پرتاب ژوپیتر به مدار LXD

در این مرحله، تقریباً همه چیز برای استفاده آماده است، اما اگر ماژول های اضافی پایتون (برنامه های کاربردی کامل) را نصب نکنیم که می توانند قابلیت های استاندارد پایتون را به میزان قابل توجهی گسترش دهند، جالب نخواهد بود. آزمایشگاه ژوپیترپس بریم جلو :)

PS نکته جالب این است که اجرای قدیمی است ژوپیتر تحت نام رمز نوت بوک ژوپیتر از بین نرفته است و به موازات آن وجود دارد آزمایشگاه ژوپیتر. برای تغییر به نسخه قدیمی، پیوندی را دنبال کنید که پسوند را در آدرس اضافه می کند/tree، و انتقال به نسخه جدید با پسوند انجام می شود /lab، اما لازم نیست مشخص شود:

گسترش قابلیت های پایتون ^

در این بخش ماژول های قدرتمند زبان پایتون را نصب خواهیم کرد NumPy, پانداها, matplotlib, IPyWidgets که نتایج آن در لپ تاپ ها ادغام شده است آزمایشگاه ژوپیتر.

قبل از نصب ماژول های لیست شده پایتون از طریق مدیر بسته pip ابتدا باید وابستگی های سیستم را در Alpine Linux حل کنیم:

  • g++ - برای کامپایل ماژول ها مورد نیاز است، زیرا برخی از آنها در زبان پیاده سازی می شوند ++C و در زمان اجرا به صورت ماژول های باینری به پایتون متصل شوید
  • freetype-dev - وابستگی برای ماژول پایتون matplotlib

نصب وابستگی ها:

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

یک مشکل وجود دارد: در وضعیت فعلی توزیع لینوکس آلپاین، امکان کامپایل نسخه جدید NumPy وجود نخواهد داشت؛ یک خطای کامپایل ظاهر می شود که من نتوانستم آن را برطرف کنم:

ERROR: امکان ساخت چرخ هایی برای Numpy وجود ندارد که از PEP 517 استفاده می کنند و نمی توانند مستقیماً نصب شوند.

بنابراین، ما این ماژول را به عنوان یک بسته سیستمی نصب خواهیم کرد که یک نسخه از قبل کامپایل شده را توزیع می کند، اما کمی قدیمی تر از آنچه در حال حاضر در سایت موجود است:

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

در مرحله بعد، ماژول های پایتون را از طریق مدیر بسته نصب کنید 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 نتیجه کد را در قالب یک تصویر به عنوان نمودار تابع نمایش می دهد:

پرتاب ژوپیتر به مدار LXD

مثال های زیادی IPyWidgets می توانید آن را در آموزش ها پیدا کنید اینجا

چه چیز دیگری؟ ^

آفرین اگر ماندید و به انتهای مقاله رسیدید. من عمداً یک اسکریپت آماده را در انتهای مقاله ارسال نکردم که نصب شود آزمایشگاه ژوپیتر در "یک کلیک" برای تشویق کارگران :) اما می توانید خودتان این کار را انجام دهید، زیرا قبلاً می دانید که چگونه دستورات را در یک اسکریپت Bash جمع آوری کرده اید :)

شما همچنین می توانید:

  • با نوشتن یک آدرس ساده، یک نام شبکه برای کانتینر به جای آدرس IP تنظیم کنید /etc/hosts و آدرس را در مرورگر تایپ کنید http://jupyter.local:8888
  • با محدودیت منابع برای ظرف بازی کنید، برای این، فصل را بخوانید قابلیت های اولیه LXD یا اطلاعات بیشتر را در سایت توسعه دهنده LXD دریافت کنید.
  • تغییر تم:

پرتاب ژوپیتر به مدار LXD

و خیلی بیشتر که می توانید انجام دهید! همین. آرزو می کنم موفق شوی!

به روز رسانی: 15.04.2020/18/30 XNUMX:XNUMX - تصحیح اشتباهات در فصل "سلام، جهان!"
به روز رسانی: 16.04.2020/10/00 ساعت XNUMX:XNUMX - متن اصلاح شده و اضافه شده در توضیحات فعال سازی مدیر برنامه افزودنی آزمایشگاه ژوپیتر
به روز رسانی: 16.04.2020/10/40 XNUMX:XNUMX — خطاهای موجود در متن تصحیح شد و فصل "نصب نرم افزار پایه و راه اندازی سیستم" کمی تغییر کرد.

منبع: www.habr.com

اضافه کردن نظر