1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

vscode devcontainer + dockerで作成するお手軽Jupyter環境

Last updated at Posted at 2024-12-31

概要

毎回、新しいプロジェクトが始まると、環境構築のたびにパッケージの管理とかがめんどくさかった
→とりあえず、超シンプルにこれで良いやろ、というjupyter環境を作ってこの1年くらい利用して、結構よかった。
→テンプレレポにまとめた。

※本記事はwindowsを想定していますが、macでも行けるはずです。

誰もが通る環境構築の悩み...

まずは、ローカルpython直入れしてみて...

  • 〇 たくさんリファレンスがあってやりやすい
  • × パッケージの依存関係コンフリクトなどで仮想環境が壊れるとゲームオーバー

慣れてくると、pyenvやcondaなどの仮想環境を使ってみて...

  • 〇 仮想環境が壊れても作り直せる
  • × 結局複数の仮想環境を変更するのが面倒。間違えてrootにパッケージ入れて萎える

もう疲れてくると、コンテナでjupyter環境構築してみて...

  • 〇 仮想環境いつでも飛ばせる。プロジェクト毎にDockerfileを通じて紐づけできる
  • × CLIを触るのが面倒。あと、いちいちjupyterのリンク押して飛ぶのも面倒。そもそもjupyterじゃなくてVSCodeで開発したい

紹介する方法の楽なところ

IDEとしてvscodeを使える←結構最大のメリット

  • わざわざjupyterのブラウザ画面を触る必要がない
  • vscodeの豊富な拡張機能を使える

GUIで操作できる

  • remoteのコンテナ接続はポチポチで完了

テンプレ化して使いまわせる

  • 一つの.devcontainerフォルダを使いまわすだけ
  • もしカスタマイズしたければ、Dockerfileを通じて自由にカスタムできる

前準備(もう完了している人はスキップでOK)

1.vscodeとdockerをインストール

2.vscodeの拡張機能をインストール

導入する拡張機能

導入方法や他にあった方が良い拡張機能等はこちら参照

方法

1. vscodeでプロジェクトフォルダを開く

image.png

2. ".devcontainer"というフォルダを作り、その中に以下の4つのファイルを作る。

※このrepoをcloneする形でもOK
最終的なディレクトリ構造は下記のようになる

project_root
└ー.devcontainer
    ├-devcontainer.json
    ├-docker-compose.yml
    ├-Dockerfile
    └ーrequirements.txt

1. "devcontainer.json"

devcontainer.json
{
	"dockerComposeFile": "./docker-compose.yml", // docker-compose file
	"service": "jupyter", // service name in docker-compose file
	"workspaceFolder": "/home/jovyan/work", // root directory of the project
	"forwardPorts": [8888],
	"remoteUser": "jovyan", // default user, as the same in the Dockerfile
	"customizations": {
		"vscode": {
			"settings": {
				"python.defaultInterpreterPath": "/opt/conda/bin/python" // python interpreter path
			},
			"extensions": [ // vscode extensions
				"ms-python.python",
				"ms-python.vscode-pylance",
				"ms-toolsai.jupyter"
			]
		}
	}
}

これが、devcontainerの設定ファイルになります。

2. "docker-compose.yml"

docker-compose.yml
version: '3'
services:
  jupyter:
    build:
      context: .
      dockerfile: ./Dockerfile
    ports:
      - '8888:8888'
    volumes:
      - ../:/home/jovyan/work/

複数コンテナを管理するファイルです。たまに、コンテナを複数作りたくなった時には、ここに設定を記述します。

3. "Dockerfile"

Dockerfile
FROM quay.io/jupyter/scipy-notebook:latest

# Move requiremnts.txt to work directory
COPY --chown=${NB_UID}:${NB_GID} ./requirements.txt ${HOME}/work/requirements.txt

# Install requirements
RUN pip install -r ${HOME}/work/requirements.txt && \
    pip cache purge

RUN fix-permissions "${CONDA_DIR}" && \
    fix-permissions "/home/${NB_USER}"


WORKDIR "${HOME}"

元々、jupyterが公式で公開しているイメージを基本的に利用。今回はscipy-notebook:latestをベースとして使用しているが、torch版とかもあるので、必要に応じて一行目を書きかえる。

※稀にpip conda conflictが起こるときがあるが、その時はDockerfileに condaでインストールすべきパッケージを RUN conda install hogehogeで記述してください。

4. "requirements.txt"

requirements.txt
numpy==2.2.1
Bottleneck==1.4.2
pandas==2.2.3
pydantic==2.10.4
fastapi==0.115.6
scikit-learn==1.6.0

追加したいパッケージがあれば基本ここに加筆していく

コンテナで開く

左下のマークをクリックして、「コンテナーで再度開く」を選択する
image.png

もしくは、何かファイルを変更した場合にはVSCodeでコマンドパレットを開いて(ctrl+shift+P)、rebuild and reopen in containerを選択すれば、コンテナリビルドが行われます。

3. 後は適当に.ipynbファイルを作って動かせるはず!

※もしjupyter動かすときに「カーネルの選択」ダイアログが表示された場合
「Python環境」→「base(Python hogehoge)」をクリックしていけば使えるはずです。

image.png
image.png

おわりに

後で確認したら結構もうすでに記事があった...
が、なぜか、jupyter-stacksをベースにpipでパッケージを導入できるようにした形でDockerfileを構築している記事は見かけなかったので、そういうニーズがある(入れたいパッケージが結構変わるけど、そのたびにコンテナビルドに時間がかかるのは嫌な)人にはおすすめです!

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?