4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【GPU対応】WSL2 に Docker を入れる手順

Last updated at Posted at 2025-07-11

1. パッケージインデックスを最新化する

sudo apt update

Ubuntu のパッケージ一覧を更新します。公式リポジトリから最新のメタデータを取得し、後続の apt install をキャッシュミスなく実行できるようにします。

2. 必要なユーティリティをインストール

sudo apt install -y ca-certificates curl lsb-release

Docker の GPG 鍵やリポジトリ追加に必要なツールをまとめて導入します。

パッケージ 用途
ca-certificates HTTPS 通信で証明書検証を行う
curl URL からデータを取得・転送
lsb-release OS バージョン/コードネームをスクリプトから参照

3. 鍵リング用ディレクトリを作成

sudo install -m 0755 -d /etc/apt/keyrings

APT の信頼済み GPG 鍵を格納する公式推奨パス /etc/apt/keyrings を確実に用意します。install -d は「mkdir + chmod」のワンライナー版。

4. Docker 配布元の GPG 公開鍵を取得

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo tee /etc/apt/keyrings/docker.asc >/dev/null
  • curl -fsSL … 失敗時に非 0 を返しつつ標準出力へ
  • tee … 管理者権限で鍵ファイルへ直書き
  • >/dev/null … 画面出力を抑制してワンライナーの可読性を保持

5. 鍵ファイルのパーミッションを緩める

sudo chmod a+r /etc/apt/keyrings/docker.asc

APT が 非 root で動作する場合に備え、誰でも読み取り可能にしておきます。

6. Docker 公式リポジトリを追加

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

1 行で アーキテクチャ自動判定 (dpkg --print-architecture) と ディストロのコードネーム取得 (/etc/os-release) を行い、APT に新リポジトリを登録します。

7. もう一度インデックス更新

sudo apt update

追加したリポジトリを含めた最新パッケージリストを取得します。

8. Docker Engine 本体と周辺ツールを導入

sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
パッケージ 内容
docker-ce Docker Engine 本体
docker-ce-cli CLI (docker)
containerd.io コンテナランタイム
docker-buildx-plugin マルチプラットフォーム BuildKit
docker-compose-plugin v2 系 Compose (docker compose)

9. 任意:現在のユーザーを docker グループへ追加

sudo usermod -aG docker $USER

再ログイン後は sudo なしで docker run … が実行可能になります。

10. WSL2 で systemd を有効化

printf "[boot]\nsystemd=true\n" | sudo tee /etc/wsl.conf >/dev/null

WSL の設定ファイルに systemd=true を追記し、次回起動から PID 1 が systemd になります。

11. WSL 環境を再起動

wsl --shutdown

PowerShell 側で発行して WSL2 の仮想マシンをクリーンに再起動します。

12. systemd が動いているか確認

ps -p 1 -o comm=

PID 1 のコマンド名が systemd なら OK。initbash と表示される場合は wsl.conf 反映漏れです。

13. Docker サービスを自動起動 & 即時起動

sudo systemctl enable --now docker.service containerd.service
  • enable … 次回ブート時に自動起動
  • --now … その場で起動(再ログイン不要)

systemctl status dockerActive: active (running) と表示されれば完了です。

Buildx プラグインが見つからない場合

docker compose up --build 実行時に

fork/exec /usr/local/lib/docker/cli-plugins/docker-buildx: no such file or directory

とエラーになる場合は、Buildx の実体が /usr/libexec/docker/cli-plugins にあり、Docker CLI が先に /usr/local/... を探しているためです。以下 3 行で解決します。

# 1) プラグインの実体を確認 (表示されれば OK)
dpkg -L docker-buildx-plugin | grep '/docker-buildx$'

# 2) CLI プラグイン用ディレクトリを作成(なければ)
sudo install -d /usr/local/lib/docker/cli-plugins

# 3) buildx の実体をシンボリックリンク
sudo ln -sf /usr/libexec/docker/cli-plugins/docker-buildx \
            /usr/local/lib/docker/cli-plugins/docker-buildx

確認:

docker buildx version   # バージョンが表示されれば認識完了

追記:NVIDIA GPU を Docker で使えるようにする

前提チェック

  1. Windows 側で一般的な NVIDIA ドライバを入れ、再起動後 PowerShell

    wsl -d <ディストリ名> --exec nvidia-smi
    

    が通ることを確認。

  2. この記事の Docker 本体の導入(systemd 有効化まで)が済んでいること。

14. NVIDIA Container Toolkit 用リポジトリを登録

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 >/dev/null

NVIDIA 社公式の鍵を Keyring に保存し、その鍵で署名された apt リポジトリを一発追加します。

15. パッケージリストを更新

sudo apt update

ここで Toolkit のメタデータが取れるようになります。

16. NVIDIA Container Toolkit を導入

sudo apt install -y nvidia-container-toolkit

nvidia-container-toolkit は GPU デバイスを OCI Runtime にバインドしてくれる shim とユーティリティ一式です。

17. Docker に NVIDIA ランタイムを組み込む

sudo nvidia-ctk runtime configure --runtime=docker

/etc/docker/daemon.json"runtimes": { "nvidia": { … } } が追記され、--gpus フラグが有効化されます。

18. Docker デーモンを再起動

sudo systemctl restart docker

設定が反映され、以降のコンテナ起動で GPU が渡せるようになります。

19. 動作確認

docker run --rm --gpus all nvidia/cuda:12.4.0-base-ubuntu22.04 nvidia-smi

ホストと同じ GPU 情報が表示されれば成功です(ドライバ/CUDA バージョン、利用率など)。


これで CPU 版・GPU 版コンテナ を WSL2 上の Ubuntu から自在に切り替えられる環境が整いました。お疲れさまでした!

4
3
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
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?