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)
- PowerShell(管理者)で仮想化機能とWSL2を有効化:
再起動後はPowerShellやWindows Terminalで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.04wsl -d Ubuntu-22.04を実行すると初期セットアップが開始され、ユーザー名とパスワードを登録すればUbuntuシェルにログインできます。以降はwslまたはスタートメニューの「Ubuntu」から同じユーザーでログイン可能です。 - 初回起動した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-pluginsudo apt-get install docker-ce ...を実行するとPackage 'docker-ce' has no installation candidateなどのエラーになるため、上記の鍵登録とlsb_release -csで取得したコードネームが実行中のUbuntu(例: jammy/focal)と一致していることを確認してください。 - Dockerソケットの権限エラーを防ぐため、現在のユーザーをdockerグループへ追加し再ログイン:
sudo usermod -aG docker $USER newgrp docker # もしくはWSLを再起動 docker run hello-worlddocker: 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内でのインタラクティブ操作が行えます。
- 導入:
- Windows側でVS Code最新版をインストール。
- 拡張マーケットプレイスで「Remote Development」「Remote - WSL」「Docker」を追加。
wsl.exeに接続し、VS Code左下の緑アイコンから「WSLに接続」を選択。- Docker拡張の
設定 > Docker: Hostをunix:///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 psやdocker 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:latesthttp://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程度消費 |
| 管理UI | PortainerやVS Code拡張などを組み合わせて用途別に最適化 | Docker Desktopアプリのみで完結、設定はGUI依存 |
| アップデート | パッケージ管理で細かく制御できるが、メンテナンスの手間がかかる | アプリ更新で一括反映、ただし強制再起動が発生することも |
| 機能統合 | 必要なツールを選んで軽量構成にできる | Kubernetes等がバンドルされるが、不要でもリソースを消費 |
7. まとめ
Docker Desktopを避けても、WSL2上にDocker Engineを構築し、VS Code Remoteやlazydocker・Portainer・ctopで補完すれば、商用でも安心してコンテナ開発環境を整えられます。必要に応じてツールを拡張しつつ、各コンポーネントを定期的にアップデートし、安全で再現性の高いワークフローを維持してください。