Docker Desktop for Windows 10をセットアップして使ってみる

[Docker Desktop WSL 2 backend | Docker Documentation](https://docs.docker.com/docker-for-windows/wsl/)をよく読んでその通りに進めていけばインストールも実行もできます。
使い勝手はDocker Desktop for macOSと大差ないです。

# WSL1とWSL2の違い
先日のWindows 10 May 2020 UpdateでWindows Subsystem for Linux 2 (WSL2)という機能が正式リリースされました。

WSL1ではLinuxの命令をWindowsの命令に変換し、Windowsが処理をしていた様子。そのためLinuxカーネルをWindowsは持っておらず、DockerのようなLinuxカーネルを活用するソフトウェアを動作させることができていませんでした。

しかし、WSL2ではHyper-V由来のサブシステム用仮想環境がWindows 10 Home/Proの両方に備えられ、この仮想環境内のLinuxカーネルを使い、処理を行うようになりました。

そのため、WSL2は「完全なLinuxがWindows上で動作する」と待望の機能となっていました...！

<small>Source : [完全なLinuxがWindows 10上で稼働する？　「WSL 2」とは：Windows 10 The Latest - ＠IT](https://www.atmarkit.co.jp/ait/articles/1906/14/news019.html)</small>

# Windows 10のバージョンを確認
「Windowsの設定アプリ」を開き、「更新とセキュリティ」→「Windows Update」を開きます。
そして画面右にある「OS ビルド情報」をクリックし、「Windows の仕様」のセクションまでスクロールします。

そこの「バージョン」が2004以上であればWSL2を利用することができます。
要件を満たしていない場合には[Windows 10 May 2020 Update を入手する](https://support.microsoft.com/ja-jp/help/4028685/windows-10-get-the-update)を参照してWindowsを更新しましょう。

# Windows Subsystem for Linuxと仮想マシンプラットフォームのインストール
**管理者権限で**PowerShellを起動して、以下の2つのコマンドを実行。

```powershell
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
```

これらのコマンドを実行したらPCを再起動しましょう。
そうすると、更新プログラムを適用するような感じになり、WSL2と仮想マシンプラットフォームが利用可能になります。

## Linuxカーネルのバージョンアップ
[WSL 2 Linux カーネルの更新](https://docs.microsoft.com/ja-jp/windows/wsl/wsl2-kernel#download-the-linux-kernel-update-package)に従ってLinuxカーネルを更新します。
このページからインストーラをダウンロードして実行すればカーネルが更新されます。

<font color="#ff0000">
※日本語版サイトだと同じページにリダイレクトされる場合があります。英語版だとリンクが生きているので、その直リンクを配置しておきます。
</font>
[WSL2 Linux kernel update package for x64 machines](https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi)

## WSLのデフォルトバージョンを2に設定
そして、デフォルトのWSLバージョンを2に変更します。

```powershell
wsl --set-default-version 2
```

これでWSL2のセットアップが完了。

# Docker Desktop for Windowsのインストール
WSL2が正式リリースされたこともあって、Docker Desktop for WindowsのStable版もすでにWSL2に対応しています。

[Docker Desktop for Windows - Docker Hub](https://hub.docker.com/editions/community/docker-ce-desktop-windows) からインストーラをダウンロード！

インストーラを実行し、ウィンドウがこのような感じになったら「Enable WSL 2 Windows Features」にチェックが入っていることを確認して、「Ok」を押下。
（以下のどちらのチェックボックスにもデフォルトでチェックが入っています）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/255294/a84c774b-f419-b5cb-4c60-aaf92d4a6ca5.png)
インストールが完了すると、一度Windowsからサインアウトすることを要求されるので、要求に従いサインアウトしてあげましょう。

## Docker Desktop for Windowsの設定
サインアウト後、再度サインインするとDocker Desktop for Windowsが起動しはじめる。
起動するとウィンドウが出てきてチュートリアルを開始しようとしますが、「Skip tutorial」でいいと思います。

ウィンドウの上のほうに歯車アイコンがあるのでそこをクリック。設定画面を開きましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/255294/c6787089-d246-d623-91d6-7d5d472d616f.png)
この画面の「Expose deamon on tcp://localhost:2375 without TLS」にチェックを入れよう。
これにチェックを入れることでPhpStormなどでDocker連携機能を使ったりすることができます。

# Hello worldしてみる
試しにコンテナを実行してみよう。

```powershell
docker run --rm hello-world
```

これでうまくいけば成功！

# おまけ

## PhpStormに設定
Settingsの`Build, Execution, Deployment > Docker`を開く。
そして、`+`をクリックしてこんな感じになればOK。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/255294/f3e74b37-2253-686b-90d1-d164160dbb2d.png)

次に、`Build, Execution, Deployment -> Docker -> Tools`を開く。
Docker Compose executableのパスに`.exe`を追加してあげましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/255294/9cdc5f20-0a82-2c47-1acb-b9f46fe7640f.png)

この手順を踏む前にDocker ComposeをGUIから使ってみようとすればわかるのですが、なんかうまいこといきません。
[Python project Interpreter: docker-compose CreateProcess error=193 – IDEs Support (IntelliJ Platform) | JetBrains](https://intellij-support.jetbrains.com/hc/en-us/community/posts/360008283479-Python-project-Interpreter-docker-compose-CreateProcess-error-193) にこの解決法が記載されていました。

PhpStormではPHPのremote interpreter、PyCharmではremote interpreterを指定できます。主にPyCharmでは指定してあげるとコンテナ内のpipライブラリの補完をしてくれるようになるので設定すると作業効率が爆上がりが期待できます。

Run/Debug Configurationsも設定してあげるとワンクリックでコンテナの起動ができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/255294/6f9029d3-1c3e-a6d8-5e24-af66bd443c06.png)

<hr>

Docker Desktop for Windows 10をSurfaceシリーズなどのタッチパネル搭載端末にインストールして利用すると、jsのタッチ入力イベントのデバッグなどを開発機単体でできて非常に便利でした。
けど、かなりの高スペックを要求される印象です。

こちらも合わせて →　https://qiita.com/Denpa_Ghost/items/13ee35866c7d3985f4e9