はじめに
Windows で Docker 開発環境を作る方法は、大きく分けて 2 つあります。
- Docker Desktop(WSL2 バックエンド) を使う
- WSL2 上の Ubuntu に Docker Engine を直接インストール する
どちらでも「WSL2 の Ubuntu から docker コマンドでコンテナを動かす」という体験は同じですが、アーキテクチャ・ライセンス・リソース消費が大きく異なります。この記事では、両者の違いとそれぞれの利点を整理し、どちらを選ぶべきかの判断基準をまとめます。
対象読者
- Windows + WSL2 で開発していて、Docker の導入方式を迷っている人
- 会社の支給 PC で Docker Desktop のライセンスが気になっている人
- 開発環境のメモリを少しでも節約したい人
1. まず構成図で理解する
Docker Desktop(WSL2 バックエンド)の場合
Docker Desktop を WSL2 バックエンドで動かすと、docker-desktop(ブートストラップ用)と docker-desktop-data(データ保存用)という 2 つの専用 WSL ディストリビューションが自動作成され、その中で dockerd が動きます。Ubuntu からは WSL インテグレーション経由でこのエンジンを「借りている」形です。
WSL2 上の Ubuntu に Docker Engine を直接入れた場合
こちらは dockerd 自体が Ubuntu 内の普通の Linux サービスとして動きます。余計なものは何も挟まりません。
2. 違いの比較表
| 観点 | Docker Desktop(WSL2 backend) | Docker Engine 直(Ubuntu on WSL2) |
|---|---|---|
| dockerd の居場所 |
docker-desktop 専用ディストロ内 |
Ubuntu 内の通常プロセス(systemd 管理) |
| イメージ保存先 |
docker-desktop-data ディストロ |
Ubuntu の /var/lib/docker(= Ubuntu の vhdx 内) |
| ライセンス | 従業員 250 人以上または年間売上 1,000 万ドル以上の組織では有償(Pro / Team / Business) | Docker Engine / Moby はオープンソースのまま。商用でも無料 |
| メモリ消費 | 起動するだけでコンテナ 0 台でも約 1.3GB 追加される計測例あり。常駐プロセス+GUI 分が上乗せ | dockerd と containerd だけ。追加の常駐物なし |
| GUI | あり(コンテナ/イメージ/ログの閲覧、拡張機能) | なし(必要なら Portainer 等をコンテナで立てる) |
| 起動・自動起動 | Windows ログイン時に自動起動(設定可能) | systemd 有効化で systemctl enable --now docker により自動起動 |
| アップデート | 自動(GUI 経由)。不意の UI 変更やバグに巻き込まれることがある |
apt で自分のタイミング。意図しない変更が入らない |
| Windows 側からの docker コマンド | PowerShell からそのまま使える | 基本は Ubuntu 内から(Windows に別途 CLI + コンテキスト設定すれば可能) |
| Kubernetes | ワンクリックで有効化 | kind / k3s / minikube などを自分で立てる |
| 付随機能 | Docker Scout、Extensions、Build Cloud 連携など | なし(必要なものだけ自分で入れる) |
| メモリ・CPU の上限 | Docker Desktop 自体に上限設定はなく、.wslconfig で WSL2 VM 全体を制限する |
同じく .wslconfig で制限 |
| トラブル時の調査 | Desktop 側の診断ツール+ WSL 側の二重構造になりがち |
systemctl status / journalctl だけ。Linux の知識がそのまま使える |
3. Docker Desktop の利点・向いている人
利点
- セットアップが圧倒的に簡単:インストーラーを入れて WSL インテグレーションを有効にするだけ
- GUI ダッシュボード:コンテナの状態・ログ・イメージを視覚的に確認でき、初学者や GUI 好きに優しい
- Windows / WSL / macOS で操作感が統一される(チームに Mac ユーザーがいる場合に説明が楽)
- Kubernetes のワンクリック有効化、Docker Scout による脆弱性スキャン、Extensions など付随機能が豊富
- 複数 WSL ディストロから同じエンジンを共有できる
向いている人
- Docker 初学者、まず手軽に始めたい人
- GUI でコンテナを管理したい人
- 個人・小規模組織(従業員 250 人未満かつ売上 1,000 万ドル未満)や教育・非商用 OSS で、無償条件に収まっている人
- 会社が Docker Business 等のサブスクリプションを契約済みの人
4. Docker Engine 直インストールの利点・向いている人
利点
- ライセンスを気にしなくてよい:有償化の対象はあくまで Docker Desktop であり、Docker Engine / Moby プロジェクトは従来通りオープンソース。大企業の支給 PC でも稟議なしで導入しやすい
- 軽量:Docker Desktop は起動だけで約 1.3GB のメモリを追加消費する計測例がある。直インストールなら dockerd + containerd だけなので、ノート PC のメモリをコンテナ本体に回せる
-
本番環境に近い:本番の Linux サーバーと同じく
systemctlでサービス管理し、/var/lib/dockerにデータが置かれる。運用知識がそのまま本番で活きる - 構成が単純で壊れにくい:「Windows 側の GUI アプリ → 専用ディストロ → Ubuntu」という 3 層ではなく 1 層なので、不調時の切り分けが速い
-
アップデートを自分でコントロールできる:
aptの更新タイミングは自分で決められるため、勝手に挙動が変わらない
向いている人
- 大企業など Docker Desktop の有償条件に引っかかる組織の人
- メモリを節約したい人(WSL2 上で複数コンテナを常時動かすなど)
- Linux のサービス管理・運用スキルを磨きたい人
- 再現性重視で、環境をコード(セットアップスクリプト)で管理したい人
5. 判断フローチャート
ライセンス条件や料金(Pro / Team / Business)は改定されることがあるため、導入前に必ず Docker 公式の Pricing ページで最新情報を確認してください。
6. Docker Engine 直インストールの手順(最短)
せっかくなので、WSL2 + Ubuntu に直接入れる手順も載せておきます。
6.1 systemd を有効化する
Ubuntu 側で /etc/wsl.conf を編集します。
sudo tee /etc/wsl.conf <<EOF
[boot]
systemd=true
EOF
Windows の PowerShell で一度 WSL を落としてから起動し直します。
wsl --shutdown
wsl -d Ubuntu
6.2 Docker Engine をインストール
# 公式の便利スクリプトを使う場合(手軽)
curl -fsSL https://get.docker.com | sudo sh
# sudo なしで docker を叩けるようにする
sudo usermod -aG docker $USER
# 自動起動を有効化
sudo systemctl enable --now docker
再ログイン後、docker run hello-world が動けば完了です。
本番により近い運用にしたい場合は、get.docker.com のスクリプトではなく Docker 公式の apt リポジトリを登録して docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin を入れる手順が推奨されます。
7. ハマりどころ(両構成共通)
-
メモリが際限なく食われる:WSL2 の VM は使った分だけメモリを取りに行きます。上限は
%UserProfile%\.wslconfigで制限しましょう。Docker Desktop 自体にはメモリ上限の設定項目がなく、結局.wslconfigで制限する形になります。
[wsl2]
memory=8GB
processors=4
-
OS をまたぐファイルアクセスは遅い:
\\wsl$経由や/mnt/c配下でのビルドは激遅になります。ソースコードとボリュームは「Docker を使う側の OS」である Ubuntu 側(~/以下)に置くのが鉄則です。 -
ポート公開:
-p 3000:3000したポートには Windows からlocalhost:3000でアクセスできます(localhostForwarding がデフォルト有効)。WSL 内から Windows 側サービスに localhost で繋ぎたい等の逆方向が必要ならnetworkingMode=mirroredを検討してください。
まとめ
| こんな人は | おすすめ |
|---|---|
| 個人・学習用で手軽さ最優先、GUI が欲しい | Docker Desktop |
| 大企業の支給 PC でライセンスをクリアしたい | Docker Engine 直 |
| メモリを節約してコンテナをたくさん回したい | Docker Engine 直 |
| 本番 Linux サーバーに近い運用を学びたい | Docker Engine 直 |
| チームに Mac ユーザーがいて手順を統一したい | Docker Desktop |
どちらを選んでも WSL2 のカーネル上で dockerd が動くという本質は同じです。「Docker Desktop は便利なラッパー、Engine 直は素の Linux」と捉えると、違いが整理しやすいと思います。