仕事でPythonを扱うことになり、自習のために私物のSynology製NASのDockerにJupyterLabを入れようとした際にいろいろとはまったので、構成方法を備忘録としてメモ。
まず、パッケージセンターからContainer Managerをダウンロードし、起動する。サイドメニューに、レジストリがあるのでこれを開き、検索ボックスに「Jupyter」と入力すると、「jupyter/datascience-notebook」が出てくるので、これをダウンロードする。

Container Managerのサイドメニューからイメージをクリックすると、ダウンロード済みのDockerイメージが表示される。

jupyter/datascience-notebookを選択した状態で実行ボタンをおすと、コンテナ作成画面が表示される。
コンテナ名は好きに変えてOK。NASを再起動する度にJupyterLabを起動するのが面倒なら自動再起動を有効にすること。
設定が終わったら次へボタンを押す。

詳細設定画面が表示される。
ポート番号は、他のサービス等と被らないようにすればOK。
ボリューム設定は、JupyterLabで書いたコードやファイルをどこの共有フォルダにマッピングするかなので自由に。ただ、マウントパスについてはいろいろなサイトでは「/home/jovyan/work」とするよう案内されているが、この設定だとJupyterにて作成したコードファイルがNAS側から見えなかった。
これは、jupyter/datascience-notebookのイメージのディレクトリ設定では、コンテナのホーム位置が「/home/jovyan/」となっているため、コンテナ内で作成されたworkフォルダはNAS側から見えるが、作成したコードが保存される「/home/jovyan/code」フォルダはマッピングの対象外となっているためである。
よって、「/home/jovyan/code」とすることでJupyterLabで作成したファイルをNAS側から見られるようになる。
また、Jupyterの設定ファイル(jupyter_notebook_config.py)は「/home/jovyan/.jupyter」以下に生成されるため、これもマウントしておく。

環境変数には「JUPYTER_ENABLE_LAB」を追加し、値を「yes」とする。
設定が終わったら、次へ進む。

要約画面が表示されるので、設定に誤りがないことを確認し、完了ボタンを押す。

Container Managerのサイドメニューからコンテナをクリックすると、作成済みのコンテナが表示され、ここにjupyter/datascience-notebookが表示されているはず。
jupyter/datascience-notebookをクリックすると各種情報が表示される。全般・統計・ログの内からログを選択する。
Containerが起動後、少し待つとログにtokenが表示される。検索ボックスに「token」と入力すると、該当ログ行を表示できる。このtokenは、JupyterLabへ初回ログインする際に必要なので、「token=」より後ろの部分をコピーしておく。

NASと同じネットワークにつながった端末のブラウザにNASのIPアドレスと先ほど設定したポート番号を入力しアクセスする。先ほどのログにはIPアドレスとして127.0.0.1が表示されるが、これをブラウザに入力してもJupyterLabにアクセスできないので注意。
JupyterLabにアクセスできると表示されるのが、下のページ。一番上の「Password or token」欄に先ほどコピーしたtokenを入れればログインできるが、毎回tokenをコピーするのは面倒なので、一番下のToken欄にtokenを貼り付け、任意のパスワードを入力する。

これで、ブラウザからJupyterを実行することができるようになる。NASのネットワークにVPNを張れば、外出先からVPN接続してタブレットやスマホからログインすることもできる。
Jupyterはデフォルトでは英語のみなので、日本語化したければ、画像のように以下のコードを実行すれば、Languageに日本語が出てくる。
pip install jupyterlab-language-pack-ja-JP

また、コード入力中はTabキーを押すことで候補を表示してくれるが、タブレットやスマホではTabキーがなかったりするので、常時候補を表示してほしかったりする。
そのときは、設定メニュー→設定→Code Completionと進み、「Enable autocompletion」にチェックを入れることで、常時候補を表示してくれるようになる。

コメント