2020-03-02より、ついにDocker Desktop
がWindows10 Home環境
をサポートしました 🎉
早速使い心地を試してみたのでまとめておきます。
はじめに
さて、以前のブログ投稿でWindowsのWSL2環境の構築をしましたが、Windows10 Home環境
だとDocker Desktop
未対応だったため、
WSL2でのDocker環境をWindows側で利用することができませんでした。
そして2020-03-02にリリースされたDocker Desktop Community 2.2.2.0より、
ついにDocker Desktop
がWindows10 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環境構築については以前まとめたのでそちらをご参照ください。
また、公式ブログにあるように、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
にチェックを入れておきます。
あとはダイアログに従ってログインし直せばインストール完了です。
デフォルトで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)
が強制で有効化されています。
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 - Remote
ExtensionでWSL
やらdevcontainer
はかなり強力な開発ツールで総じて快適に動作しました。
Windows10 Home環境でも十分開発に耐えると思われます。(もうProの旨味がかなり目減りしてるような。。)
まだWindows10 Home
でDocker Toolbox
使ってる人はDocker Desktop
に切り替えると幸せになれますよ、という〆