1. はじめに

商用利用ではDocker Desktopの無償枠(個人・従業員250名未満かつ年間売上1000万USD未満など)の条件を満たさないケースがあり、エンタープライズ契約が必要になります。そこで本記事では Windows 11 + WSL2 + Linux版Docker Engine を組み合わせ、Docker Desktopに依存しない構成をまとめます。

2. 全体アーキテクチャ

  • Windows 11 Pro/Enterprise 22H2以降にWSL2を有効化
  • wsl --install -d Ubuntu-22.04 でLinux環境を用意し、そこへDocker Engineをインストール
  • VS CodeのRemote拡張、CLIツール(docker-compose / lazydocker / ctop)やWeb UI(Portainer)で操作
  • Windows側はHyper-V等を使わず、WSL2の軽量VM上で完結

3. 事前準備(WSL2 + Docker Engine)

  1. PowerShell(管理者)で仮想化機能とWSL2を有効化:
    dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
    dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
    wsl --install -d Ubuntu-22.04
    再起動後はPowerShellやWindows Terminalでwsl -d Ubuntu-22.04を実行すると初期セットアップが開始され、ユーザー名とパスワードを登録すればUbuntuシェルにログインできます。以降はwslまたはスタートメニューの「Ubuntu」から同じユーザーでログイン可能です。
  2. 初回起動したUbuntuでDocker公式リポジトリを追加し、エンジン一式を導入:
    sudo apt-get update
    sudo apt-get install -y ca-certificates curl gnupg lsb-release
    sudo install -m 0755 -d /etc/apt/keyrings
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
    echo \
      "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
      $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    sudo apt-get update
    sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
    公式リポジトリを登録しないまま sudo apt-get install docker-ce ... を実行すると Package 'docker-ce' has no installation candidate などのエラーになるため、上記の鍵登録とlsb_release -csで取得したコードネームが実行中のUbuntu(例: jammy/focal)と一致していることを確認してください。
  3. Dockerソケットの権限エラーを防ぐため、現在のユーザーをdockerグループへ追加し再ログイン:
    sudo usermod -aG docker $USER
    newgrp docker   # もしくはWSLを再起動
    docker run hello-world
    docker: permission denied while trying to connect to the Docker daemon socket が表示される場合は、グループ追加が反映されていないかDockerデーモンが起動していない可能性があります。newgrp dockerで即時反映するか、sudo service docker startで状態を確認してください。

4. ツール別の特徴と導入手順

4.1 VS Code Remote + Docker拡張

  • 特徴: Remote - WSLでWSL内のフォルダを直接開けるため、Docker CLIやボリュームをLinux側に置いたまま編集可能。Docker拡張を追加すると、コンテナ/イメージ一覧やログ閲覧・VS Code内でのインタラクティブ操作が行えます。
  • 導入:
    1. Windows側でVS Code最新版をインストール。
    2. 拡張マーケットプレイスで「Remote Development」「Remote - WSL」「Docker」を追加。
    3. wsl.exe に接続し、VS Code左下の緑アイコンから「WSLに接続」を選択。
    4. Docker拡張の設定 > Docker: Hostunix:///var/run/docker.sock にしてWSLソケットを指す。

4.2 docker-compose(v2)

  • 特徴: 複数コンテナを同時に定義・起動するデファクト。v2ではdocker composeサブコマンドとして統合され、BuildKitや拡張ドライバーに対応。
  • 導入: 既にインストールしたdocker-compose-pluginで利用できます。docker compose versionで確認し、docker compose up -d などのコマンドをWSL内で実行します。WindowsのPowerShellから実行したい場合はwsl docker composeとプレフィックスを付けます。

4.3 lazydocker

  • 特徴: CLIだけでコンテナ/ログ/リソースを俯瞰できるTUI。docker psdocker logsを連続実行する手間が省け、キーボード操作でコンテナ再起動やcompose stack切り替えが可能。
  • 導入:
    curl -L https://github.com/jesseduffield/lazydocker/releases/latest/download/lazydocker_$(uname -s)_$(uname -m).tar.gz \
      | tar xz lazydocker
    sudo mv lazydocker /usr/local/bin/
    lazydocker
    初回起動で設定ファイルが ~/.config/lazydocker に生成されます。

4.4 Portainer

  • 特徴: ブラウザでコンテナやボリュームを管理できる軽量ダッシュボード。スタックのデプロイやレジストリ連携、ユーザー権限管理もGUI上で完結。
  • 導入:
    docker volume create portainer_data
    docker run -d \
      -p 9000:9000 -p 8000:8000 \
      --name portainer \
      --restart=always \
      -v /var/run/docker.sock:/var/run/docker.sock \
      -v portainer_data:/data \
      portainer/portainer-ce:latest
    ブラウザで http://localhost:9000 を開き、初回管理者アカウントを作成します。

4.5 ctop

  • 特徴: topライクな表示で各コンテナのCPU・メモリ・ネットワーク使用率を確認できる軽量監視ツール。矢印キーでコンテナを選択し、lでログ、sでシグナル送信などが可能。
  • 導入:
    wget https://github.com/bcicen/ctop/releases/download/v0.7.7/ctop-0.7.7-linux-amd64 -O ctop
    chmod +x ctop
    sudo mv ctop /usr/local/bin/
    ctop

5. 運用のポイント

  • \\wsl$\<distro>\ をエクスプローラーで開き、GitリポジトリをWSL側に配置してI/Oを高速化。
  • VS CodeのDev Containers機能で必要なツールをdevcontainer.jsonにまとめると、他メンバーも同じ環境を容易に再現可能。
  • Portainerで本番/検証ホストをエンドポイントとして追加すれば、WSL内から複数サーバーを遠隔管理できます。
  • lazydockerやctopをWindows Terminalのペインで常時表示すると、Docker Desktopよりも軽量にリソースを監視できます。

6. Docker Desktopとの比較

観点本構成(WSL2 + Linux Docker)Docker Desktop
ライセンス費用100% OSSのため商用でも追加費用なし企業規模によって有償サブスクリプションが必要
パフォーマンスWSL2内で直接Linuxカーネルを使うためI/Oが速く、メモリ使用量も抑えられるGUI常駐でメモリを数百MB〜1GB程度消費
管理UIPortainerやVS Code拡張などを組み合わせて用途別に最適化Docker Desktopアプリのみで完結、設定はGUI依存
アップデートパッケージ管理で細かく制御できるが、メンテナンスの手間がかかるアプリ更新で一括反映、ただし強制再起動が発生することも
機能統合必要なツールを選んで軽量構成にできるKubernetes等がバンドルされるが、不要でもリソースを消費

7. まとめ

Docker Desktopを避けても、WSL2上にDocker Engineを構築し、VS Code Remoteやlazydocker・Portainer・ctopで補完すれば、商用でも安心してコンテナ開発環境を整えられます。必要に応じてツールを拡張しつつ、各コンポーネントを定期的にアップデートし、安全で再現性の高いワークフローを維持してください。