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。init
や bash
と表示される場合は wsl.conf
反映漏れです。
13. Docker サービスを自動起動 & 即時起動
sudo systemctl enable --now docker.service containerd.service
-
enable
… 次回ブート時に自動起動 -
--now
… その場で起動(再ログイン不要)
systemctl status docker
で Active: 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 で使えるようにする
前提チェック
Windows 側で一般的な NVIDIA ドライバを入れ、再起動後 PowerShell で
wsl -d <ディストリ名> --exec nvidia-smi
が通ることを確認。
この記事の 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 から自在に切り替えられる環境が整いました。お疲れさまでした!