VSCodeでDocker環境を使ったデータ分析環境(Python/Jupyter)の構築方法

## はじめに

この記事では、VSCodeとDockerを使用して、Python/Jupyter開発環境を構築する方法を説明します。この環境では、以下のような機能が利用可能です：

- Jupyter Notebookの実行
- 必要なPythonライブラリ（numpy, pandas, scikit-learn等）の利用
- VSCode上での直接的なノートブック編集

## 必要な環境

- Docker
- Docker Compose
- Visual Studio Code
- VSCode拡張機能: Remote - Containers

## プロジェクトの構造
```

DS_IPYNB/
├── .devcontainer/
│   └── devcontainer.json
├── docker-compose.yml
├── Dockerfile
├── main.ipynb
├── main.py
├── requirements.txt
└── workspace.code-workspace

```

## 環境構築手順

### 1. プロジェクトの作成

まず、プロジェクトディレクトリを作成し、必要なファイルを作成します：

```bash
mkdir DS_IPYNB
cd DS_IPYNB
mkdir .devcontainer
touch .devcontainer/devcontainer.json
touch docker-compose.yml
touch Dockerfile
touch main.ipynb
touch main.py
touch requirements.txt
touch workspace.code-workspace
```

### 2. 設定ファイルの作成

#### `.devcontainer/devcontainer.json`

```json
{
    "name": "Python Data Science",
    "dockerComposeFile": "../docker-compose.yml",
    "service": "jupyter",
    "workspaceFolder": "/workspace",
    "customizations": {
        "vscode": {
            "extensions": [
                "ms-python.python",
                "ms-toolsai.jupyter",
                "ms-python.vscode-pylance"
            ],
            "settings": {
                "python.defaultInterpreterPath": "/usr/local/bin/python",
                "python.linting.enabled": true,
                "python.linting.pylintEnabled": true,
                "jupyter.alwaysTrustNotebooks": true,
                "jupyter.notebookFileRoot": "${workspaceFolder}",
                "jupyter.jupyterServerType": "local",
                "python.analysis.typeCheckingMode": "basic"
            }
        }
    },
    "forwardPorts": [8888],
    "postCreateCommand": "python -m ipykernel install --user --name python3 --display-name 'Python 3'"
}
```

#### `docker-compose.yml`

```yaml
version: '3.8'

services:
  jupyter:
    build: .
    volumes:
      - .:/workspace
    ports:
      - "8888:8888"
    environment:
      - JUPYTER_ENABLE_LAB=yes
    command: jupyter lab --ip=0.0.0.0 --allow-root --no-browser --NotebookApp.token='' --NotebookApp.password=''
```

#### `Dockerfile`

```dockerfile
FROM python:3.9-slim

WORKDIR /workspace

# システムの依存関係をインストール
RUN apt-get update && apt-get install -y \
    build-essential \
    curl \
    software-properties-common \
    git \
    && rm -rf /var/lib/apt/lists/*

# requirements.txtをコピーしてパッケージをインストール
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# Jupyterのカーネルを明示的にインストール
RUN python -m ipykernel install --user --name python3 --display-name "Python 3"

EXPOSE 8888

# 作業ディレクトリを設定
WORKDIR /workspace
```

#### `requirements.txt`

```plaintext
jupyter==1.0.0
jupyterlab==4.0.7
numpy==1.24.3
pandas==2.1.1
matplotlib==3.8.0
seaborn==0.13.0
scikit-learn==1.3.1
polars==0.19.8
plotly==5.17.0
ipykernel==6.25.2
```

### 3. 環境の構築と起動

以下のコマンドを順番に実行します：

```shellscript
# コンテナのビルドと起動
docker-compose up --build -d


```

### 4. VSCodeでの開発環境の設定

1. VSCodeの左下にあるアイコンをクリックします
これ↓
![スクリーンショット 2024-10-31 0.25.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3364428/506db214-d9e7-05a9-4782-330fa36b0626.png)



2. **コンテナーで再度開く**を選択します
![スクリーンショット 2024-10-31 0.27.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3364428/80556a96-231c-3683-efb4-4e50bfe798d2.png)

3. コンテナのビルドが完了するまで待ちます


### 5. Jupyter Notebookの使用

1. VSCodeで`.ipynb`ファイルを開きます
2. 右上の"Select Kernel"をクリックします
3. "Python 3"を選択します

実際に実行して確認します。
![スクリーンショット 2024-10-31 0.22.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3364428/bb0479ec-29c8-736d-91ec-cb3b5fce2b26.png)

## トラブルシューティング

### カーネルが見つからない場合

以下のコマンドでコンテナを再ビルドします：

```shellscript
docker-compose down
docker-compose up --build -d
```

その後、VSCodeを再起動し、"Rebuild Container"を実行します。

### パッケージのインポートエラーが発生する場合

1. コンテナ内でパッケージが正しくインストールされているか確認：


```shellscript
docker-compose exec jupyter pip list
```

2. 必要に応じてコンテナを再ビルド：


```shellscript
docker-compose down --rmi all
docker-compose up --build -d
```

## まとめ

この設定により、以下のような開発環境が構築されます：

- VSCode上でJupyter Notebookを直接編集可能
- 必要なPythonパッケージが事前インストール済み
- Docker環境による開発環境の隔離
- VSCodeの機能（コード補完、デバッグ等）を最大限活用可能


この環境を使用することで、効率的なデータ分析や機械学習の開発が可能になります。