[Windows WSL2] WSL2でWindows10 HomeでもDokcerDesktopを実現する

Construct Docker Desktop env on Windows10 Home with WSL2

2020-03-02より、ついにDocker DesktopWindows10 Home環境をサポートしました 🎉

早速使い心地を試してみたのでまとめておきます。

はじめに

さて、以前のブログ投稿でWindowsのWSL2環境の構築をしましたが、Windows10 Home環境だとDocker Desktop未対応だったため、 WSL2でのDocker環境をWindows側で利用することができませんでした。

参考: [Windows WSL2] WSL2でDocker開発環境を構築してみる

そして2020-03-02にリリースされたDocker Desktop Community 2.2.2.0より、 ついにDocker DesktopWindows10 Home環境をサポートしたそうなので、試してみます。

Windows 10 Home users can now use Docker Desktop through the experimental WSL 2 support. This requires Windows Insider Preview Build 19018 or later.

結論から言うと、コンテナアプリケーションの開発から開発環境としてのdevcontainerまで、かなり快適になりました。

これまでDockerToolboxを使ってたユーザはこっちに切り替える価値がありそうです。

Docker Desktop検証

前提条件

Windows10 HomeではHyper-V非対応なのは変わらないため、 あくまでWSL2バックエンドでのDocker環境が必要となります。

WSL2でのDocker環境構築については以前まとめたのでそちらをご参照ください。

参考:WSL2でDocker開発環境を構築してみる#WSL2に切り替える

また、公式ブログにあるように、windows10 Homeで実現するにはbuild-versionが19040以上である必要があります。

We are now pleased to announce that we have completed the work to enable experimental support for Windows Home WSL 2 integration. This means that Windows Insider users on 19040 or higher can now install and use Docker Desktop!

ということでまとめると以下を事前に準備しておきます。

  • WSL2でDockerが起動する状態にしておく
  • Windows Build version 19040 以上にする

あともともとDocker Toolbox使ってる人は干渉するかもしれないので アンインストールが必要かもしれません。(試してないので不明..)

DockerDesktopのインストール

公式サイトのedge releaseより、2.2.2.0以上のものをダウンロードしてインストールします。

https://docs.docker.com/docker-for-windows/edge-release-notes/#docker-desktop-community-2220

exeファイルを実行してインストールすると、2.2.2.0未満だとエラー終了していましたが、今回はあっさりインストールできました。

インストール時のConfigでEnable WSL 2 Featuresにチェックを入れておきます。

install-dialog1

あとはダイアログに従ってログインし直せばインストール完了です。

install-dialog2

デフォルトでStart Docker Desktop when you log inにチェックが入っているので、ログイン時自動でDockerが立ち上がります。

また、Windows10 Homeの場合、Enable the experimental WSL 2 based engine (Windows Home can only run the WSL2 backend)が強制で有効化されています。

install-dialog2

KubernetesタブからEnable Kubernetesを有効化すると、ローカルkubeクラスタもあっさり立ち上がりました。

docker実行

まず、powershellなどでWindows側からDockerを試してみます。

PS C:\Users\itoam> docker container run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
1b930d010525: Pull complete
Digest: sha256:f9dfddf63636d84ef479d645ab5885156ae030f611a56f3a7ac7f2fdd86d7e4e
Status: Downloaded newer image for hello-world:latest

Hello from Docker!

次に、WSL2上からコンテナを確認してみます。 Windows側でpullしたイメージがそのまま参照できています。

$ docker image ls
...
REPOSITORY  TAG IMAGE ID    CREATED SIZE
hello-world latest  fce289e99eb9 15 months ago   1.84kB

プロセスを確認してみると、それっぽいproxyが起動しています。 どうやら/mnt/wsl/docker-desktop配下をproxyしてWindows-WSL間で引き回してるらしい。

$ ps alx | grep docker
4     0    35    34  20   0 1016484 23968 -     Ssl+ pts/0      0:04 /mnt/wsl/docker-desktop/docker-desktop-proxy --distro-name Ubuntu --docker-desktop-root /mn
t/wsl/docker-desktop

mkontani@LAPTOP-EMIHBM23:$ ls /mnt/wsl/docker-desktop
docker-desktop/             docker-desktop-bind-mounts/ docker-desktop-data/

Windows側でもWSL側でも同一にコンテナを扱うことができてとっても便利!

VSCode連携

console上でコンテナを扱う他に、VS Code連携で簡単にコンテナを管理できます。

VS Codeインストールしたら以下ExtensionはWindowsで開発を行う上でマストと思います。

  • Remote - SSH // 任意のリモートサーバ環境でVSCode操作するためのもの
  • Remote - Containers // 任意のコンテナ環境でVSCode操作するためのもの
  • Remote - WSL // WSL環境でVSCode操作するためのもの

上の3つはExtensionPackが提供されてるので それをインストールで上のものまとめて一式インストールされます。

おそらくDockerToolboxでは利用できなかったであろうRemote - Containersも使えるようになりました。 これでコンテナ開発環境の導入ハードルがうんと低くなります。

主にローカル開発ではWSLかContainerを利用します。 どちらに接続しても、同一のDockerソケットを参照しているので、イメージなど共有され使い回すことができました。 結構コンテナ回りのアプリケーション開発してるとイメージいっぱいpullしてディスク容量逼迫しますが各環境でshareできるので経済的。

コンテナ回りはとりあえず各環境で以下2Extensionが対応しているので入れておけばUI上で可視化、操作できて便利。

また、Windows, WSL, Devcontainerどの環境下でもcodeコマンドで任意のディレクトリをVS Codeで開くことができます。

開発環境パターン

一通り検証してみましたが、開発環境としてどう使うのが良いのか見てみます。(※ 完全な私見です)

Windowsべた

Windows上でそのまま開発環境として使うパターンです。

  • メリット
    • シンプル
  • デメリット
    • 地の環境がどんどん汚れていって気持ち悪い
    • powershell嫌い (gitbashはあるけども。。)

WSLべた

WSL上でそのまま開発環境として使うパターンです。

  • メリット
    • まあまあシンプル
  • デメリット
    • 最悪クリーンインストールできるのでWindowsべたほどではないが環境がどんどん汚れていって気持ち悪い

DevContainer

コンテナ環境を開発環境として使うパターンです。

  • メリット
    • 開発環境の使い捨てが楽
    • 開発環境の完全性維持が楽
  • デメリット
    • network回りはプロキシ設定などが必要(ブラウザで動作確認等特に)
    • PCのスペックによっては若干負荷がかかる

また、コンテナ開発環境だと各アプリケーション毎に特化した開発環境フルスタックな汎用的開発環境の2つが あり得るかもしれません。

各アプリケーション毎に特化した開発環境の場合、microsoftが公開しているdevcontainerのテンプレ集microsoft/vscode-dev-containers が便利です。

開発するアプリケーション直下に.devcontainerディレクトリを作成して上記のテンプレを適宜拝借してVS Codeで開くとサクッといい感じの環境ができあがります。

(Remote - Containers Extension をいれておけば、コマンドパレット開いてRemote-Containers: Add Development Container Configuration Files から速攻で諸々の設定skeletonを生成できます。)

まあ一長一短なのでどれが一番いいとは言えませんがね、 WSL2の欠点としてWindows側へのアクセス効率が悪いので、WSLでWindows側のオブジェクトをいじるとかはやめましょう。

個人でのオレオレ開発ならベタでも全然ありだと思うし チームでの開発とかだとDevcontainerがメンバー間での環境の完全性が取れて良いんじゃないでしょうか。

おわりに

今回、Windows10 HomeでのDocker Desktopを試してみました。 特にWSLバックエンドでのDocker環境だとシームレスにWindows - WSL - Devcontainerでコンテナいじれて快適でした。

Macとかだとこれまでも当たり前に使えてたわけですが、VSCodeとの相性はWindowsに軍配が上がると思ってます。 特に、VSCode - RemoteExtensionでWSLやらdevcontainerはかなり強力な開発ツールで総じて快適に動作しました。

Windows10 Home環境でも十分開発に耐えると思われます。(もうProの旨味がかなり目減りしてるような。。)

まだWindows10 HomeDocker Toolbox使ってる人はDocker Desktopに切り替えると幸せになれますよ、という〆


See also