お疲れ様です。
最近は業務でDockerを使用することも増え、個人的やっている内容もDocker使えればみたいな場面が増えてきました。
そういう背景から勉強も兼ねてDockerの環境を構築していたのでその備忘録です。
基本的には参考サイトのリンク集です。 Linuxの知識はそれほど無いのでいろんな記事を参考にさせていただきました。
環境構築
Visual Studio Codeのインストール
こちらからインストールできます。(既にインストール済みの場合はスキップでOK)
code.visualstudio.com
インストールできたら最低限WSLの拡張機能は入れておきましょう。

WSLのセットアップ
公式ドキュメントを参考にWSLのインストールをします。
learn.microsoft.com
PowerShellを起動し下記のコマンドを入力することでインストールできます。
wsl --install
インストールできるディストリビューションは下記のコマンドで確認できます。install時に指定することが可能です。指定しない場合はUbuntuの最新バージョン(現在だと24.04)がインストールされます。
wsl --list --online

インストールできたら、一旦Windowsを再起動し、その後Ubuntuを立ち上げます。Ubuntuのユーザの作成など初期設定を済ませたら次に進みます。
Dockerのインストール
ここからはUbuntuを立ち上げての操作になります。
公式のドキュメントに記載されているUbuntuでのインストールコマンドを順に実行しました。
docs.docker.com
記事執筆時点(2025年2月)の実行コマンドを引用しておきます。もしかすると公式ドキュメントが改定されているかもなので、そちらを参照するのが確実だとは思います。
古いバージョンのパッケージのアンインストール(競合を防ぐため)
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done
Docker公式のGPGキーを追加
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.ascaptリポジトリを追加
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get updateDockerをインストール
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
NVIDIA Container Toolkitのインストール
こちらも公式ドキュメント記載のインストールコマンドを使用しました。
docs.nvidia.com
例によって記事執筆時点(2025年2月)の実行コマンドを引用しておきます。
GPGキーの追加+aptリポジトリを追加
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
&& curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.listパッケージリストの更新
sudo apt-get update
NVIDIA Container Toolkitをインストール
sudo apt-get install -y nvidia-container-toolkit
下記のコマンドで正常にGPUを認識するか確認ができます。nvidia-smiまで正常に動けばOKです。
docker run --rm --gpus all nvidia/cuda:11.8.0-cudnn8-runtime-ubuntu22.04 nvidia-smi

動作確認
準備
UbuntuからコマンドでVSCodeを開くか、VSCodeからWSLにアクセスし、WSL上のフォルダを開いた状態にします。
VSCodeの拡張機能でDev Containersをインストールしておきます。

コンテナの作成
VSCodeで作業フォルダ内にdevcontainerとDockerFileを作成します。「.devcontainer」フォルダ内にdevcontainer.json、「.devcontainer」フォルダと同じ階層にDockerFileを設置しています。

- devcontainer.json "build"の項目でこの後紹介するDockerFileを指定しておきます。また、"runArgs": ["--gpus", "all"]の部分では使用するGPUを割り当てますが、基本的にallで大丈夫だと思います。
{
"name": "cuda",
"build": {
"dockerfile": "../Dockerfile"
},
"settings": {
"terminal.integrated.defaultProfile.linux": "bash"
},
"extensions": [
"ms-python.python",
"kevinrose.vsc-python-indent",
"mhutchie.git-graph",
"eamodio.gitlens",
"ionutvmi.path-autocomplete"
],
"forwardPorts": [8000],
"remoteUser": "root",
"runArgs": ["--gpus", "all"]
}
- DockerFile
FROMの部分でベースイメージを指定しています。今回はバージョン11.8のcudaを指定しています。それ以外のバージョンも選べるので必要に応じて切り替えてください。
(Docker Hub: https://hub.docker.com/r/nvidia/cuda/tags)
あとはPythonやGitのインストールなど、こちらも必要に応じて書き換えると良いと思います。
FROM nvidia/cuda:11.8.0-cudnn8-runtime-ubuntu22.04
# Set non-interactive mode for apt-get
ENV DEBIAN_FRONTEND=noninteractive
# Install system dependencies
RUN apt-get update && apt-get install -y \
python3 \
python3-pip \
python3-venv \
git \
&& rm -rf /var/lib/apt/lists/*
# Set Python3 as default
RUN ln -s /usr/bin/python3 /usr/bin/python
# Upgrade pip
RUN python -m pip install --upgrade pip
# Default command
CMD ["/bin/bash"]
ここまで準備したらVSCodeからコンテナで再度開く(Reopen in Container)をクリックしてコンテナを立ち上げます。エラーが出なければ成功です。

実際に動かしてみる
nvidia-smiも問題なく通り、GPUを認識しています。
また、試しにPytorchをインストールして確認してみましたがこちらも大丈夫そうですね。

作成したファイル(Dockerfile等)はこちらに保存しています。 github.com
参考サイト
最後に参考にさせていただいたサイトを載せておきます。
インストール関係
WSL関係
エラー対処 (WSLではなくWindows側のDockerを参照しようとして発生するエラー)