Skip to content

Simple vscode project for development python and jupyter notebook in docker.

Notifications You must be signed in to change notification settings

SolKul/vscode-jupyter-container2

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 

Repository files navigation

vscode-notebook-devcontainer

Simple vscode project for development python and jupyter notebook in docker. This repositry uses Jupyter Docker Stacks.

Usage

Install Remote Container

Install Extensino for Visual Studio Code. Remote - Containers - Visual Studio Marketplace

clone repository

clone this repository

Open in Container

  1. Press Ctrl+Shift+p to open Command Palette in Visual Studo Code.
  2. Exec Remote-Containers: rebuild and Reopen in Container
  3. wait until docker-compose build and VSCode open work space

メモ

bashを起動したい場合

新しいモジュールをインストールしたり、ファイル操作やapt-getなどbashを操作したい場合があると思う。その場合はdocker exec -it コンテナID /bin/bashなどすれば、bashを起動できる。またはVS codeRemote - containerしている場合は新しくターミナルを開けばいい。

デフォルトコマンドについて

jupyter/minimal-notebookjupyter/scipy-notebookなど Jupyter Docker StacksのシリーズのDockerは立ち上がると同時にデフォルトでstart-notebook.shが走り、各種設定を行う。(GRAT_SUDOの有効化など)。start-notebook.shが必要な設定を行うのでデフォルトコマンドは変更しないほうがいい。

Jupyter notebookを使うための設定

Jupyter Docker Stacksは2022年1月ごろ、デフォルトのサーバーバックエンドをjupyter notebookからjupyter serverに切り替えました。これに伴いデフォルトのエディタがjupyter notebookからjupyter Labに切り替わりました。

バックエンドがjupyter serverのままでも、jupyter notebookは引き続き使えます。loacalhost:8888にアクセスすると、jupyter labに、loacalhost:8888/treeにアクセスすると、従来のjupyter notebookにアクセスします。

しかし、様々な拡張機能があるjupyter_contrib_nbextensionsはjupyter notebookでしか使えず、しかもバックエンドがjupyter serverだと/treeのnotebookからもnbextensionは使えなくなってしまいます。私は選択中の文字を強調するHighlit Selected Wordを使いたいため、jupyter notebook+jupyter_contrib_nbextensionsを使い続けています。いまのところ同じ機能はjupyter labは対応していないようです。

なのでバックエンドをjupyter notebookに切り替える必要があります。

Common Features — Docker Stacks documentationによるとコンテナ内の環境変数DOCKER_STACKS_JUPYTER_CMDnotebookに設定することで、立ち上がったサーバのバックエンドjupyter notebookに切り替えることができます。なので、docker-compose.yml中で次のように設定しています。

environment:
    - DOCKER_STACKS_JUPYTER_CMD=notebook

ユーザーと権限について

ユーザーは管理者であるrootと、jovyanがいる。jupyter notebookを管理者権限で実行するのはセキュリティ的にまずいので、jupyter notebookjovyanで起動するようになっている。

普通に立ち上げるとユーザーはjovyanになる。権限がないのでapt-get updateapt-get installはできない。

しかしDockerfile中で

USER root

rootに切り替えた場合、bashrootで起動し、apt-getなどが使えるようになる。

この状態で、su jovyanなどとすれば、jovyanに切り替わる。このjovyanでは/opt/conda/bin/のパスが通っていないため、pipコマンドやcondaコマンドが使えない。export PATH=$PATH:/opt/conda/binなどとして、環境変数のPATH/opt/conda/bin/を加えれば、pipコマンドやcondaコマンドが使えるようになる。

またDockerfile中でrootに切り替え、bashrootで起動するようにした上で、docker-compose.ymlで、

- GRANT_SUDO=yes

としていれば、jovyansudoが使えるようになる。

つまりGRANT_SUDO=yes かつUSER rootならjovyansudoを使えるということ

https://jupyter-docker-stacks.readthedocs.io/en/latest/using/recipes.html

参照

モジュールのインストールとユーザー権限について

conda installpip installrootjovyanどちらのユーザーで実行しても、Pythonのプログラミングには問題ないように思える。

しかし唯一jupyter_contrib_nbextensionsのインストールはjovyanで行ったほうがいい。

rootconda install -y jupyter_contrib_nbextensionsとしてしまうと、nbextensions関連のファイルがroot権限になってしまい、jupyter起動ユーザーがjovyanなため、jupyter上にnbextensionsのタブが現れても、どのエクステンションを有効にして書き換えても実際は権限の問題で書き換わらずに、F5で更新すると無効になってしまう。

だからjupyter_contrib_nbextensionsのインストールはDockerfilejovyanユーザーで予めやっておく。

RUN conda install -y jupyter_contrib_nbextensions

詳しくは jupyter notebookが使えるdockerにnbextensionsが導入できない

参照

About

Simple vscode project for development python and jupyter notebook in docker.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published