2019年10月公開の Docker Desktop WSL 2 の最新版である Backend版の動作検証は以下リンクをご参照ください。
https://qiita.com/SHIRANO/items/ebd007ba148b4651a5df
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アイコンで行います。
WSL 2 Tech Preview メニューが追加されているのが分かります。
メニューを選択してStartボタンを押します。
従来のデーモンに戻す場合は「docker context use default」と記述されています。
WSL 2のUbuntuで確認(ps -ef)してみるとdockerデーモンが確認できます。
次にdocker run hello-world を実行します。
hello-world:latestがpullされて実行されました。
Docker Desktop for WSL 2の導入のみでWSL 2上のUbuntuでdockerコマンドが使用可能であることを確認できました。
さらにこの状態でWindowsのコマンドプロンプトからも確認してみます。
Windowsのコマンドプロンプトからの実行では、hello-world:latestがpullされずに実行されました。
docker context ls で確認すると、現在のDocker EndpointがWSLとなっている事が確認できます。
ここでWindowsのコマンドプロンプトからDocker EndpointをデフォルトのDocker DesktopVM上のDockerデーモンに変更します。
C:¥> docker context use default
docker context lsで確認するとdefaultに変更されているのが確認できます。
この状態で再度docker run hello-world を実行します。
今度はコンテナイメージが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マネージャーには表示されない模様です。
**まとめ** 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の利用を更に促進させるのではないかと考えています。