Help us understand the problem. What is going on with this article?

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

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

SHIRANO
釣りが趣味の某外資系IT会社のエンジニアです。 *おことわり* このサイトの掲載内容は私自身の見解であり、必ずしも所属会社の立場、戦略、意見を代表するものではありません。 記事は執筆時点の情報を元に書いているため、必ずしも最新情報であるとはかぎりません。 記事の内容の正確性には責任を負いません。自己責任で実行してください。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away