1. はじめに
今回の内容は題名そのまんまです。簡潔に、忘備録も兼ねて要点だけを整理しようと思います。
前提として、Docker(for windows/Mac)やVSCodeはインストールしているものとします。この記事では、Dockerの詳しい解説はしませんのでご了承ください。
目次
2. anacondaをDockerで
FROM continuumio/anaconda3
RUN pip install --upgrade pip
WORKDIR /workdir
ENTRYPOINT ["jupyter-lab", "--NotebookApp.ip=0.0.0.0", "--port=8888", "--no-browser", "--allow-root", "--NotebookApp.token='mNFS7wbnEIm/Cd/PTe4h/cgboVXIUBszH5MxU8o7rFg'", "--NotebookApp.allow_origin='*'"]
CMD ["--notebook-dir=/workdir"]
# 上のコマンドが、作業ディレクトリーの名前を定義するものです。
# 例えば、`import os`して、`print(os.getcwd())`すると、/workdirが出てきます。
Dockerでanacondaを構築すると、Pythonのインタープリターがないので、そのままではコードを実行することができません。
このためカーネルを選択するとき、コンテナーで稼働している既存のJupyterサーバーに接続しなければなりません。
Jupyterサーバーに接続する時はトークンを求められるのですが、もしDockerfile記述時にトークンを指定しておかなければ、Jupyterが自動的に生成されるトークンを毎回調べなければなりません。
そのときは、コンテナーに対してjupyter notebook list
というコマンドを実行してトークンを調べることになります。
これが面倒なので、"--NotebookApp.token='mNFS7wbnEIm/Cd/PTe4h/cgboVXIUBszH5MxU8o7rFg'"
のようにDockerfile内に予め指定しておく方が吉です。
version: '3'
services:
filed-anaconda:
container_name: filed-anaconda
build: .
ports:
- "8888:8888"
volumes:
- type: bind
source: ./src
target: /workdir
上のcompose.ymlファイルにおいては、バインドマウントの指定であるvolumesプロパティが肝です。
何もしなければコンテナー内のディレクトリーとホストマシンのディレクトリーはつながりがないので、編集内容がコンテナー内のディレクトリーに反映されません。
バインドマウントはホストマシン側の作業ディレクトリーをコンテナー内のディレクトリーに反映させる処理です。
ソースコードはsrcディレクトリーに書いていて、バインドマウント先をworkdirディレクトリーにしています。
3. VSCodeでNotebook
まず、VSCodeでPythonを扱いやすくする拡張機能を入れます。これはどちらかといえば入れておいた方がいいものです。
次に、VSCodeでJupyter Notebookを扱うための拡張機能をインストールします。これは入れておくべき拡張機能です。
4. Kernelの選択
カーネルを選択する時は、各コードを実行する時か、カーネルを選択するアイコンをクリックすることで選択バーが出てきます。
今回は、Pythonの実行環境ではなく、すでにあるJupyterサーバーに接続することになります。
以下の画像の状態です。
Jupyterサーバーに接続するときは、tokenをクエリーパラメータとして指定した形でURLを入力します。
パスワードは特に設定していないので、パスワード入力を求められたら空のままエンターキーを押せば大丈夫です。
以下の画像のような状態です。
URLはhttp://localhost:8888/lab?token=mNFS7wbnEIm/Cd/PTe4h/cgboVXIUBszH5MxU8o7rFg
のような形になっています。
5. おわりに
今回は、細かい理屈は飛ばし飛ばしで環境構築の流れをまとめていきました。
もし、Dockerの詳しい理屈を知りたいのであれば、別のサイトを参照するか、わたしがまとめた記事を参照することをお勧めします。
(宣伝)
https://qiita.com/TechForGood/items/7cd5d7dc1ff06d6e1d9d