スタートアップCTOによるITエンジニアのためのブログ

WSL2でのDocker DesktopとDocker Engineの違い

Windows Subsystem for Linux 2(WSL2)上でDockerを利用する場合、「Docker DesktopをインストールしてWSL2と連携させる」か、「WSL2内のLinux(Ubuntuなど)にDocker Engineを直接入れる」かの2択になります。

読者の方が開発スタイルに合わせて適切な方法を選べるよう、本記事では両者を比較し、どんな場合にどちらがおすすめなのかを解説します。

背景:WindowsにおけるDocker

DockerはもともとLinuxのカーネル技術(NamespacesやCgroups)を利用して作られた技術です。そのため、Linux以外のOSではそのまま動かすことができません。

WSL2登場以前、WindowsでDockerを使う際は、Docker Desktopによって専用のLinux仮想マシン(Hyper-V)を作成し、その上でコンテナを動かす必要がありました。

現在はWSL2によって軽量なLinuxカーネルが提供されているため、UbuntuなどのLinuxディストリビューションに直接Docker Engineをインストールする選択肢が生まれました。また、Docker Desktop自身も専用VMではなく、WSL2のバックエンドを利用してコンテナを実行する仕組みに進化しています。

主な違い

WSL2環境における両者の主な比較は以下の通りです。

比較項目Docker Desktop (WSL2連携)WSL2内の Docker Engine
コマンドの場所PowerShell、コマンドプロンプト、WSL2のどこからでも docker が打てるWSL2内からのみ docker コマンドが使える
管理画面 (GUI)あり。ダッシュボードでコンテナ・イメージ操作が可能なし。すべてコマンド操作
構成要素Docker Engine(Dockerデーモンと CLI), Compose, Kubernetes, BuildKit, Docker ExtensionなどがセットDockerデーモンと CLIのみ(Composeなどは別途導入が必要)
ライセンス商用利用は一部有料(企業規模による)完全無料(Apache License 2.0)
リソース消費比較的重い。GUIアプリの分、メモリ消費が多い最小限。必要なデーモンのみが動作する
設定の容易さインストーラーを叩くだけで完結パッケージ管理などLinuxの知識が必要
アーキテクチャ専用のディストリビューションを介する特殊構造Linux標準に近い。単一ディストリビューション内で完結

コマンドラインの利便性

Docker Desktopを導入すると、Windowsホスト側(PowerShell)とWSL2側の両方にパスが通ります。これにより、WSL2を起動せずにコンテナを管理したり、Windows上のIDEから直接Dockerを制御したりするのが非常にスムーズです。

一方、Docker EngineはWSL2のディストリビューション内に閉じた環境となるため、操作はすべてLinuxターミナル内で行うことになります。

管理画面(GUI)と拡張機能

Docker Desktopには強力なGUIダッシュボードが備わっています。ログの確認やコンテナの停止・削除がマウス操作で行えるほか、Docker AI によるトラブルシューティング支援や、セキュリティ脆弱性をスキャンする Docker Scout など、開発を補助する高度なツールが統合されています。

Docker Desktop管理画面

一方、Docker EngineにGUIはありません。ターミナル操作に習熟したエンジニアにとっては十分ですが、可視性や付加機能の面ではDocker Desktopに軍配が上がります。

ライセンス

Docker Desktopは商用ソフトウェアです。個人利用や教育目的、あるいは「従業員数250人未満 かつ 年間売上1,000万ドル未満」の企業であれば無料(Docker Personal)で使用できます。しかし、いずれかの条件を超える企業での利用には有料サブスクリプションが必要です。

Docker Desktop Subscription Service Agreement

対してDocker Engineはオープンソースであり、企業規模にかかわらず無料で利用可能です。コストを抑えたい企業環境では、WSL2内にDocker Engineを構築する構成がよく選ばれます。

リソース消費

Docker Desktopは、Windows側の管理プロセスやGUI、そして内部的に起動する専用ディストリビューション(docker-desktop)によって、数百MB〜数GBのメモリを常時消費する傾向があります。

WSL2内のDocker Engineは、必要な時だけデーモンが動くため非常に軽量です。開発マシンのスペックが限られている場合や、少しでも動作を軽くしたい場合には大きなメリットとなります。

アーキテクチャ

ここが技術的に最も大きな差です。

Docker Desktopの構造

Docker Desktopは、コンテナを動かすための専用の「隠しディストリビューション」をWSL2上に作成します。私たちが使っているUbuntuなどは、そこへリクエストを送っているに過ぎません。

  • Windowsホスト(GUIアプリはここで動作)
    • WSL2 VM
      • docker-desktop (実際のデーモンやコンテナが動く場所)
      • Ubuntu (CLIから命令を投げるだけ)

Docker Engineの構造

一方、Docker EngineはUbuntuの中に直接デーモンが常駐します。これは本番のLinuxサーバーとほぼ同じ構成です。

  • Windowsホスト
    • WSL2 VM
      • Ubuntu (デーモンとCLIが同居)

まとめ:どちらを選ぶべきか?

Docker Desktop(WSL2連携)がおすすめの人

  • 環境構築に時間をかけず、すぐに開発を始めたい。
  • GUIで視覚的にコンテナの状態を把握したい。
  • KubernetesやDocker AI、セキュリティスキャンなどの付随機能も活用したい。
  • 個人利用、またはライセンス費用を許容できる組織に属している。

Docker Desktopについては「WSL2環境でのDocker Desktopのインストール、設定、基本操作とアーキテクチャ」で詳しく解説しています。

Docker Engine(WSL2内に直接インストール)がおすすめの人

  • Linuxのコマンド操作に慣れている。
  • 本番のLinuxサーバーに近い環境で動作検証をしたい(Systemdの挙動など)。
  • マシンのリソース(メモリ)を最大限節約したい。
  • 余計なメモリを消費したくない。
  • 会社規模によりDocker Desktopが有料になるが、コストを抑えたい。

Docker Engineについては「WSL2のUbuntuへのDocker Engineインストール方法」で詳しく解説しています。

ご自身の開発スタイルや、所属組織のポリシーに合わせて、最適なDocker環境を選択してください。