LoginSignup
3
2

え?anacondaをDockerで環境構築できて、しかもVSCodeでコーディングが完結しちゃうんですか?

Last updated at Posted at 2024-04-24

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内に予め指定しておく方が吉です。

compose.yml
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を扱いやすくする拡張機能を入れます。これはどちらかといえば入れておいた方がいいものです。

image.png

次に、VSCodeでJupyter Notebookを扱うための拡張機能をインストールします。これは入れておくべき拡張機能です。

image.png

4. Kernelの選択

カーネルを選択する時は、各コードを実行する時か、カーネルを選択するアイコンをクリックすることで選択バーが出てきます。
今回は、Pythonの実行環境ではなく、すでにあるJupyterサーバーに接続することになります。
以下の画像の状態です。

image.png

Jupyterサーバーに接続するときは、tokenをクエリーパラメータとして指定した形でURLを入力します。
パスワードは特に設定していないので、パスワード入力を求められたら空のままエンターキーを押せば大丈夫です。
以下の画像のような状態です。
URLはhttp://localhost:8888/lab?token=mNFS7wbnEIm/Cd/PTe4h/cgboVXIUBszH5MxU8o7rFgのような形になっています。

image.png

5. おわりに

今回は、細かい理屈は飛ばし飛ばしで環境構築の流れをまとめていきました。
もし、Dockerの詳しい理屈を知りたいのであれば、別のサイトを参照するか、わたしがまとめた記事を参照することをお勧めします。

(宣伝)
https://qiita.com/TechForGood/items/7cd5d7dc1ff06d6e1d9d

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2