🐋
VSCodeからWSL2+Docker環境に接続する手順
本記事の概要
本記事では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に次の拡張機能をインストールします。
コンテナ構成ファイルの作成
ディレクトリ構成
今回は例として次のディレクトリ構成とし、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
の書き方と主要なプロパティは次の記事で解説しています。
コンテナへの接続から接続終了までの手順
準備
作成したmy-project
ディレクトリをWSL2環境にコピーします。
WSL2のコマンドライン上で次のコマンドを実行します。
# パスは自身の環境に合わせる
cp -r /mnt/c/Users/username/Projects/my-project ~/Projects/
コンテナへの接続
- VSCodeの画面左下の隅にある
><
をクリックしてリモートウィンドウを開く - 表示された一覧から
WSLへの接続
を選択する -
ファイル > フォルダを開く
からプロジェクトのディレクトリを開く - VSCodeの画面右下に表示される
コンテナーで再度開く
をクリックする - 以上の操作をするとコンテナが起動する
- 確認のためターミナルからPythonのバージョンを確認するコマンドを実行する
python --version
接続の終了方法
- VSCodeの画面左下の隅にある
開発コンテナ:{コンテナ名}
をクリックする - 表示された一覧から
リモート接続を終了する
を選択する
まとめ
本記事では、VSCodeからWSL2+Docker環境への接続に必要な設定と手順を解説しました。
参考情報
Discussion