Edited at

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

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」となっています。


Docker Desktopを起動した後の設定などは、従来と同様にWindowsタスクバーのDockerアイコンで行います。

1.png

WSL 2 Tech Preview メニューが追加されているのが分かります。

メニューを選択してStartボタンを押します。

2.png

従来のデーモンに戻す場合は「docker context use default」と記述されています。

WSL 2のUbuntuで確認(ps -ef)してみるとdockerデーモンが確認できます。

3.png

次にdocker run hello-world を実行します。

4.png

hello-world:latestがpullされて実行されました。

Docker Desktop for WSL 2の導入のみでWSL 2上のUbuntuでdockerコマンドが使用可能であることを確認できました。

さらにこの状態でWindowsのコマンドプロンプトからも確認してみます。

5.png

Windowsのコマンドプロンプトからの実行では、hello-world:latestがpullされずに実行されました。

docker context ls で確認すると、現在のDocker EndpointがWSLとなっている事が確認できます。

6.png

ここでWindowsのコマンドプロンプトからDocker EndpointをデフォルトのDocker DesktopVM上のDockerデーモンに変更します。

C:¥> docker context use default

docker context lsで確認するとdefaultに変更されているのが確認できます。

この状態で再度docker run hello-world を実行します。

7.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


まとめ

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の利用を更に促進させるのではないかと考えています。