เบเบฒเบ™เป€เบ›เบตเบ”เบ•เบปเบง Jupyter เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบงเบปเบ‡เป‚เบ„เบˆเบญเบ™ LXD

เบ—เปˆเบฒเบ™เป€เบ„เบตเบเบกเบตเบเบฒเบ™เบ—เบปเบ”เบฅเบญเบ‡เบฅเบฐเบซเบฑเบ”เบซเบผเบทเบฅเบฐเบšเบปเบš utilities เปƒเบ™ Linux เป€เบžเบทเปˆเบญเบšเปเปˆเบ•เป‰เบญเบ‡เบเบฑเบ‡เบงเบปเบ™เบเปˆเบฝเบงเบเบฑเบšเบฅเบฐเบšเบปเบšเบžเบทเป‰เบ™เบ–เบฒเบ™เปเบฅเบฐเบšเปเปˆเบ—เปเบฒเบฅเบฒเบเบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ‚เบญเบ‡เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ”เบ—เบตเปˆเบ„เบงเบ™เบˆเบฐเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบเบฑเบšเบชเบดเบ”เบ—เบดเบ‚เบญเบ‡เบฎเบฒเบ?

เปเบ•เปˆเบชเบดเปˆเบ‡เบ—เบตเปˆเป€เบงเบปเป‰เบฒเบงเปˆเบฒเบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบ—เบปเบ”เบชเบญเบšเบซเบผเบทเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบเบธเปˆเบกเบ—เบฑเบ‡เบซเบกเบปเบ”เบ‚เบญเบ‡ microservices เบ•เปˆเบฒเบ‡เป†เบขเบนเปˆเปƒเบ™เป€เบ„เบทเปˆเบญเบ‡เบ”เบฝเบง? เป€เบ›เบฑเบ™เบฎเป‰เบญเบเบซเบผเบทเปเบกเป‰เบเบฐเบ—เบฑเป‰เบ‡เบžเบฑเบ™?

เบ”เป‰เบงเบเป€เบ„เบทเปˆเบญเบ‡ virtual เบ—เบตเปˆเบ–เบทเบเบ„เบธเป‰เบกเบ„เบญเบ‡เป‚เบ”เบ hypervisor, เบšเบฑเบ™เบซเบฒเบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเบชเบฒเบกเบฒเบ”เปเบฅเบฐเบˆเบฐเบ–เบทเบเปเบเป‰เป„เบ‚เป„เบ”เป‰, เปเบ•เปˆเบงเปˆเบฒเบ„เปˆเบฒเปƒเบŠเป‰เบˆเปˆเบฒเบเปเบกเปˆเบ™เบซเบเบฑเบ‡? เบ•เบปเบงเบขเปˆเบฒเบ‡, เบเปˆเบญเบ‡เบšเบฑเบ™เบˆเบธเปƒเบ™ LXD เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบเบฒเบ™เปเบˆเบเบขเบฒเบ Alpine Linux เบšเปเบฅเบดเป‚เบžเบเป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™ 7.60MB RAM, เปเบฅเบฐเบšเปˆเบญเบ™เบ—เบตเปˆเบเบฒเบ™เปเบšเปˆเบ‡เบ›เบฑเบ™เบฎเบฒเบเบ„เบญเบšเบ„เบญเบ‡เบซเบผเบฑเบ‡เบˆเบฒเบเบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™ 9.5MB! เบ—เปˆเบฒเบ™เบกเบฑเบเบชเบดเปˆเบ‡เบ™เบฑเป‰เบ™เปเบ™เบงเปƒเบ”, Elon Musk? เบ‚เป‰เบญเบเบ‚เปเปเบ™เบฐเบ™เปเบฒเปƒเบซเป‰เบเบงเบ”เป€เบšเบดเปˆเบ‡ เบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เบžเบทเป‰เบ™เบ–เบฒเบ™เบ‚เบญเบ‡ LXD - เบฅเบฐเบšเบปเบšเบšเบฑเบ™เบˆเบธเปƒเบ™ Linux

เบซเบผเบฑเบ‡เบˆเบฒเบเบ—เบตเปˆเบกเบฑเบ™เป€เบซเบฑเบ™เป„เบ”เป‰เบŠเบฑเบ”เป€เบˆเบ™เป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›เปเบฅเป‰เบงเบงเปˆเบฒเบ•เบนเป‰เบ„เบญเบ™เป€เบ—เบ™เป€เบ™เบต LXD เปเบกเปˆเบ™เบซเบเบฑเบ‡, เปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเป„เบ›เบ•เบทเปˆเบกเบญเบตเบเปเบฅเบฐเบ„เบดเบ”เบงเปˆเบฒ, เบˆเบฐเป€เบ›เบฑเบ™เปเบ™เบงเปƒเบ”เบ–เป‰เบฒเบกเบตเป€เบงเบ—เบตเบเบฒเบ™เป€เบเบฑเบšเบเปˆเบฝเบงเบ—เบตเปˆเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เปเบฅเปˆเบ™เบฅเบฐเบซเบฑเบ”เบชเปเบฒเบฅเบฑเบšเป€เบˆเบปเป‰เบฒเบžเบฒเบš, เบชเป‰เบฒเบ‡เบเบฒเบŸ, เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ UI- widgets เบเบฑเบšเบฅเบฐเบซเบฑเบ”เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เบขเปˆเบฒเบ‡เบ›เบญเบ”เป„เบž, เป€เบชเบตเบกเบฅเบฐเบซเบฑเบ”เบ”เป‰เบงเบเบ‚เปเป‰เบ„เบงเบฒเบกเบ”เป‰เบงเบ blackjack... เบเบฒเบ™เบˆเบฑเบ”เบฎเบนเบšเปเบšเบš? เบšเบฒเบ‡เบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡ blog เป‚เบ•เป‰เบ•เบญเบš? เบงเป‰เบฒเบง... เบ‚เป‰เบญเบเบขเบฒเบเป„เบ”เป‰! เบ•เป‰เบญเบ‡เบเบฒเบ™! ๐Ÿ™‚

เป€เบšเบดเปˆเบ‡เบžเบฒเบเปƒเบ•เป‰เปเบกเบงเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป€เบ›เบตเบ”เบ•เบปเบงเปƒเบ™เบ–เบฑเบ‡ jupyter lab - เบฎเบธเปˆเบ™เบ•เปเปˆเป„เบ›เบ‚เบญเบ‡เบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบšเบœเบนเป‰เปƒเบŠเป‰เปเบ—เบ™ Jupyter Notebook เบ—เบตเปˆเบฅเป‰เบฒเบชเบฐเป„เบซเบก, เปเบฅเบฐเบžเบงเบเป€เบฎเบปเบฒเบเบฑเบ‡เบˆเบฐเบ•เบดเบ”เบ•เบฑเป‰เบ‡เป‚เบกเบ”เบนเบ™ Python เป€เบŠเบฑเปˆเบ™: เบ•เบปเบงเป€เบฅเบ, Pandas, matplotlib, IPyWidgets เป€เบŠเบดเปˆเบ‡เบˆเบฐเบŠเปˆเบงเบเปƒเบซเป‰เบ—เปˆเบฒเบ™เป€เบฎเบฑเบ”เบ—เบธเบเบขเปˆเบฒเบ‡เบ—เบตเปˆเบฅเบฐเบšเบธเป„เบงเป‰เบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡เปเบฅเบฐเบšเบฑเบ™เบ—เบถเบเบกเบฑเบ™เป„เบงเป‰เปƒเบ™เป„เบŸเบฅเปŒเบžเบดเป€เบชเบ” - เบ„เบญเบกเบžเบดเบงเป€เบ•เบต IPython.

เบเบฒเบ™เป€เบ›เบตเบ”เบ•เบปเบง Jupyter เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบงเบปเบ‡เป‚เบ„เบˆเบญเบ™ LXD

เปเบœเบ™เบเบฒเบ™เบ‚เบถเป‰เบ™เบชเบนเปˆเบงเบปเบ‡เป‚เบ„เบˆเบญเบ™ ^

เบเบฒเบ™เป€เบ›เบตเบ”เบ•เบปเบง Jupyter เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบงเบปเบ‡เป‚เบ„เบˆเบญเบ™ LXD

เบ‚เปเบชเบฐเป€เปœเบตเปเบœเบ™เบเบฒเบ™เบ”เบณเป€เบ™เบตเบ™เบ‡เบฒเบ™เป‚เบ”เบเบซเบเปเป‰เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเบ›เบฐเบ•เบดเบšเบฑเบ”เป‚เบ„เบ‡เบเบฒเบ™เบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡เบ™เบตเป‰เบ‡เปˆเบฒเบเบ‚เบถเป‰เบ™:

  • เปƒเบซเป‰เบ•เบดเบ”เบ•เบฑเป‰เบ‡เปเบฅเบฐเป€เบ›เบตเบ”เบ•เบปเบงเบ–เบฑเบ‡เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบŠเบธเบ”เบเบฒเบ™เปเบˆเบเบขเบฒเบ Alpine Linux. เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบ™เปเบฒเปƒเบŠเป‰เบเบฒเบ™เปเบˆเบเบขเบฒเบเบ™เบตเป‰เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบกเบฑเบ™เบกเบตเบˆเบธเบ”เบ›เบฐเบชเบปเบ‡เบซเบ™เป‰เบญเบเบ—เบตเปˆเบชเบธเบ”เปเบฅเบฐเบˆเบฐเบ•เบดเบ”เบ•เบฑเป‰เบ‡เบžเบฝเบ‡เปเบ•เปˆเบŠเบญเบšเปเบงเบ—เบตเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ—เบตเปˆเบชเบธเบ”เปƒเบ™เบกเบฑเบ™, เบšเปเปˆเบกเบตเบซเบเบฑเบ‡ superfluous.
  • เปƒเบซเป‰เป€เบžเบตเปˆเบกเปเบœเปˆเบ™ virtual เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเปƒเบ™ container เปเบฅเบฐเบ•เบฑเป‰เบ‡เบŠเบทเปˆเปƒเบซเป‰เบกเบฑเบ™ - hostfs เปเบฅเบฐเบ•เบดเบ”เบ•เบฑเป‰เบ‡เบกเบฑเบ™เบเบฑเบšเบฅเบฐเบšเบปเบšเป„เบŸเบฅเปŒเบฎเบฒเบ. เปเบœเปˆเบ™เบ™เบตเป‰เบˆเบฐเป€เบฎเบฑเบ”เปƒเบซเป‰เบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ—เบตเปˆเบˆเบฐเปƒเบŠเป‰เป„เบŸเบฅเปŒเปƒเบ™เป‚เบฎเบ”เบˆเบฒเบเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบ—เบตเปˆเปƒเบซเป‰เบขเบนเปˆเปƒเบ™เบšเบฑเบ™เบˆเบธ. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบ‚เปเป‰เบกเบนเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป€เบ›เบฑเบ™เป€เบญเบเบฐเบฅเบฒเบ”เบ‚เบญเบ‡เบšเบฑเบ™เบˆเบธ. เบ–เป‰เบฒเบเปˆเบญเบ‡เบšเบฑเบ™เบˆเบธเบ–เบทเบเบฅเบถเบš, เบ‚เปเป‰เบกเบนเบ™เบˆเบฐเบเบฑเบ‡เบ„เบปเบ‡เบขเบนเปˆเปƒเบ™เป‚เบฎเบ”. เบ™เบญเบเบˆเบฒเบเบ™เบตเป‰, เป‚เบ„เบ‡เบเบฒเบ™เบ™เบตเป‰เปเบกเปˆเบ™เป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เปเบšเปˆเบ‡เบ›เบฑเบ™เบ‚เปเป‰เบกเบนเบ™เบ”เบฝเบงเบเบฑเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบซเบผเบฒเบ container เป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบเบปเบ™เป„เบเป€เบ„เบทเบญเบ‚เปˆเบฒเบเบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เบ‚เบญเบ‡เบเบฒเบ™เปเบˆเบเบขเบฒเบ container.
  • เปƒเบซเป‰เบ•เบดเบ”เบ•เบฑเป‰เบ‡ Bash, sudo, เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบ—เบตเปˆเบˆเปเบฒเป€เบ›เบฑเบ™, เป€เบžเบตเปˆเบกเปเบฅเบฐเบเปเบฒเบซเบ™เบปเบ”เบ„เปˆเบฒเบœเบนเป‰เปƒเบŠเป‰เบฅเบฐเบšเบปเบš
  • เปƒเบซเป‰เบ•เบดเบ”เบ•เบฑเป‰เบ‡ Python, เป‚เบกเบ”เบนเบ™เปเบฅเบฐเบฅเบงเบšเบฅเบงเบกเบเบฒเบ™เบ‚เบทเป‰เบ™เบเบฑเบšเบ–เบฒเบ™เบชเบญเบ‡เบชเปเบฒเบฅเบฑเบšเบžเบงเบเป€เบ‚เบปเบฒ
  • เปƒเบซเป‰เบ•เบดเบ”เบ•เบฑเป‰เบ‡เปเบฅเบฐเป€เบ›เบตเบ”เบ•เบปเบง jupyter lab, เบ›เบฑเบšเปเบ•เปˆเบ‡เบฎเบนเบšเบฅเบฑเบเบชเบฐเบ™เบฐ, เบ•เบดเบ”เบ•เบฑเป‰เบ‡เบชเปˆเบงเบ™เบ‚เบฐเบซเบเบฒเบเบชเปเบฒเบฅเบฑเบšเบกเบฑเบ™.

เปƒเบ™เบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ”เป‰เบงเบเบเบฒเบ™เป€เบ›เบตเบ”เบ•เบปเบง container, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบšเปเปˆเบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡เปเบฅเบฐเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ LXD, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบŠเบญเบเบซเบฒเบ—เบฑเบ‡เบซเบกเบปเบ”เบ™เบตเป‰เปƒเบ™เบšเบปเบ”เบ„เบงเบฒเบกเบญเบทเปˆเบ™ - เบฅเบฑเบเบชเบฐเบ™เบฐเบžเบทเป‰เบ™เบ–เบฒเบ™เบ‚เบญเบ‡ LXD - เบฅเบฐเบšเบปเบšเบšเบฑเบ™เบˆเบธ Linux.

เบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡เปเบฅเบฐเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบฅเบฐเบšเบปเบšเบžเบทเป‰เบ™เบ–เบฒเบ™ ^

เบžเบงเบเป€เบฎเบปเบฒเบชเป‰เบฒเบ‡ container เบ—เบตเปˆเบกเบตเบ„เปเบฒเบชเบฑเปˆเบ‡เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบเปเบฒเบ™เบปเบ”เบฎเบนเบšเบžเบฒเบš - alpine3, เบ•เบปเบงเบฅเบฐเบšเบธเบชเปเบฒเบฅเบฑเบšเบšเบฑเบ™เบˆเบธ - jupyterlab เปเบฅเบฐ, เบ–เป‰เบฒเบˆเปเบฒเป€เบ›เบฑเบ™, เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเป‚เบ›เบฃเป„เบŸเบฅเปŒ:

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

เบ—เบตเปˆเบ™เบตเป‰เบ‚เป‰เบญเบเบเปเบฒเบฅเบฑเบ‡เปƒเบŠเป‰เป‚เบ›เบฃเป„เบŸเบฅเปŒเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ hddroot เป€เบŠเบดเปˆเบ‡เบเปเบฒเบ™เบปเบ”เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡ container เบ—เบตเปˆเบกเบตเบเบฒเบ™เปเบšเปˆเบ‡เบ›เบฑเบ™เบฎเบฒเบเปƒเบ™ เบชเบฐเบฅเบญเบเบ™เปเป‰เบฒ เบ•เบฑเป‰เบ‡เบขเบนเปˆเปƒเบ™เปเบœเปˆเบ™ 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 disk, เบ›เบฐเบซเบเบฑเบ”เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ‚เบญเบ‡เปเบœเปˆเบ™ SSD, เป€เบŠเบดเปˆเบ‡เบเบฑเบ‡เบกเบตเบขเบนเปˆเปƒเบ™เบฅเบฐเบšเบปเบšเบ‚เบญเบ‡เบ‚เป‰เบญเบ๐Ÿ™‚เบ—เบตเปˆเบ‚เป‰เบญเบเป„เบ”เป‰เบชเป‰เบฒเบ‡เป‚เบ›เบฃเป„เบŸเบฅเปŒเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบ. ssdroot.

เบซเบผเบฑเบ‡เบˆเบฒเบเบ•เบนเป‰เบ„เบญเบ™เป€เบ—เบ™เป€เบ™เบตเบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™, เบกเบฑเบ™เบขเบนเปˆเปƒเบ™เบฅเบฑเบ” STOPPED, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบกเบฑเบ™เป‚เบ”เบเบเบฒเบ™เปเบฅเปˆเบ™เบฅเบฐเบšเบปเบš init เปƒเบ™เบกเบฑเบ™:

lxc start jupyterlab

เปƒเบซเป‰เบชเบฐเปเบ”เบ‡เบฅเบฒเบเบเบฒเบ™เบšเบฑเบ™เบˆเบธเปƒเบ™ LXD เป‚เบ”เบเปƒเบŠเป‰เบ›เบธเปˆเบก -c เป€เบŠเบดเปˆเบ‡เบŠเบตเป‰เบšเบญเบเบงเปˆเบฒเบญเบฑเบ™เปƒเบ” cเบˆเปเบชเบฐเปเบ”เบ‡เบœเบปเบ™ olumns:

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

เบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡เบŠเบญเบšเปเบงเบžเบทเป‰เบ™เบ–เบฒเบ™เปเบฅเบฐเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบฅเบฐเบšเบปเบš ^

เป€เบžเบทเปˆเบญเบšเปเบฅเบดเบซเบฒเบ™เบšเบฑเบ™เบˆเบธเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบ•เบดเบ”เบ•เบฑเป‰เบ‡เบŠเบญเบšเปเบงเบ•เปเปˆเป„เบ›เบ™เบตเป‰:

Package
เบฅเบฒเบเบฅเบฐเบญเบฝเบ”

bash
GNU Bourne เบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡ shell

bash-เบชเปเบฒเป€เบฅเบฑเบ”
เบเบฒเบ™เบชเปเบฒเป€เบฅเบฑเบ”เป‚เบ„เบ‡เบเบฒเบ™เบชเปเบฒเบฅเบฑเบš bash shell

sudo
เปƒเบซเป‰เบœเบนเป‰เปƒเบŠเป‰เบšเบฒเบ‡เบ„เบปเบ™เบชเบฒเบกเบฒเบ”เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เป€เบ›เบฑเบ™เบฎเบฒเบ

เป€เบ‡เบปเบฒ
เบŠเบธเบ”เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบเบฒเบ™เบˆเบฑเบ”เบเบฒเบ™เบฅเบฐเบซเบฑเบ”เบœเปˆเบฒเบ™ เปเบฅเบฐเบšเบฑเบ™เบŠเบตเบ—เบตเปˆเบฎเบญเบ‡เบฎเบฑเบšเป„เบŸเบฅเปŒเป€เบ‡เบปเบฒ เปเบฅเบฐ PAM

tzdata
เปเบซเบผเปˆเบ‡เบ—เบตเปˆเบกเบฒเบ‚เบญเบ‡เป€เบ‚เบ”เป€เบงเบฅเบฒ เปเบฅเบฐเบ‚เปเป‰เบกเบนเบ™เป€เบงเบฅเบฒเบ›เบฐเบขเบฑเบ”เปเบชเบ‡เบเบฒเบ‡เป€เบงเบฑเบ™

nano
เป‚เบ„เบฅเบ™เบšเบฑเบ™เบ™เบฒเบ—เบดเบเบฒเบ™ Pico เบ”เป‰เบงเบเบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบš

เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ•เบดเบ”เบ•เบฑเป‰เบ‡เบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เปƒเบ™เบฅเบฐเบšเบปเบš man-pages เป‚เบ”เบเบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡เบŠเบธเบ”เบ•เปเปˆเป„เบ›เบ™เบตเป‰ โˆ’ man man-pages mdocml-apropos less

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

เปƒเบซเป‰เป€เบšเบดเปˆเบ‡เบ„เปเบฒเบชเบฑเปˆเบ‡เปเบฅเบฐเบ›เบธเปˆเบกเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเปƒเบŠเป‰:

  • lxc โ€” เป‚เบ—โ€‹เบซเบฒโ€‹เบฅเบนเบโ€‹เบ„เป‰เบฒ LXDโ€‹
  • exec - เบงเบดเบ—เบตเบเบฒเบ™เบฅเบนเบเบ„เป‰เบฒ LXD เบ—เบตเปˆเปเบฅเปˆเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เปƒเบ™ container
  • jupyterlab - ID เบ•เบนเป‰เบ„เบญเบ™เป€เบ—เบ™เป€เบ™เบต
  • -- - เป€เบ›เบฑเบ™เบเบฐเปเบˆเบžเบดเป€เบชเบ”เบ—เบตเปˆเบฅเบฐเบšเบธเบšเปเปˆเปƒเบซเป‰เบ•เบตเบ„เบงเบฒเบกเปเบฒเบเป€เบžเบตเปˆเบกเป€เบ•เบตเบกเป€เบ›เบฑเบ™เบเบฐเปเบˆเบชเบณเบฅเบฑเบš 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 เบชเปเบฒเบฅเบฑเบšเบœเบนเป‰เปƒเบŠเป‰เปƒเบซเบกเปˆเปƒเบ™เบเปˆเบญเบ‡เบšเบฑเบ™เบˆเบธ, เปƒเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ•เปเปˆเป„เบ›เบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบ„เบฑเบ”เบฅเบญเบเป„เบŸเบฅเปŒ 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 เบ•เบดเบ”เบ•เบฑเป‰เบ‡ shell เบฅเบฐเบšเบปเบšเบชเปเบฒเบฅเบฑเบšเบœเบนเป‰เปƒเบŠเป‰ /bin/sh, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบ—เบปเบ”เปเบ—เบ™เบกเบฑเบ™เบ”เป‰เบงเบ root เบœเบนเป‰โ€‹เปƒเบŠเป‰โ€‹เปƒเบ™ Bashโ€‹:

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

เบ—เบตเปˆ root เบœเบนเป‰โ€‹เปƒเบŠเป‰โ€‹เบšเปเปˆโ€‹เป„เบ”เป‰โ€‹เบฅเบฐโ€‹เบซเบฑเบ”โ€‹เบœเปˆเบฒเบ™โ€‹, เบฅเบฒเบงโ€‹เบˆเปเบฒโ€‹เป€เบ›เบฑเบ™โ€‹เบ•เป‰เบญเบ‡โ€‹เบ•เบฑเป‰เบ‡โ€‹เบฅเบฐโ€‹เบซเบฑเบ”โ€‹เบœเปˆเบฒเบ™โ€‹. เบ„เปเบฒเบชเบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰เบˆเบฐเบชเป‰เบฒเบ‡เปเบฅเบฐเบ•เบฑเป‰เบ‡เบฅเบฐเบซเบฑเบ”เบœเปˆเบฒเบ™เปเบšเบšเบชเบธเปˆเบกเปƒเบซเบกเปˆเบชเปเบฒเบฅเบฑเบšเบฅเบฒเบง, เบ—เบตเปˆเบ—เปˆเบฒเบ™เบˆเบฐเป€เบซเบฑเบ™เปƒเบ™เบซเบ™เป‰เบฒเบˆเป console เบซเบผเบฑเบ‡เบˆเบฒเบเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ‚เบญเบ‡เบกเบฑเบ™:

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 เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบˆเบฐ configure เบ•เปเปˆเบกเบฒ jupyter lab:

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. เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ™เบตเป‰, เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™ script เบ”เบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰, เบšเปˆเบญเบ™เบ—เบตเปˆ sed uncomments เปเบ–เบงเบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเปƒเบ™เป„เบŸเบฅเปŒเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ /etc/sudoers:

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

เบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡ เปเบฅเบฐเบ•เบฑเป‰เบ‡เบ„เปˆเบฒ JupyterLab ^

jupyter lab เป€เบ›เบฑเบ™เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™ Python, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบ•เบดเบ”เบ•เบฑเป‰เบ‡เบ•เบปเบงเปเบ›เบžเบฒเบชเบฒเบ™เบตเป‰เบเปˆเบญเบ™. เบ™เบญเบเบˆเบฒเบเบ™เบตเป‰, jupyter lab เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบ•เบดเบ”เบ•เบฑเป‰เบ‡เป‚เบ”เบเปƒเบŠเป‰ Python package manager pip, เปเบฅเบฐโ€‹เบšเปเปˆโ€‹เปเบกเปˆเบ™โ€‹เบฅเบฐโ€‹เบšเบปเบšโ€‹เบซเบ™เบถเปˆเบ‡โ€‹, เป€เบ™เบทเปˆเบญเบ‡โ€‹เบˆเบฒเบโ€‹เบงเปˆเบฒโ€‹เบกเบฑเบ™โ€‹เบญเบฒเบ”โ€‹เบˆเบฐโ€‹เบฅเป‰เบฒโ€‹เบชเบฐโ€‹เป„เบซเบกโ€‹เปƒเบ™ repository เบฅเบฐโ€‹เบšเบปเบšโ€‹เปเบฅเบฐโ€‹เบ”เบฑเปˆเบ‡โ€‹เบ™เบฑเป‰เบ™โ€‹, เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เบกเบตโ€‹เบเบฒเบ™โ€‹เปเบเป‰โ€‹เป„เบ‚โ€‹เบเบฒเบ™โ€‹เป€เบžเบดเปˆเบ‡โ€‹เบžเบฒโ€‹เบชเบฒโ€‹เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบกเบฑเบ™โ€‹เบ”เป‰เบงเบโ€‹เบ•เบปเบ™โ€‹เป€เบญเบ‡โ€‹เป‚เบ”เบโ€‹เบเบฒเบ™โ€‹เบ•เบดเบ”โ€‹เบ•เบฑเป‰เบ‡โ€‹เบŠเบธเบ”โ€‹เบ”เบฑเปˆเบ‡โ€‹เบ•เปเปˆโ€‹เป„เบ›โ€‹เบ™เบตเป‰ โˆ’ 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

เบ•เบดเบ”เบ•เบฑเป‰เบ‡ jupyter lab เบœเปˆเบฒเบ™เบœเบนเป‰เบˆเบฑเบ”เบเบฒเบ™เบŠเบธเบ” pip:

lxc exec jupyterlab -- python3 -m pip install jupyterlab

เบ™เบฑเบšเบ•เบฑเป‰เบ‡เปเบ•เปˆเบเบฒเบ™เบ‚เบฐเบซเบเบฒเบเบขเบนเปˆเปƒเบ™ jupyter lab เปเบกเปˆเบ™เบเบฒเบ™เบ—เบปเบ”เบฅเบญเบ‡เปเบฅเบฐเบšเปเปˆเป„เบ”เป‰เบˆเบฑเบ”เบชเบปเปˆเบ‡เบขเปˆเบฒเบ‡เป€เบ›เบฑเบ™เบ—เบฒเบ‡เบเบฒเบ™เบเบฑเบšเบŠเบธเบ” jupyterlab, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบ•เบดเบ”เบ•เบฑเป‰เบ‡เปเบฅเบฐเบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบกเบฑเบ™เบ”เป‰เบงเบเบ•เบปเบ™เป€เบญเบ‡.

เปƒเบซเป‰เบ•เบดเบ”เบ•เบฑเป‰เบ‡ NodeJS เปเบฅเบฐเบœเบนเป‰เบˆเบฑเบ”เบเบฒเบ™เบŠเบธเบ”เบชเปเบฒเบฅเบฑเบšเบกเบฑเบ™ - NPM, เบ™เบฑเบšเบ•เบฑเป‰เบ‡เปเบ•เปˆ jupyter lab เปƒเบŠเป‰เบžเบงเบเบกเบฑเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ‚เบฐเบซเบเบฒเบเบ‚เบญเบ‡เบกเบฑเบ™:

lxc exec jupyterlab -- apk add nodejs npm

เบเบฒเบ™เบ‚เบฐเบซเบเบฒเบเบชเปเบฒเบฅเบฑเบš jupyter lab เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบ•เบดเบ”เบ•เบฑเป‰เบ‡เป„เบ”เป‰เป€เบฎเบฑเบ”เบงเบฝเบ, เบžเบงเบเป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป„เบ”เป‰เบ•เบดเบ”เบ•เบฑเป‰เบ‡เบขเบนเปˆเปƒเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบœเบนเป‰เปƒเบŠเป‰เบ™เบฑเบšเบ•เบฑเป‰เบ‡เปเบ•เปˆเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบˆเบฐเป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เป€เบ›เบตเบ”เบ•เบปเบงเบˆเบฒเบเบœเบนเป‰เปƒเบŠเป‰ jupyter. เบšเบฑเบ™เบซเบฒเปเบกเปˆเบ™เบงเปˆเบฒเบšเปเปˆเบกเบตเบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเปƒเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เป€เบ›เบตเบ”เบ•เบปเบงเบ—เบตเปˆเบชเบฒเบกเบฒเบ”เบชเบปเปˆเบ‡เป„เบ›เบซเบฒเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบต; เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบžเบฝเบ‡เปเบ•เปˆเบเบญเบกเบฎเบฑเบšเบ•เบปเบงเปเบ›เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเปเบฅเบฐเบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเปเบฒเบ™เบปเบ”เบกเบฑเบ™. เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ™เบตเป‰, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบ‚เบฝเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เบชเบปเปˆเบ‡เบญเบญเบเบ•เบปเบงเปเบ› JUPYTERLAB_DIR เปƒเบ™เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเบ‚เบญเบ‡เบœเบนเป‰เปƒเบŠเป‰ jupyter, เป€เบžเบทเปˆเบญเบเบทเปˆเบ™ .bashrcเป€เบŠเบดเปˆเบ‡เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เบ—เบธเบเบ„เบฑเป‰เบ‡เบ—เบตเปˆเบœเบนเป‰เปƒเบŠเป‰เป€เบ‚เบปเป‰เบฒเบชเบนเปˆเบฅเบฐเบšเบปเบš:

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

เบ„เปเบฒเบชเบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบˆเบฐเบ•เบดเบ”เบ•เบฑเป‰เบ‡เบชเปˆเบงเบ™เบ‚เบฐเบซเบเบฒเบเบžเบดเป€เบชเบ” - extension manager in jupyter lab:

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

เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เปเบกเปˆเบ™เบเบฝเบกเบžเป‰เบญเบกเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบ›เบตเบ”เบ•เบปเบงเบ„เบฑเป‰เบ‡เบ—เปเบฒเบญเบดเบ” jupyter lab, เปเบ•เปˆเบžเบงเบเป€เบฎเบปเบฒเบเบฑเบ‡เบชเบฒเบกเบฒเบ”เบ•เบดเบ”เบ•เบฑเป‰เบ‡เบชเปˆเบงเบ™เบ‚เบฐเบซเบเบฒเบเบ—เบตเปˆเป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”เบšเปเปˆเบซเบผเบฒเบเบ›เบฒเบ™เปƒเบ”:

  • toc โ€” เบ•เบฒโ€‹เบ•เบฐโ€‹เบฅเบฒเบ‡โ€‹เบ‚เบญเบ‡โ€‹เป€เบ™เบทเป‰เบญโ€‹เปƒเบ™โ€‹, เบชเป‰เบฒเบ‡โ€‹เบšเบฑเบ™โ€‹เบŠเบตโ€‹เบฅเบฒเบโ€‹เบเบฒเบ™โ€‹เบ‚เบญเบ‡โ€‹เบซเบปเบงโ€‹เบ‚เปเป‰โ€‹เปƒเบ™โ€‹เบšเบปเบ”โ€‹เบ„เบงเบฒเบก / เบ›เบทเป‰เบกโ€‹เบšเบฑเบ™โ€‹เบ—เบถเบโ€‹เป€เบ›เบฑเบ™โ€‹
  • jupyterlab-horizon-theme - เบซเบปเบงเบ‚เปเป‰ UI
  • jupyterlab_neon_theme - เบซเบปเบงเบ‚เปเป‰ UI
  • jupyterlab-ubu-theme - เบญเบตเบเบญเบฑเบ™เบซเบ™เบถเปˆเบ‡ เบซเบปเบงเบ‚เปเป‰เบˆเบฒเบเบœเบนเป‰เบ‚เบฝเบ™ เบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰ :) เปเบ•เปˆเปƒเบ™เบเปเบฅเบฐเบ™เบตเบ™เบตเป‰, เบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡เบˆเบฒเบ repository 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"

เบ•เบญเบ™เบ™เบตเป‰เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบชเบญเบ‡เบ„เปเบฒเบชเบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰เป€เบžเบทเปˆเบญเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบกเบฑเบ™เบ„เบฑเป‰เบ‡เบ—เปเบฒเบญเบดเบ” jupyter lab. เบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ—เบตเปˆเบˆเบฐเป€เบ›เบตเบ”เบ•เบปเบงเบกเบฑเบ™เบ”เป‰เบงเบเบ„เปเบฒเบชเบฑเปˆเบ‡เบ”เบฝเบง, เปเบ•เปˆเปƒเบ™เบเปเบฅเบฐเบ™เบตเบ™เบตเป‰, เบ„เปเบฒเบชเบฑเปˆเบ‡เป€เบ›เบตเบ”เบ•เบปเบง, เป€เบŠเบดเปˆเบ‡เบเบฒเบเบ—เบตเปˆเบˆเบฐเบˆเบทเปˆเป„เบงเป‰เปƒเบ™เปƒเบˆเบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒ, เบˆเบฐเบ–เบทเบเบˆเบปเบ”เบˆเปเบฒเป‚เบ”เบ bash เปƒเบ™ container, เปเบฅเบฐเบšเปเปˆเปเบกเปˆเบ™เบขเบนเปˆเปƒเบ™ host, เบšเปˆเบญเบ™เบ—เบตเปˆเบกเบตเบ„เปเบฒเบชเบฑเปˆเบ‡เบžเบฝเบ‡เบžเปเปเบฅเป‰เบง. เป€เบžเบทเปˆเบญโ€‹เบšเบฑเบ™โ€‹เบ—เบถเบโ€‹เปƒเบซเป‰โ€‹เป€เบ‚เบปเบฒโ€‹เป€เบˆเบปเป‰เบฒโ€‹เปƒเบ™โ€‹เบ›เบฐโ€‹เบซเบงเบฑเบ”โ€‹เบชเบฒเบ” :)

เป€เบ‚เบปเป‰เบฒเบชเบนเปˆเบฅเบฐเบšเบปเบšเบšเบฑเบ™เบˆเบธเป€เบ›เบฑเบ™เบœเบนเป‰เปƒเบŠเป‰ jupyter:

lxc exec jupyterlab -- su -l jupyter

เบ•เปเปˆเป„เบ›, เปเบฅเปˆเบ™ jupyter lab เบ”เป‰เบงเบเบเบฐเปเบˆ เปเบฅเบฐเบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเบ•เบฒเบกเบ—เบตเปˆเบฅเบฐเบšเบธเป„เบงเป‰:

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

เป„เบ›โ€‹เบ—เบตเปˆโ€‹เบขเบนเปˆโ€‹เปƒเบ™โ€‹เบ•เบปเบงโ€‹เบ—เปˆเบญเบ‡โ€‹เป€เบงเบฑเบšโ€‹เบ‚เบญเบ‡โ€‹เบ—เปˆเบฒเบ™โ€‹ http://10.0.5.5:8888 เปเบฅเบฐเบขเบนเปˆเปƒเบ™เบซเบ™เป‰เบฒเบ—เบตเปˆเป€เบ›เบตเบ”เป€เบ‚เบปเป‰เบฒเป„เบ› token เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบ—เบตเปˆเบ—เปˆเบฒเบ™เบˆเบฐเป€เบซเบฑเบ™เปƒเบ™ console. เบ„เบฑเบ”เบฅเบญเบเปเบฅเบฐเบงเบฒเบ‡เบกเบฑเบ™เบขเบนเปˆเปƒเบ™เบซเบ™เป‰เบฒ, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ„เบฅเบดเบ เป€เบ‚เบปเป‰เบฒโ€‹เบชเบนเปˆโ€‹เบฅเบฐโ€‹เบšเบปเบš. เบซเบผเบฑเบ‡เบˆเบฒเบเป€เบ‚เบปเป‰เบฒเบชเบนเปˆเบฅเบฐเบšเบปเบš, เป„เบ›เบ—เบตเปˆเป€เบกเบ™เบนเบชเปˆเบงเบ™เบ‚เบฐเบซเบเบฒเบเบขเบนเปˆเป€เบšเบทเป‰เบญเบ‡เบŠเป‰เบฒเบ, เบ”เบฑเปˆเบ‡เบ—เบตเปˆเบชเบฐเปเบ”เบ‡เบขเบนเปˆเปƒเบ™เบฎเบนเบšเบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰, เบšเปˆเบญเบ™เบ—เบตเปˆเบ—เปˆเบฒเบ™เบˆเบฐเบ–เบทเบเป€เบ•เบทเบญเบ™, เป€เบกเบทเปˆเบญเป€เบ›เบตเบ”เปƒเบŠเป‰เบ•เบปเบงเบˆเบฑเบ”เบเบฒเบ™เบชเปˆเบงเบ™เบ‚เบฐเบซเบเบฒเบ, เป€เบžเบทเปˆเบญเบกเบตเบ„เบงเบฒเบกเบชเปˆเบฝเบ‡เบ”เป‰เบฒเบ™เบ„เบงเบฒเบกเบ›เบญเบ”เป„เบžเป‚เบ”เบเบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡เบชเปˆเบงเบ™เบ‚เบฐเบซเบเบฒเบเบˆเบฒเบเบžเบฒเบเบชเปˆเบงเบ™เบ—เบตเบชเบฒเบกเบ—เบตเปˆเบ„เปเบฒเบชเบฑเปˆเบ‡. เบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒ JupyterLab เบšเปเปˆโ€‹เบกเบตโ€‹เบ„เบงเบฒเบกโ€‹เบฎเบฑเบšโ€‹เบœเบดเบ”โ€‹เบŠเบญเบšโ€‹:

เบเบฒเบ™เป€เบ›เบตเบ”เบ•เบปเบง Jupyter เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบงเบปเบ‡เป‚เบ„เบˆเบญเบ™ LXD

เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เบžเบงเบเป€เบฎเบปเบฒเบเปเบฒเบฅเบฑเบ‡เป‚เบ”เบ”เบ”เปˆเบฝเบงเบ—เบฑเบ‡เบซเบกเบปเบ” jupyter lab เปเบฅเบฐเบงเบฒเบ‡เบกเบฑเบ™เป„เบงเป‰เปƒเบ™เบ•เบนเป‰เบ„เบญเบ™เป€เบ—เบ™เป€เบ™เบตเป€เบžเบทเปˆเบญเปƒเบซเป‰เบชเปˆเบงเบ™เบ‚เบฐเบซเบเบฒเบเบ‚เบญเบ‡เบžเบฒเบเบชเปˆเบงเบ™เบ—เบตเบชเบฒเบกเบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เปเบฅเบฐเบ™เปเบฒเปƒเบŠเป‰ NodeJS เบขเปˆเบฒเบ‡เบซเบ™เป‰เบญเบเบšเปเปˆเบชเบฒเบกเบฒเบ”เบฅเบฑเบเบ‚เปเป‰เบกเบนเบ™เปƒเบ™เปเบœเปˆเบ™เบญเบทเปˆเบ™เบ™เบญเบเป€เบซเบ™เบทเบญเบˆเบฒเบเบชเบดเปˆเบ‡เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเป€เบ›เบตเบ”เบขเบนเปˆเปƒเบ™เบ–เบฑเบ‡. เป„เบ›เบซเบฒเป€เบญเบเบฐเบชเบฒเบ™เบชเปˆเบงเบ™เบ•เบปเบงเบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒเบขเบนเปˆเปƒเบ™เป€เบˆเบปเป‰เบฒเบžเบฒเบšเปƒเบ™ /home เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบˆเบฒเบ container เปเบกเปˆเบ™เบšเปเปˆเบซเบ™เป‰เบฒเบˆเบฐเบ›เบฐเบชเบปเบšเบœเบปเบ™เบชเปเบฒเป€เบฅเบฑเบ”, เปเบฅเบฐเบ–เป‰เบฒเบžเบงเบเป€เบ‚เบปเบฒเป€เบฎเบฑเบ”, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบกเบตเบชเบดเบ”เบ—เบดเบžเบดเป€เบชเบ”เบเปˆเบฝเบงเบเบฑเบšเป„เบŸเบฅเปŒเปƒเบ™เบฅเบฐเบšเบปเบšเป€เบˆเบปเป‰เบฒเบžเบฒเบš, เป€เบžเบฒเบฐเบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™ container เปƒเบ™. เบฎเบนเบšโ€‹เปเบšเบšโ€‹เบ—เบตเปˆโ€‹เบšเปเปˆโ€‹เบกเบตโ€‹เบชเบดเบ”โ€‹เบ—เบดโ€‹เบžเบดโ€‹เป€เบชเบ”โ€‹. เบญเบตเบ‡เบ•เบฒเบกเบ‚เปเป‰เบกเบนเบ™เบ™เบตเป‰, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ›เบฐเป€เบกเบตเบ™เบ„เบงเบฒเบกเบชเปˆเบฝเบ‡เบ‚เบญเบ‡เบเบฒเบ™เบฅเบงเบกเป€เบญเบปเบฒเบเบฒเบ™เบ‚เบฐเบซเบเบฒเบเบขเบนเปˆเปƒเบ™ jupyter lab.

เบชเป‰เบฒเบ‡เบ›เบทเป‰เบกเบšเบฑเบ™เบ—เบถเบ IPython (เบซเบ™เป‰เบฒเปƒเบ™ jupyter lab) เปƒเบ™โ€‹เบ›เบฑเบ”โ€‹เบˆเบธโ€‹เบšเบฑเบ™โ€‹เบˆเบฐโ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบเบฒเบ™โ€‹เบชเป‰เบฒเบ‡โ€‹เบ•เบฑเป‰เบ‡โ€‹เบ‚เบถเป‰เบ™โ€‹เปƒเบ™โ€‹เบฅเบฐโ€‹เบšเบปเบšโ€‹เป€เบฎเบทเบญเบ™โ€‹เบ‚เบญเบ‡โ€‹เบœเบนเป‰โ€‹เปƒเบŠเป‰ - /home/jupyter, เปเบ•เปˆเปเบœเบ™เบเบฒเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเปเบกเปˆเบ™เป€เบžเบทเปˆเบญเปเบšเปˆเบ‡เบ›เบฑเบ™เบ‚เปเป‰เบกเบนเบ™ (เปเบšเปˆเบ‡เบ›เบฑเบ™) เบฅเบฐเบซเบงเปˆเบฒเบ‡ host เปเบฅเบฐ container, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบเบฑเบšเบ„เบทเบ™เป„เบ›เบซเบฒ console เปเบฅเบฐเบขเบธเบ”. jupyter lab เป‚เบ”เบโ€‹เบเบฒเบ™โ€‹เบ›เบฐโ€‹เบ•เบดโ€‹เบšเบฑเบ” hotkey - CTRL+C เปเบฅเบฐเบ•เบญเบš y เบ•เบฒเบกเบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เป. เบˆเบฒเบเบ™เบฑเป‰เบ™เบขเบธเบ”เป€เบŠเบ”เบŠเบฑเบ™เบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบšเบ‚เบญเบ‡เบœเบนเป‰เปƒเบŠเป‰ jupyter เบชเปเบฒเป€เบฅเบฑเบ” hotkey CTRL+D.

เปเบšเปˆเบ‡เบ›เบฑเบ™เบ‚เปเป‰เบกเบนเบ™เบเบฑเบšเป€เบˆเบปเป‰เบฒเบžเบฒเบš ^

เป€เบžเบทเปˆเบญเปเบšเปˆเบ‡เบ›เบฑเบ™เบ‚เปเป‰เบกเบนเบ™เบเบฑเบšเป‚เบฎเบ”, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบชเป‰เบฒเบ‡เบญเบธเบ›เบฐเบเบญเบ™เปƒเบ™เบ–เบฑเบ‡เบ—เบตเปˆเบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เป€เบฎเบฑเบ”เปเบฅเบฐเป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ™เบตเป‰, เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบเปเบฒเบ™เบปเบ”เบฅเบฐเบซเบฑเบ”เบ•เปเปˆเป„เบ›เบ™เบตเป‰:

  • lxc config device add โ€” เบ„เปเบฒโ€‹เบชเบฑเปˆเบ‡โ€‹เป€เบžเบตเปˆเบกโ€‹เบเบฒเบ™โ€‹เบ•เบฑเป‰เบ‡โ€‹เบ„เปˆเบฒโ€‹เบญเบธโ€‹เบ›เบฐโ€‹เบเบญเบ™โ€‹
  • jupyter โ€” ID เบ‚เบญเบ‡เบเปˆเบญเบ‡เบšเบฑเบ™เบˆเบธเบ—เบตเปˆเป€เบžเบตเปˆเบกเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ
  • hostfs โ€” ID เบญเบธเบ›เบฐเบเบญเบ™. เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ•เบฑเป‰เบ‡เบŠเบทเปˆเปƒเบ”เบเปเป„เบ”เป‰.
  • 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

เบชเบฐโ€‹เบšเบฒเบโ€‹เบ”เบตโ€‹เบŠเบฒเบงโ€‹เป‚เบฅเบ! ^

เบ–เป‰เบฒโ€‹เบซเบฒเบโ€‹เบงเปˆเบฒโ€‹เบ—เปˆเบฒเบ™โ€‹เบเบฑเบ‡โ€‹เบกเบตโ€‹เบเบญเบ‡โ€‹เบ›เบฐโ€‹เบŠเบธเบก console เป€เบ›เบตเบ”โ€‹เบขเบนเปˆโ€‹เปƒเบ™ container เบเบฑเบšโ€‹ jupyter lab, เบˆเบฒเบเบ™เบฑเป‰เบ™เบฃเบตเบชเบฐเบ•เบฒเบ”เบกเบฑเบ™เบ”เป‰เบงเบเบเบฐเปเบˆเปƒเปเปˆ --notebook-dir เป‚เบ”เบโ€‹เบเบฒเบ™โ€‹เบ•เบฑเป‰เบ‡โ€‹เบ„เปˆเบฒโ€‹ /mnt/hostfs เป€เบ›เบฑเบ™เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เป„เบ›เบชเบนเปˆเบฎเบฒเบเบ‚เบญเบ‡เปเบฅเบฑเบšเบ—เบฑเบญเบšเปƒเบ™เบ–เบฑเบ‡เบชเปเบฒเบฅเบฑเบšเบญเบธเบ›เบฐเบเบญเบ™เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบชเป‰เบฒเบ‡เปƒเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒ:

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

เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เป„เบ›เบซเบฒเบซเบ™เป‰เบฒ http://10.0.5.5:8888 เปเบฅเบฐเบชเป‰เบฒเบ‡เปเบฅเบฑเบšเบ—เบฑเบญเบšเบ—เปเบฒเบญเบดเบ”เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เป‚เบ”เบเบเบฒเบ™เบ„เบฅเบดเบเปƒเบชเปˆเบ›เบธเปˆเบกเปƒเบ™เบซเบ™เป‰เบฒเบ”เบฑเปˆเบ‡เบ—เบตเปˆเบชเบฐเปเบ”เบ‡เบขเบนเปˆเปƒเบ™เบฎเบนเบšเบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰:

เบเบฒเบ™เป€เบ›เบตเบ”เบ•เบปเบง Jupyter เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบงเบปเบ‡เป‚เบ„เบˆเบญเบ™ LXD

เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เปƒเบ™เบžเบฒเบเบชเบฐเบซเบ™เบฒเบกเปƒเบ™เบซเบ™เป‰เบฒ, เปƒเบชเปˆเบฅเบฐเบซเบฑเบ” Python เบ—เบตเปˆเบˆเบฐเบชเบฐเปเบ”เบ‡เบ„เบฅเบฒเบชเบชเบดเบ Hello World!. เป€เบกเบทเปˆเบญเบ—เปˆเบฒเบ™เบชเปเบฒเป€เบฅเบฑเบ”เบเบฒเบ™เป€เบ‚เบปเป‰เบฒ, เบเบปเบ” CTRL+ENTER เบซเบผเบทเบ›เบธเปˆเบก "เบซเบผเบดเป‰เบ™" เปƒเบ™เปเบ–เบšเป€เบ„เบทเปˆเบญเบ‡เบกเบทเบขเบนเปˆเป€เบ—เบดเบ‡เบชเบธเบ”เป€เบžเบทเปˆเบญเปƒเบซเป‰ JupyterLab เป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ™เบตเป‰:

เบเบฒเบ™เป€เบ›เบตเบ”เบ•เบปเบง Jupyter เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบงเบปเบ‡เป‚เบ„เบˆเบญเบ™ LXD

เปƒเบ™เบˆเบธเบ”เบ™เบตเป‰, เป€เบเบทเบญเบšเบ—เบธเบเบขเปˆเบฒเบ‡เปเบกเปˆเบ™เบเบฝเบกเบžเป‰เบญเบกเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰, เปเบ•เปˆเบกเบฑเบ™เบˆเบฐเบšเปเปˆเบซเบ™เป‰เบฒเบชเบปเบ™เปƒเบˆเบ–เป‰เบฒเบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเบ•เบดเบ”เบ•เบฑเป‰เบ‡เป‚เบกเบ”เบนเบ™ Python เป€เบžเบตเปˆเบกเป€เบ•เบตเบก (เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเป€เบ•เบฑเบกเบฎเบนเบšเปเบšเบš) เบ—เบตเปˆเบชเบฒเบกเบฒเบ”เบ‚เบฐเบซเบเบฒเบเบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เบ‚เบญเบ‡ Python เบขเปˆเบฒเบ‡เบซเบผเบงเบ‡เบซเบผเบฒเบเปƒเบ™. jupyter labเบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เปƒเบซเป‰เป€เบฎเบปเบฒเบเป‰เบฒเบงเบ•เปเปˆเป„เบ› :)

PS เบชเบดเปˆเบ‡เบ—เบตเปˆเบซเบ™เป‰เบฒเบชเบปเบ™เปƒเบˆเปเบกเปˆเบ™เบงเปˆเบฒเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เปเบšเบšเป€เบเบปเปˆเบฒ เบ”เบฒเบงเบžเบฐเบซเบฑเบ” เบžเบฒเบเปƒเบ•เป‰เบŠเบทเปˆเบฅเบฐเบซเบฑเบ” เบ›เบทเป‰เบกเบšเบฑเบ™เบ—เบถเบ Jupyter เบเบฑเบ‡เบšเปเปˆเบ—เบฑเบ™เป„เบ”เป‰เบซเบกเบปเบ”เป„เบ›เปเบฅเบฐเบกเบฑเบ™เบกเบตเบขเบนเปˆเปƒเบ™เบ‚เบฐเบซเบ™เบฒเบ™เบเบฑเบš jupyter lab. เป€เบžเบทเปˆเบญเบ›เปˆเบฝเบ™เป„เบ›เปƒเบŠเป‰เป€เบงเบตเบŠเบฑเบ™เป€เบเบปเปˆเบฒ, เปƒเบซเป‰เป€เบฎเบฑเบ”เบ•เบฒเบกเบฅเบดเป‰เบ‡เบ—เบตเปˆเป€เบžเบตเปˆเบกเบ„เบณเบ•เปเปˆเบ—เป‰เบฒเบเบขเบนเปˆเปƒเบ™เบ—เบตเปˆเบขเบนเปˆ/tree, เปเบฅเบฐเบเบฒเบ™เบซเบฑเบ™เบ›เปˆเบฝเบ™เป„เบ›เบชเบนเปˆเบชเบฐเบšเบฑเบšเปƒเบซเบกเปˆเปเบกเปˆเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ”เป‰เบงเบเบ„เปเบฒเบ•เปเปˆเบ—เป‰เบฒเบ /lab, เปเบ•เปˆเบกเบฑเบ™เบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบฅเบฐเบšเบธ:

เบ‚เบฐเบซเบเบฒเบเบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เบ‚เบญเบ‡ Python ^

เปƒเบ™เบžเบฒเบเบ™เบตเป‰, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบ•เบดเบ”เบ•เบฑเป‰เบ‡เป‚เบกเบ”เบนเบ™เบžเบฒเบชเบฒ Python เบ—เบตเปˆเบกเบตเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเป€เบŠเบฑเปˆเบ™: เบ•เบปเบงเป€เบฅเบ, Pandas, matplotlib, IPyWidgets เบœเบปเบ™โ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบ‚เบญเบ‡โ€‹เบเบฒเบ™โ€‹เบ—เบตเปˆโ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบเบฒเบ™โ€‹เบ›เบฐโ€‹เบชเบปเบกโ€‹เบ›เบฐโ€‹เบชเบฒเบ™โ€‹เปƒเบ™โ€‹เบ„เบญเบกโ€‹เบžเบดเบงโ€‹เป€เบ•เบตโ€‹ jupyter lab.

เบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเบ•เบดเบ”เบ•เบฑเป‰เบ‡เป‚เบกเบ”เบนเบ™ Python เบ—เบตเปˆเบกเบตเบฅเบฒเบเบŠเบทเปˆเบœเปˆเบฒเบ™เบ•เบปเบงเบˆเบฑเบ”เบเบฒเบ™เบŠเบธเบ” pip เบ—เปเบฒเบญเบดเบ”เบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เปเบเป‰เป„เบ‚เบ„เบงเบฒเบกเบ‚เบถเป‰เบ™เบเบฑเบšเบฅเบฐเบšเบปเบšเปƒเบ™ Alpine Linux:

  • g++ โ€” เบˆเปเบฒโ€‹เป€เบ›เบฑเบ™โ€‹เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบเบฒเบ™โ€‹เบชเบฑเบ‡โ€‹เบฅเบงเบกโ€‹เป‚เบกโ€‹เบ”เบนเบ™โ€‹, เป€เบ™เบทเปˆเบญเบ‡โ€‹เบˆเบฒเบโ€‹เบงเปˆเบฒโ€‹เบšเบฒเบ‡โ€‹เบชเปˆเบงเบ™โ€‹เบ‚เบญเบ‡โ€‹เบžเบงเบโ€‹เป€เบ‚เบปเบฒโ€‹เปเบกเปˆเบ™โ€‹เบ›เบฐโ€‹เบ•เบดโ€‹เบšเบฑเบ”โ€‹เปƒเบ™โ€‹เบžเบฒโ€‹เบชเบฒโ€‹ C ++ เปเบฅเบฐเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบš Python เปƒเบ™เป€เบงเบฅเบฒเปเบฅเปˆเบ™เป€เบ›เบฑเบ™เป‚เบกเบ”เบนเบ™ binary
  • freetype-dev - เบเบฒเบ™เบ‚เบถเป‰เบ™เบเบฑเบšเป‚เบกเบ”เบนเบ™ Python matplotlib

เบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡เบเบฒเบ™เบ‚เบถเป‰เบ™เบเบฑเบš:

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

เบกเบตเบšเบฑเบ™เบซเบฒเบซเบ™เบถเปˆเบ‡: เปƒเบ™เบชเบฐเบ–เบฒเบ™เบฐเบ›เบฐเบˆเบธเบšเบฑเบ™เบ‚เบญเบ‡เบเบฒเบ™เปเบˆเบเบขเบฒเบ Alpine Linux, เบกเบฑเบ™เบˆเบฐเบšเปเปˆเบชเบฒเบกเบฒเบ”เบฅเบงเบšเบฅเบงเบก NumPy เบฎเบธเปˆเบ™เปƒเบซเบกเปˆเป„เบ”เป‰; เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เบเบฒเบ™เบฅเบงเบšเบฅเบงเบกเบˆเบฐเบ›เบฒเบเบปเบ”เบงเปˆเบฒเบ‚เป‰เบญเบเบšเปเปˆเบชเบฒเบกเบฒเบ”เปเบเป‰เป„เบ‚เป„เบ”เป‰:

ERROR: เบšเปเปˆเบชเบฒเบกเบฒเบ”เบชเป‰เบฒเบ‡เบฅเปเป‰เบชเปเบฒเบฅเบฑเบš numpy เบ—เบตเปˆเปƒเบŠเป‰ PEP 517 เปเบฅเบฐเบšเปเปˆเบชเบฒเบกเบฒเบ”เบ•เบดเบ”เบ•เบฑเป‰เบ‡เป‚เบ”เบเบเบปเบ‡เป„เบ”เป‰

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบ•เบดเบ”เบ•เบฑเป‰เบ‡เป‚เบกเบ”เบนเบ™เบ™เบตเป‰เป€เบ›เบฑเบ™เบŠเบธเบ”เบฅเบฐเบšเบปเบšเบ—เบตเปˆเปเบˆเบเบขเบฒเบเบชเบฐเบšเบฑเบšเบ—เบตเปˆเบฅเบงเบšเบฅเบงเบกเปเบฅเป‰เบง, เปเบ•เปˆเป€เบเบปเปˆเบฒเบเบงเปˆเบฒเบชเบดเปˆเบ‡เบ—เบตเปˆเบกเบตเบขเบนเปˆเปƒเบ™เป€เบงเบฑเบšเป„เบŠเบ—เปŒเปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™:

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 ^

เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบเปเบฒเบฅเบฑเบ‡เปเบฅเปˆเบ™ jupyter lab, restart เบกเบฑเบ™เป€เบžเบทเปˆเบญเปƒเบซเป‰เป‚เบกเบ”เบนเบ™เบ—เบตเปˆเบ•เบดเบ”เบ•เบฑเป‰เบ‡เปƒเบซเบกเปˆเบ–เบทเบเป€เบ›เบตเบ”เปƒเบŠเป‰. เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ™เบตเป‰, เปƒเบ™เบเบญเบ‡เบ›เบฐเบŠเบธเบก console, เบ„เบฅเบดเบ CTRL+C เบšเปˆเบญเบ™เบ—เบตเปˆเบ—เปˆเบฒเบ™เบกเบตเบกเบฑเบ™เปเบฅเปˆเบ™เปเบฅเบฐเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ y เป€เบžเบทเปˆเบญเบขเบธเบ”เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡ jupyter lab เป‚เบ”เบเบเบปเบ”เบฅเบนเบเบชเบญเบ™เบ‚เบถเป‰เบ™เป€เบ—เบดเบ‡เปเบ›เป‰เบ™เบžเบดเบกเป€เบžเบทเปˆเบญเบšเปเปˆเปƒเบซเป‰เปƒเบชเปˆเบ„เปเบฒเบชเบฑเปˆเบ‡เบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™ 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 เบชเบฐเปเบ”เบ‡เบœเบปเบ™เบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ”เปƒเบ™เบฎเบนเบšเปเบšเบšเบ‚เบญเบ‡เบฎเบนเบšเป€เบ›เบฑเบ™เบเบฒเบŸเบซเบ™เป‰เบฒเบ—เบตเปˆ:

เบเบฒเบ™เป€เบ›เบตเบ”เบ•เบปเบง Jupyter เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบงเบปเบ‡เป‚เบ„เบˆเบญเบ™ LXD

เบ•เบปเบงเบขเปˆเบฒเบ‡เบซเบผเบฒเบ IPyWidgets เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบŠเบญเบเบซเบฒเบกเบฑเบ™เบขเบนเปˆเปƒเบ™ tutorials เบ—เบตเปˆเบ™เบตเป‰

เบกเบตโ€‹เบซเบเบฑเบ‡โ€‹เบญเบตเบ? ^

เป€เบฎเบฑเบ”เป„เบ”เป‰เบ”เบตเบ–เป‰เบฒเบ—เปˆเบฒเบ™เบขเบนเปˆเปเบฅเบฐเบกเบฒเบฎเบญเบ”เบ—เป‰เบฒเบเบ‚เบญเบ‡เบšเบปเบ”เบ„เบงเบฒเบก. เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป‚เบ”เบเป€เบˆเบ”เบ•เบฐเบ™เบฒเบšเปเปˆเป„เบ”เป‰เบ›เบฐเบเบฒเบ”เบชเบฐเบ„เบดเบšเบ—เบตเปˆเบเบฝเบกเบžเป‰เบญเบกเปƒเบ™เบ•เบญเบ™เบ—เป‰เบฒเบเบ‚เบญเบ‡เบšเบปเบ”เบ„เบงเบฒเบกเบ—เบตเปˆเบˆเบฐเบ•เบดเบ”เบ•เบฑเป‰เบ‡ jupyter lab เปƒเบ™ "เบ„เบฅเบดเบเบ”เบฝเบง" เป€เบžเบทเปˆเบญเบŠเบธเบเบเบนเป‰เปƒเบซเป‰เบœเบนเป‰เบญเบญเบเปเบฎเบ‡เบ‡เบฒเบ™ :) เปเบ•เปˆเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰เบ”เป‰เบงเบเบ•เบปเบงเบ—เปˆเบฒเบ™เป€เบญเบ‡, เป€เบžเบฒเบฐเบงเปˆเบฒเบ—เปˆเบฒเบ™เบฎเบนเป‰เบงเบดเบ—เบตเบเบฒเบ™, เป‚เบ”เบเป„เบ”เป‰เบฅเบงเบšเบฅเบงเบกเบ„เปเบฒเบชเบฑเปˆเบ‡เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ Bash script เบ”เบฝเบง :)

เบ—เปˆเบฒเบ™โ€‹เบเบฑเบ‡โ€‹เบชเบฒโ€‹เบกเบฒเบ”:

  • เบ•เบฑเป‰เบ‡เบŠเบทเปˆเป€เบ„เบทเบญเบ‚เปˆเบฒเบเบชเปเบฒเบฅเบฑเบšเบšเบฑเบ™เบˆเบธเปเบ—เบ™เบ—เบตเปˆเบˆเบฐเป€เบ›เบฑเบ™เบ—เบตเปˆเบขเบนเปˆ IP เป‚เบ”เบเบเบฒเบ™เบ‚เบฝเบ™เบกเบฑเบ™เปเบšเบšเบ‡เปˆเบฒเบเบ”เบฒเบ /etc/hosts เปเบฅเบฐเบžเบดเบกเบ—เบตเปˆเบขเบนเปˆเปƒเบ™ browser http://jupyter.local:8888
  • เบซเบผเบดเป‰เบ™เบ›เบฐเบกเบฒเบ™เบเบฒเบ™เบˆเปเบฒเบเบฑเบ”เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบชเปเบฒเบฅเบฑเบšเบšเบฑเบ™เบˆเบธ, เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ™เบตเป‰เบญเปˆเบฒเบ™เบšเบปเบ”เปƒเบ™ เบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เบžเบทเป‰เบ™เบ–เบฒเบ™เบ‚เบญเบ‡ LXD เบซเบผเบทเป„เบ”เป‰เบฎเบฑเบšเบ‚เปเป‰เบกเบนเบ™เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบขเบนเปˆเปƒเบ™เป€เบงเบฑเบšเป„เบŠเบ—เปŒเบœเบนเป‰เบžเบฑเบ”เบ—เบฐเบ™เบฒ LXD.
  • เบ›เปˆเบฝเบ™เบซเบปเบงเบ‚เปเป‰:

เบเบฒเบ™เป€เบ›เบตเบ”เบ•เบปเบง Jupyter เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบงเบปเบ‡เป‚เบ„เบˆเบญเบ™ LXD

เปเบฅเบฐโ€‹เบซเบผเบฒเบโ€‹เบเบงเปˆเบฒโ€‹เบ—เบตเปˆโ€‹เบ—เปˆเบฒเบ™โ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เป€เบฎเบฑเบ”โ€‹เป„เบ”เป‰โ€‹! เบซเบกเบปเบ”โ€‹เป€เบ—เบปเปˆเบฒโ€‹เบ™เบตเป‰. เบ‚เป‰เบฒโ€‹เบžเบฐโ€‹เป€เบˆเบปเป‰เบฒโ€‹เบ‚เปโ€‹เปƒเบซเป‰โ€‹เบ—เปˆเบฒเบ™โ€‹เบชเบปเบšโ€‹เบœเบปเบ™โ€‹เบชเปเบฒโ€‹เป€เบฅเบฑเบ”โ€‹!

เบญเบฑเบšเป€เบ”เบ”: 15.04.2020/18/30 XNUMX:XNUMX - เปเบเป‰เป„เบ‚เบ‚เปเป‰เบœเบดเบ”เบžเบฒเบ”เปƒเบ™เบšเบปเบ” โ€œเบชเบฐเบšเบฒเบเบ”เบตเป‚เบฅเบ!โ€
เบญเบฑเบšเป€เบ”เบ”: 16.04.2020/10/00 XNUMX:XNUMX โ€” เปเบเป‰เป„เบ‚ เปเบฅเบฐเป€เบžเบตเปˆเบกเบ‚เปเป‰เบ„เบงเบฒเบกเปƒเบ™เบ„เบณเบญเบฐเบ—เบดเบšเบฒเบเบเบฒเบ™เป€เบ›เบตเบ”เปƒเบŠเป‰เบ•เบปเบงเบˆเบฑเบ”เบเบฒเบ™เบชเปˆเบงเบ™เบ‚เบฐเบซเบเบฒเบ jupyter lab
เบญเบฑเบšเป€เบ”เบ”: เบงเบฑเบ™เบ—เบต 16.04.2020/10/40 XNUMX:XNUMX โ€” เปเบเป‰เป„เบ‚เบ‚เปเป‰เบœเบดเบ”เบžเบฒเบ”เบ—เบตเปˆเบžเบปเบšเปƒเบ™เบ‚เปเป‰เบ„เบงเบฒเบก เปเบฅเบฐ เบ›เปˆเบฝเบ™เปเบ›เบ‡เป€เบฅเบฑเบเบ™เป‰เบญเบเปƒเบซเป‰เบ”เบตเบ‚เบถเป‰เบ™เปƒเบ™เบžเบฒเบ โ€œเบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡เบŠเบญเบšเปเบงเบžเบทเป‰เบ™เบ–เบฒเบ™ เปเบฅเบฐ เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบฅเบฐเบšเบปเบšโ€

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™