Docker Desktop for WindowsのバックエンドとしてWSL2を使用する

開発用のWindowsPCがHomeエディションでもいいじゃない
2020.07.31

データアナリティクス事業本部の貞松です。
Windows Updateからの配信を待ちきれずにWindows 10をバージョン2004にアップデートした勢です。

Windows 10のバージョン2004から正式に導入されたWindows Subsystem for Linux 2(WSL2)ですが、これをDocker Desktop for Windowsに設定できるようになったという情報を見かけたので試してみました。
これにより「Hyper-V」無しで「Linux」のコンテナをローカルで動かせるようになる為、期待が高まります。

実行環境

  • OS: Windows 10 Home (バージョン2004, OSビルド19041.264)
  • WSL バージョン2
  • Docker Desktop for Windows Version 2.3.0.4(46911)

※ Homeエディションなので当然Hyper-Vは使えない環境です。

WSL2のインストール

WSL2のインストールについては、既に最高の記事がありますのでこちらをご参照ください。
(リソース割当やディスクサイズの調整など細かい設定まで記載されている決定版です)

Windows Subsystem for Linux 2(WSL 2)をセットアップしてみた

Docker Desktop for Windowsのインストール

Docker Desktop for Windowsにインストールについては、公式ページからインストーラーをダウンロードして実行するだけです。簡単ですね。

https://hub.docker.com/editions/community/docker-ce-desktop-windows

インストーラーの画面で「Enable WSL 2 Windows Features」にチェックが入っていることだけ確認した上でインストールを実行してください。

インストールが完了するとDocker Desktop for Windowsが起動して、最初のチュートリアル画面が表示されます。
(特に必要ないので今回は触りません)

動作確認

WSL2をバックエンドとしてDocker Desktop for Windowsを実行していると、WSLのディストリビューション一覧は以下のようになります。
docker-desktopdocker-desktop-dataがVERSION2で実行されています。

PS C:\Users\user> wsl -l -v
  NAME                   STATE           VERSION
* Ubuntu-20.04           Running         2
  docker-desktop         Running         2
  docker-desktop-data    Running         2

実際にコンテナが動作することを検証する為に今回はAmazon Linux 2のイメージをDocker HubからPullして実行します。

https://hub.docker.com/_/amazonlinux

docker pulldocker runを実行して、/etc/image-idから実行されているイメージの情報を取得します。

PS C:\Users\user> docker pull amazonlinux
latest: Pulling from library/amazonlinux
3d24604292f2: Pull complete
Digest: sha256:76fb97750c68e0531b0c7fa405ecdb591ec78c0be763d04e9db1cbbc6adf2a06
Status: Downloaded newer image for amazonlinux:latest
docker.io/library/amazonlinux:latest

PS C:\Users\user> docker run -it amazonlinux
bash-4.2# cat /etc/image-id
image_name="amzn2-container-raw"
image_version="2"
image_arch="x86_64"
image_file="amzn2-container-raw-2.0.20200602.0-x86_64"
image_stamp="512f-33bb"
image_date="20200603001727"
recipe_name="amzn2 container"
recipe_id="534fb8b7-3a43-d095-423e-8625-142b-3107-e2b736e1"

一応、Dockerコンテナの実行状態も確認してみます。

PS C:\Users\user> docker ps -a
CONTAINER ID   IMAGE         COMMAND       CREATED              STATUS              PORTS   NAMES
161bca3a4e43   amazonlinux   "/bin/bash"   About a minute ago   Up About a minute           musing_engelbart

Hyper-Vが無くてもちゃんと動作していることが確認できました!

ちなみにDocker Desktop for Windowsを停止すると、当たり前ですがWSL上のDocker Desktop用ディストリビューションも停止状態になります。

PS C:\Users\sady_> wsl -l -v
  NAME                   STATE           VERSION
* Ubuntu-20.04           Running         2
  docker-desktop         Stopped         2
  docker-desktop-data    Stopped         2

まとめ

ついにHyper-V無し環境でDocker Desktop for Windowsが動作する時代がやってきました。Linuxのコンテナを動作させることができるので、Windows上でも実際のデプロイ環境に合わせた開発・テスト環境を簡単に構築することができそうです。
WSL2で動作しているLinuxディストリビューション上でDockerを動作させて、完全にLinux環境に閉じた開発環境を構成するのも魅力的なので、そちらも試してみたいです。