WindowsでDockerを使いたいけれど、Docker Desktopは入れたくない。そんな場合は、WSL2上のUbuntuにDocker Engineを直接インストールできます。

この記事では、Windows 11 Home + WSL2 + Ubuntu 24.04 LTSで、Docker Engine、Docker CLI、containerd、Buildx、Docker Compose pluginをセットアップする手順をまとめます。操作はターミナルだけですが、以後はdockerdocker composeを通常どおり使えます。

この記事の構成と前提

Docker Desktopはインストールしません。DockerデーモンはUbuntu側で動かし、Windows側から使いたいときもWSL経由で呼び出します。

なぜDocker Desktopを使わないのか

Docker Desktopには無償利用の条件があります。Dockerの現行契約では、商用利用で無償のまま使えるのは、原則として従業員250人未満かつ年間売上1,000万米ドル未満の組織です。これを超える組織や政府機関などでは、有償サブスクリプションが必要になる場合があります。

Docker Desktopには、無償のまま使える組織規模・利用形態の条件があります。今回はDocker Desktopを使わず、WSL2上にDocker Engineを直接入れて、CLI中心の環境を作ります。

なお、Moby(Docker Engineの基盤)、Docker CLI、Compose、Buildx、containerdの各ソースリポジトリはApache License 2.0です。一方で、実際に導入するOSパッケージには依存コンポーネントも含まれます。「インストールされるものがすべてApache 2.0」と一括で断定せず、組織の利用判断では配布パッケージと利用するレジストリ・イメージの条件も確認してください。

Step 1: WSL2とUbuntu 24.04 LTSを入れる

Windowsの管理者として実行したPowerShellで、次を実行します。

wsl --install -d Ubuntu-24.04

初めてUbuntuを起動すると、セットアップの途中でLinux用のユーザー名とパスワードを聞かれます。これはWindowsのログイン情報とは別に設定します。WSLが古いPCでは、同じ管理者PowerShellでwsl --updateを実行してから進めてください。

すでにWSLを使っている場合でも、まずPowerShellでバージョンを確認しておくと安心です。

wsl --version
wsl -l -v

Ubuntuを初めて開いたときの入力

Ubuntuを初めて起動したときのセットアップ中に、次のようにLinux側で使うユーザー名を聞かれます。

Create a default Unix user account: yourname

yournameの部分には、好きな半角英数字のユーザー名を入力してEnterを押します。続けてパスワードを2回入力しますが、入力中の文字は*も含めて何も表示されません。正常な動作なので、そのまま入力してEnterを押してください。

このパスワードはWindowsのパスワードとは別で、以後sudoを実行するときに使います。ユーザー作成が終わり、yourname@PC名:~$のような表示になったら準備完了です。すでに設定済みなら、この節は飛ばして次へ進んでください。初回にWSLの案内ページが開いても、閉じて問題ありません。

Step 2: Docker Engineをインストールする

初回セットアップが終わったUbuntuのターミナルで、そのまま作業を続けます。Docker公式のインストールスクリプトを使うと、リポジトリの登録と必要なパッケージの導入をまとめて実行できます。

先に確認: 古いLinux版Dockerがある場合

Ubuntu内に以前導入したdocker.iodocker-composeがあると、Docker公式パッケージと競合することがあります。初めて入れる場合はこの節を飛ばして構いません。既存のLinux版Dockerを置き換える場合は、コンテナやイメージをどう扱うか確認したうえで、Docker公式の「conflicting packages」案内に従ってください。Docker Desktopの有無とは別の話です。

公式スクリプトを実行する

まずスクリプトをダウンロードします。

curl -fsSL https://get.docker.com -o get-docker.sh

ダウンロードしたスクリプトを、管理者権限で実行します。

sudo sh get-docker.sh

shはスクリプトを実行するコマンドです。スクリプトの内容を事前に確認したい場合だけ、less get-docker.shを使います。lessの画面はqで閉じます。

このスクリプトが、Docker Engine、CLI、containerd、Buildx、Compose pluginをまとめて導入します。処理が終わってプロンプト(yourname@PC名:~$)に戻るまで待ってください。Docker公式は、このスクリプトを主に開発環境向けとして案内しています。本番サーバーでは、公式aptリポジトリを個別に登録する方法を使ってください。

パッケージ役割
docker-ceDocker Engine(デーモン)
docker-ce-clidockerコマンド
containerd.ioコンテナ実行ランタイム
docker-buildx-plugin拡張ビルド機能
docker-compose-plugindocker composeコマンド

Step 3: sudoなしでdockerを実行できるようにする

毎回sudo dockerと打たずに済むよう、現在のUbuntuユーザーをdockerグループへ追加します。

sudo usermod -aG docker $USER

このグループはDockerデーモンを操作でき、実質的にroot相当の権限につながります。共有PCや複数人が使うLinux環境では、追加するユーザーを慎重に選んでください。

まずUbuntuを終了してPowerShellへ戻ります。

exit

PowerShellで次を実行してWSLを停止し、Ubuntuを開き直します。Ubuntu-24.04が既定のディストリビューションなら、起動コマンドはwslだけで構いません。

wsl --shutdown
wsl

複数のディストリビューションを使っていてUbuntuを明示したい場合は、wsl -d Ubuntu-24.04を使います。

Step 4: 動作を確認する

Ubuntuで次を実行します。

docker run --rm hello-world
docker version
docker compose version
docker buildx version

hello-worldのメッセージが表示されれば、Docker Engineは動作しています。

Windows側のPowerShellから呼び出す方法

基本はUbuntu内で作業するのがおすすめです。PowerShellから一度だけ実行したい場合は、次のようにWSL経由で呼び出せます。

wsl -d Ubuntu-24.04 -- docker compose up

毎回wsl -d Ubuntu-24.04 --を付けるのが面倒なら、PowerShellプロファイルに関数を追加する方法もあります。

notepad $PROFILE

開いたファイルに、次の1行を追加します。

function docker { wsl.exe -d Ubuntu-24.04 -- docker @args }

PowerShellを開き直せば、docker psdocker compose upをWindows側から呼び出せます。ただし、パス指定やマウント指定はLinux側のパスとして扱われる点に注意してください。

WSL2運用で知っておきたい注意点

プロジェクトはWSL側に置く

/mnt/c/...のようなWindowsファイルシステム上でも作業できますが、Linux側のホームディレクトリよりファイルI/Oが遅くなることがあります。Node.jsやJavaなど、依存ファイルが多いプロジェクトは、たとえば~/src/my-appに置くと扱いやすくなります。

Windowsのエクスプローラーからは、\\wsl$\Ubuntu-24.04\home\<Ubuntuのユーザー名>を開いてアクセスできます。VS Codeを使う場合は、WSL拡張を使ってUbuntu側のフォルダを開くと自然です。

WSLを停止するとDockerも止まる

Docker Desktopの常駐アプリではなく、WSL内のサービスとしてDockerを動かす構成です。wsl --shutdownを実行すると、Dockerコンテナも停止します。PC起動直後は、Ubuntuを開くか、wsl -d Ubuntu-24.04 -- docker psのようにWSLを起動してから使ってください。

Docker Hubやコンテナイメージの条件は別に確認する

Docker Desktopを使わないことと、Docker Hubの利用制限・レート制限・各コンテナイメージのライセンスは別の話です。業務利用では、使うレジストリとイメージの提供元・ライセンスも確認しましょう。

まとめ

Windows 11 Homeでも、WSL2上のUbuntuにDocker Engineを直接入れれば、Docker DesktopなしでDocker CLIとComposeを使えます。GUIが不要で、Linux環境で開発したい場合にはシンプルな構成です。

特に組織でDocker Desktopの無償利用条件を避けたい場合は、Desktopの条件と、Docker Engineやイメージのライセンスを分けて確認することが大切です。


参考リンク