WSL2のUbuntuでDockerを使う方法は、大きく分けて2つあります。
1. WindowsにDocker DesktopをインストールしてWSL2と連携する
2. Ubuntu内にDocker Engineを直接インストールする
どちらでもDockerは利用できますが、手軽さを重視するなら Docker Desktop+WSL2連携 が分かりやすい方法です。
方法1:Docker Desktop+WSL2連携
Windows側にDocker Desktopをインストールし、UbuntuからDockerを利用する方法です。
構成は次のようになります。
Windows
└─ Docker Desktop
↓ WSL Integration
WSL2 Ubuntu
↓
dockerコマンド
Docker Engineの実行や管理はDocker Desktop側が担当するため、Ubuntu内でDockerデーモンを個別に管理する必要がありません。
Docker Desktop側の設定
Docker Desktopをインストールしたら、
Settings
↓
General
↓
Use the WSL 2 based engine
を有効にします。
次に、
Settings
↓
Resources
↓
WSL Integration
を開き、利用するUbuntuを有効にします。
例えば、
Ubuntu ON
とします。
設定後、Ubuntuを開いて確認します。
docker --version
さらに、
docker run hello-world
が正常に動けば、WSL2 UbuntuからDockerを利用できています。
Docker Desktopを使うメリット
この方式では、
Dockerデーモンの起動
停止
アップデート
WSL2との連携
コンテナの確認
などをDocker Desktop側で管理できます。
特にWindows+WSL2環境では、
Ubuntu側にDocker Engineを個別インストールしなくてもdockerコマンドを利用できる
のが大きなメリットです。
Dockerに慣れていない場合や、WindowsとWSL2を併用している場合はこちらの方が扱いやすいでしょう。
方法2:Ubuntu内へDocker Engineを直接導入
Docker Desktopを使わず、WSL2 UbuntuへDocker Engineを直接インストールすることもできます。
構成は、
Windows
└─ WSL2 Ubuntu
├─ Docker Engine
├─ Docker CLI
└─ containerd
となります。
こちらではUbuntu自身がDockerデーモンを動かします。
導入には、主に次の作業が必要です。
Docker公式APTリポジトリを登録
↓
docker-ce等をインストール
↓
systemdを有効化
↓
WSL2を再起動
↓
Dockerサービスを起動
Docker Desktopを使わず、Linux環境として独立してDockerを管理したい場合はこちらが向いています。
systemdが重要
Ubuntu内へDocker Engineを直接導入する場合、Dockerサービスの管理にsystemdを使用する構成が一般的です。
確認するには、
systemctl status
または、
systemctl status docker
を使用します。
systemdが利用できない状態では、
Docker Engineはインストールした
↓
しかしDockerデーモンが起動していない
↓
dockerコマンドで接続できない
という状態になることがあります。
そのため、直接導入方式ではDockerのインストールだけでなく、サービスの起動管理まで考える必要があります。
どちらを選べばよい?
Windows上のWSL2 UbuntuでDockerを使うだけなら、まずは、
Docker Desktop+WSL2 Integration
がおすすめです。
比較すると次のようになります。
| 項目 | Docker Desktop | Ubuntuへ直接導入 |
|---|---|---|
| 導入 | 簡単 | やや手間 |
| Dockerデーモン管理 | Docker Desktop | Ubuntu |
| systemd設定 | 基本的に意識しなくてよい | 必要になる場合あり |
| Windowsとの連携 | 強い | 基本的にUbuntu側で完結 |
| GUI管理 | あり | 基本なし |
| 向いている用途 | Windows+WSL2 | Linuxとして独立運用 |
今回の環境ではDocker Desktopがおすすめ
例えば現在のWSL2 Ubuntuで、
docker --version
を実行して、
command not found
となる場合、まだDockerコマンドが利用できる状態ではありません。
さらにsystemdも正常に利用できていない環境なら、Ubuntu内へDocker Engineを直接導入すると、
Dockerインストール
+
systemd設定
+
Dockerサービス管理
まで必要になります。
このような場合は、Windows側へDocker DesktopをインストールしてWSL Integrationを有効化する方が簡単です。
注意:両方入れる必要はない
Docker Desktopを使う場合、通常はUbuntu内へ別途Docker Engineをインストールする必要はありません。
つまり、
Windows
Docker Desktop
↓
WSL Integration
↓
Ubuntuからdockerを利用
で十分です。
Docker Desktopを使っているのに、さらにUbuntuへDocker Engineをインストールすると、Dockerデーモンが複数存在して「どちらへ接続しているのか」が分かりにくくなることがあります。
最初はどちらか一方に統一した方が管理しやすいでしょう。
まとめ
WSL2 UbuntuでDockerを利用する方法は、
Docker Desktop+WSL2連携
と、
UbuntuへDocker Engineを直接導入
の2通りがあります。
Windows+WSL2環境で手軽に使いたい場合は、
Docker DesktopをWindowsへインストールし、WSL IntegrationでUbuntuを有効にする方法がおすすめです。
一方、Docker Desktopを使わずUbuntu側だけでDockerを完結させたい場合は、Docker Engineを直接導入します。
その場合は、Dockerのインストールだけでなく、systemdやDockerデーモンの起動管理も必要になる点に注意が必要です。

