🐋

VSCodeからWSL2+Docker環境に接続する手順

2024/12/13に公開

本記事の概要

本記事ではVSCodeからWSL2+Docker開発環境への接続方法を解説します。

環境

本記事において前提としている環境を次に示します。

  • OS: Windows 11
    • バージョン: 23H2
    • 64ビットオペレーティングシステム、x64ベースプロセッサ
  • Visual Studio Code: 1.96.0
  • WSL2: 2.3.26.0
  • Docker: 27.3.1
  • Docker Compose: v2.29.7

VScodeからWSL2+Docker環境に接続することで得られる主要なメリット

  • 環境の再現性と共有が可能(環境の差異によるトラブルを防止)
  • VSCodeターミナルを使用してWSL2に対してコマンドを実行できる
  • プロジェクト固有の設定を反映させずに済むため、ローカルのVSCodeをクリーンな状態に保つことができる

準備

VSCode拡張機能のインストール

VSCodeに次の拡張機能をインストールします。
https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers
https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-wsl

コンテナ構成ファイルの作成

ディレクトリ構成

今回は例として次のディレクトリ構成とし、docker-compose.yml, Dockerfile, requirements.txt, devcontainer.jsonをそれぞれ作成します。

my-project/                # ルートディレクトリ
├── .devcontainer/         # devcontainer.jsonを配置するディレクトリ
│   └── devcontainer.json  # VSCode Remote Containers用の設定ファイル
├── docker-compose.yml     # docker-compose定義ファイル
├── Dockerfile             # dockerイメージビルド定義ファイル
├── requirements.txt       # Pythonパッケージ定義ファイル
└── workspace/             # コンテナとホスト間の共有ディレクトリ

docker-compose.ymlの作成

docker-compose.ymlを作成します。

docker-compose.yml
version: '3'

services:
  ml-workspace:
    build:
        context: .
        dockerfile: Dockerfile
    container_name: ml_container
    volumes:
      - ./workspace:/workspace
    ports:
      - "8888:8888"  # JupyterNotebook用

Dockerfileの作成

Dockerfileを作成します。

Dockerfile
# 公式のPython 3.12.8-slimをベースとして使用
FROM python:3.12.8-slim

# 環境変数の設定
ENV PYTHONUNBUFFERED=1
ENV PYTHONDONTWRITEBYTECODE=1
ENV TZ=Asia/Tokyo

# 必要なパッケージをインストール
RUN apt-get update && apt-get install -y \
    --no-install-recommends \
    build-essential \
    libopenblas-dev \
    liblapack-dev \
    libhdf5-serial-dev \
    libfreetype6-dev \
    libpng-dev \
    pkg-config \
    cmake \
    gfortran \
    tzdata \
    && ln -snf /usr/share/zoneinfo/$TZ /etc/localtime \
    && echo $TZ > /etc/timezone \
    && rm -rf /var/lib/apt/lists/*

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

# Pythonパッケージのインストール
COPY requirements.txt .
RUN pip install --no-cache-dir --upgrade pip && \
    pip install --no-cache-dir -r requirements.txt

# JupyterNotebookのポート設定
EXPOSE 8888

# Jupyter Notebook を実行するためのデフォルト コマンドを定義
CMD ["jupyter", "notebook", "--ip=0.0.0.0", "--no-browser", "--allow-root", "--NotebookApp.token=''"]

requirements.txtの作成

requirements.txtを作成します。

requirements.txt
numpy
pandas
scipy
scikit-learn
matplotlib
jupyter
ruff

devcontainer.jsonの作成

devcontainer.jsonを作成します。

devcontainer.json
{
    "name": "ML-WS",
    "dockerComposeFile": "../docker-compose.yml",
    "service": "ml-workspace",
    "forwardPorts": [8888],
    "workspaceFolder": "/workspace",

    "customizations": {
        "vscode": {
            "extensions": [
                "ms-python.python",
                "ms-python.vscode-pylance",
                "ms-toolsai.jupyter",
                "charliermarsh.ruff"
            ],
            "settings": {
                "python.defaultInterpreterPath": "/usr/local/bin/python",
                "editor.formatOnSave": true,
                "[python]": {
                    "editor.defaultFormatter": "charliermarsh.ruff"
                }
            }
        }
    },

    "remoteUser": "root"
}

devcontainer.jsonの書き方と主要なプロパティは次の記事で解説しています。
https://zenn.dev/enlog/articles/efadffc0bfc86b

コンテナへの接続から接続終了までの手順

準備

作成したmy-projectディレクトリをWSL2環境にコピーします。
WSL2のコマンドライン上で次のコマンドを実行します。

# パスは自身の環境に合わせる
cp -r /mnt/c/Users/username/Projects/my-project ~/Projects/

コンテナへの接続

  • VSCodeの画面左下の隅にある><をクリックしてリモートウィンドウを開く
  • 表示された一覧からWSLへの接続を選択する
  • ファイル > フォルダを開くからプロジェクトのディレクトリを開く
  • VSCodeの画面右下に表示されるコンテナーで再度開くをクリックする
  • 以上の操作をするとコンテナが起動する
  • 確認のためターミナルからPythonのバージョンを確認するコマンドを実行する
python --version

接続の終了方法

  • VSCodeの画面左下の隅にある開発コンテナ:{コンテナ名}をクリックする
  • 表示された一覧からリモート接続を終了するを選択する

まとめ

本記事では、VSCodeからWSL2+Docker環境への接続に必要な設定と手順を解説しました。

参考情報

https://learn.microsoft.com/ja-jp/training/modules/use-docker-container-dev-env-vs-code/

Discussion