Docker DesktopをWindows 10 HomeにインストールしてWSLからdockerコマンドを実行する。


結論

インストール・起動は問題ないですが、WSL2からdockerコマンドが使えない場合は、
現状は以下の設定を ~/.bashrc などの設定ファイルに追記しておきましょう。

【2021年1月25日追記】
Docker Desktop 3.1.0 ではWSL2 Ubuntu側に /usr/bin/docker -> /mnt/wsl/docker-desktop/cli-tools/usr/bin/docker* のシンボリックリンクが張られるようになったので、以下の設定は不要になりました。

~/.bashrc
alias docker='docker.exe'
alias docker-compose='docker-compose.exe'

前提

  • Windows 10 Home
  • WSL2 Ubuntu (他のDistroでもおそらく同じ)

WSL2環境のセットアップ

WSL2環境の準備については、以下の記事を参考にすると良いと思います。

Docker Desktop をインストール

2020/03/20 の時点ではWSL2自体が正式版ではないので、Docker DesktopもStableではなくEdgeチャンネルを使うことになります。
(2020/05頃にはおそらくWSL2もDocker Desktopも正式版が来るはず!)

以下の記事にEdgeチャンネルのDocker Desktopのダウンロードリンクが貼られているので、そちらからダウンロードします。

(Docker Desktop Edge 2.2.2.0) となっているところです。

以下の公式のDocker Desktop for Windowsの提供ページから Edgeチャンネルのものをダウンロードしても大丈夫です。

インストール作業は、特になにか設定等は必要なく、デフォルトのままインストールすれば問題なく入りました。

WSLからdockerコマンドを実行する

そのままインストールしただけだと、WSL2 から docker とコマンドを打ってもダメでした。

docker.exe はWindows側にインストールされていて、コマンドプロンプトやPowerShellから問題なく動きます。

それをWSL2からも実行したらどうなるか試してみました。

うん。動きます。

試しにnginxを起動してみましょう。

docker.exe run --rm -p 80:80 nginx

Windows セキュリティの重要な警告 ダイアログが表示されるので、アクセスを許可する を選択します。

この状態で docker ps を実行してみましょう。

WSL2側からも、Windows側からも、どちらも同じDocker Daemonに繋ぎにいっていることがわかります。

nginx はWindows側で起動しているので、ブラウザで http://localhost:80 にアクセスするとDockerで起動したnginxコンテナに繋がります。

WSL2からもlocalhostでWindows側にアクセス可能なので、問題なくnginxコンテナに繋がります。

エイリアスの設定

Windows 10 HomeにDocker Desktopをインストールして、WSL2からdockerを使用するのが問題なさそうだとわかりましたが、docker.exe とするのは面倒なので、エイリアスを設定しておきます。

~/.bashrc
alias docker='docker.exe'
alias docker-compose='docker-compose.exe'

これで他の環境やコマンドのサンプル通りに docker だけでコマンドが使えるようになります。
また、docker-compose についても、 docker-comopose.exe でインストールされているので、こちらにもエイリアスを設定しておきました。

補足

試したWindowsの環境は、次のようなコマンドで一度dockerを導入したことがあるので、もしかしたらそれがWSL2側にdockerコマンドがすんなり入らない原因かもしれません。
インストール済みの場合は apt remove で除去しておきましょう。

sudo apt install docker-ce docker-ce-cli containerd.io docker-compose
 -y