Docker Desktop for WSL 2 を入れてみました

2019年10月公開の Docker Desktop WSL 2 の最新版である Backend版の動作検証は以下リンクをご参照ください。
https://qiita.com/SHIRANO/items/ebd007ba148b4651a5df

<HR>

7/31に公開されたDocker Desktop for WSL 2（Technical Preview）の動作について検証しました。

まず前提環境などは、このdockerブログにある「Want to give it a go?」の通りに導入・設定を行います。
https://blog.docker.com/2019/07/5-things-docker-desktop-wsl2-tech-preview/

今回検証したWindows 10は「ビルド18945.1001」となっています。
<hr>


Docker Desktopを起動した後の設定などは、従来と同様にWindowsタスクバーのDockerアイコンで行います。
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/475210/974b1815-3799-891e-d282-ba2d71a605a7.png)
**WSL 2 Tech Preview** メニューが追加されているのが分かります。
 

メニューを選択してStartボタンを押します。
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/475210/aaf55c72-4ca4-bbd3-7d2d-9f2b4a5aff5a.png)
従来のデーモンに戻す場合は「docker context use default」と記述されています。

WSL 2のUbuntuで確認（ps -ef）してみるとdockerデーモンが確認できます。
![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/475210/e9055561-32c0-0b76-b257-59211caf49f7.png)
 

次にdocker run hello-world を実行します。
![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/475210/95bf73b8-1cda-0b40-5053-ff7656011dfa.png)
 hello-world:latestがpullされて実行されました。
**Docker Desktop for WSL 2の導入のみでWSL 2上のUbuntuでdockerコマンドが使用可能であることを確認できました。**

**さらにこの状態でWindowsのコマンドプロンプトからも確認してみます。**
![5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/475210/dc6d2b46-c3e4-8c11-49c9-64653f7dcde7.png)
 Windowsのコマンドプロンプトからの実行では、hello-world:latestがpullされずに実行されました。

docker context ls で確認すると、現在のDocker EndpointがWSLとなっている事が確認できます。
![6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/475210/f730658f-bcd8-1765-dfd3-7faad9b193a3.png)
 

ここでWindowsのコマンドプロンプトからDocker EndpointをデフォルトのDocker DesktopVM上のDockerデーモンに変更します。
**C:￥> docker context use default**
docker context lsで確認するとdefaultに変更されているのが確認できます。

この状態で再度docker run hello-world を実行します。
![7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/475210/5f2a7fc9-0b0a-bb3d-c627-e38ae7031670.png)
今度はコンテナイメージがpullされてから実行されました。

もちろんWSL 2のUbuntuでdocker run hello-worldを実行すると、もうイメージはpull済であるため即座に実行されます。
また、WSL 2のUbuntuでdocker context lsを実行すると、WSL 2上の1つしか表示されません。

**Docker Desktop for WSL 2では従来の仕組みであるDocker DesktopVM上でのDockerデーモンと、WSL 2上のDockerデーモンが別々に動作している事が分かりました。**

Hyper-Vマネージャーの表示で、従来からの仕組みであるDocker DesktopVMが設定され起動している事が確認できます。
色々な方が指摘されていますが、WSL 2用の仮想マシンはHyper-Vマネージャーには表示されない模様です。
![8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/475210/76a02a88-a8c0-961d-124f-9e1758124fa9.png)

<hr>**まとめ**
Docker Desktop for WSL 2の導入のみでWSL 2上のUbuntuでdockerコマンドが使用可能です。
Docker Desktop for WSL 2では従来の仕組みであるDocker DesktopVM上でのDockerデーモンと、WSL 2上のDockerデーモンを同時に動作させる事が可能で、Docker Endpointを切り替える事によってWindowsのコマンドプロンプトなどからは、いずれか1つのDockerデーモンを使用する仕組みになっています。
仕組みの分かりやすい図がdockerブログの冒頭に掲載されています。
https://blog.docker.com/2019/07/5-things-docker-desktop-wsl2-tech-preview/

またDocker Desktop for WSL 2を導入するだけで、Windowsコマンドプロンプトなどからは（Docker DesktopVMを利用する環境では）dockerコマンドだけではなく、Kubernetes（kubectlコマンドなど）がこれまでと同様に利用可能である事を確認できました。
（設定でEnable Kubernetesにチェックし、複数のPodが起動するような既存YAMLのapplyで確認）
一方WSL 2上のUbuntuではDockerデーモンまでが自動で起動しdockerコマンドが使えますが、Kubernetes環境までは設定されていない模様です。

個人的には今後、WSL 2とDocker Desktopの組み合わせが、コンテナの開発テスト環境としてWindowsの利用を更に促進させるのではないかと考えています。