Windows 10 Home で WSL 2 + Docker を使う

今月にアップデートを予定している Windows Version 20H1 (2004) の目玉機能の WSL 2 を使うことで Windows 10 Home でも Docker が使えるようになります。もともと Windows 10 Home では Virtual Box, Windows 10 Pro では Hyper-V などを利用することで Docker を利用することができたのですが、おそらく今後は使いやすくて便利な WSL 2 を利用すること増えるのではないかと考えています。この記事では 20H1 Preview Version を利用して、インストールから実行までをまとめたものになります。もちろん Windows 10 Pro でも、これと同じ手順で問題ないです。

## WSL 2

まず最初に WSL 2 をインストールして実行してみます。

### Enable Virtualization

WSL 2 を起動するためには CPU の Virtualization が有効化されている必要があります。 Task Manager を開いて Performance > CPU 画面から、 Virtualization: Enabled になっていることを確認します。

もし Enabled になっていない場合は Bios を開いて CPU Configuration > Intel (AMD) Virtualization Technology: Enabled にする必要があります。

[![Image from Gyazo](https://i.gyazo.com/6444a23ff92b6e8f24948d181055864d.png)](https://gyazo.com/6444a23ff92b6e8f24948d181055864d)

### Enable Windows Feature

管理者モードで Windows PowerShell or PowerShell 6 を起動して二つのコマンドを実行します。再起動しないと機能が有効にならないため、コマンドを実行後に再起動してください。

```ps1
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform
# 🚀再起動を忘れずに
```

### Install WSL 2 kernel

このページ [Updating the WSL 2 Linux kernel | Microsoft Docs](https://docs.microsoft.com/en-us/windows/wsl/wsl2-kernel) を開いて _download the latest WSL2 Linux kernel_ を選択して Installer をダウンロードします。ダウンロードした Installer を実行してください。

今後の予定では Terminal から Install できるようになるとのことです。

### Install Ubuntu (Linux OS)

Microsoft Store から _Ubuntu-20.04_ を Install します。今回は Ubuntu を利用しましたが、 [Install Windows Subsystem for Linux (WSL) on Windows 10 | Microsoft Docs](https://docs.microsoft.com/en-us/windows/wsl/install-win10#install-your-linux-distribution-of-choice) に記載されている通り、 Ubuntu ではなく好きな Linux でも問題ないと思います。 Microsoft Store 以外からの Install も可能と書いてありました。

### WSL 2 の設定、実行確認

これで WSL 2 を利用する準備が整いました。 PowerShell や Terminal (Command Prompt) を開いて、実際に WSL のコマンドを実行してみます。

デフォルトで WSL 2 を利用するコマンドと、 Install した Ubuntu で WSL 2 を利用するコマンドを実行します。コマンド実行後に `wsl -l -v` を実行して Ubuntu が WSL 2 で動いていることを確認します。

```shell
wsl --set-default-version 2
wsl --set-version Ubuntu-20.04 2

wsl -l -v
#   NAME                   STATE           VERSION
# * Ubuntu-20.04           Running         2
```

最後に適当な WSL コマンドを実行して Linux のコマンドが動作することを確認します。 Windows 上からは `wsl {command}` の形式でコマンドを実行するか、 `wsl` コマンドを実行して Linux 上にログインしてからコマンドを実行することができました。

```shell
wsl lsb_release -a
# No LSB modules are available.
# Distributor ID: Ubuntu
# Description:    Ubuntu 20.04 LTS
# Release:        20.04
# Codename:       focal
```

## Docker

WSL 2 が Install できたら、次は Docker をインストールして実行してみます。

### Install Docker Desktop

このページ [Docker Desktop for Mac and Windows | Docker](https://www.docker.com/products/docker-desktop) を開いて Installer をダウンロードします。ダウンロードした Installer を実行してください。 Install の途中で表示される Configuration は _Enable WSL 2 Windows Features_ のチェックを外さないようにしてください。

[![Image from Gyazo](https://i.gyazo.com/0ae527a2e1b82d1ae210447c0c20d29f.png)](https://gyazo.com/0ae527a2e1b82d1ae210447c0c20d29f)

WSL 2 が正しく Install されている場合は General 画面の _Use the WSL 2 based engine_ にチェックがついていることと、 Resources 画面の _Enable integration with my default WSL distro_ にチェックがついているはずです。もしチェックがついていなければ、つけてください。

[![Image from Gyazo](https://i.gyazo.com/4f29d4fba7be53208f70490daa0fe346.png)](https://gyazo.com/4f29d4fba7be53208f70490daa0fe346)

[![Image from Gyazo](https://i.gyazo.com/7f75012d73b7e7d09331288da5fd60c2.png)](https://gyazo.com/7f75012d73b7e7d09331288da5fd60c2)

### Get started

Docker Desktop を起動するとチュートリアルが始まります。手順通り実行していくと Container が起動します。 Container 起動後はブラウザで localhost にアクセスすることで、それっぽい画面が開けるようになります。画面確認後はゴミ箱アイコンをクリックして、 Container を削除してしまってよいです。

[![Image from Gyazo](https://i.gyazo.com/156e2957fb005fbe4cb62ef6d55cfd45.png)](https://gyazo.com/156e2957fb005fbe4cb62ef6d55cfd45)

[![Image from Gyazo](https://i.gyazo.com/89569367e80bc1edbc622d3d162c961f.png)](https://gyazo.com/89569367e80bc1edbc622d3d162c961f)

### Docker コマンド実行確認

もちろんコマンドからも実行可能です。前と同じチュートリアルをコマンドで実行したい場合は、 Terminal を開いてこのコマンドを実行すると同じように、ブラウザでそれっぽい画面が開けるようになります。

```shell
docker run -dp 80:80 docker/getting-started
```

[![Image from Gyazo](https://i.gyazo.com/2a0cfcbf7044b1cd9bdc3c8b0de6ab71.png)](https://gyazo.com/2a0cfcbf7044b1cd9bdc3c8b0de6ab71)

## 参考にしたもの

- [An overview on the the Windows Subsystem for Linux | Microsoft Docs](https://docs.microsoft.com/en-us/windows/wsl/)
- [Docker Desktop を WSL2 で使う (Windows 10) | エンジニアの何でもメモ帳](https://www.engineer-memo.net/20200310-5516)
- [PC でバーチャライゼーション (VT)を作動させるには? – BlueStacks サポート](https://support.bluestacks.com/hc/ja/articles/115003174386-PC%E3%81%A7%E3%83%90%E3%83%BC%E3%83%81%E3%83%A3%E3%83%A9%E3%82%A4%E3%82%BC%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3-VT-%E3%82%92%E4%BD%9C%E5%8B%95%E3%81%95%E3%81%9B%E3%82%8B%E3%81%AB%E3%81%AF-)


## トラブルシューティング

- WSL 2 の設定、実行確認のときに `wsl -l -v` の結果で Legacy に `*` が設定されている場合は、このコマンドで WSL 2 が正しく実行されるようなります。

```shell
wsl --set-default Ubuntu-20.04
```