WSL 2 対応 Docker Desktop for Windowsを使うための手順

# 概要

Windows 10 で WSL 2 (Windows Subsystem for Linux)の動作要件を満たしている状態で、Docker Desktop を使えるようにするまでの流れを整理しました。ざっくり書きますと「Your system supports WSL 2!」が表示された時、WSL 2 に移行するための手順です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13002/47c317ca-8916-d5dd-235e-19870b0ef47e.png)


動作環境を満たすと、Docker Desktop 起動時、この表示が出ます。

※ 動作環境は、Winddows 10 Inside Program 等で動作要件を満たすか、あるいは GA 版の提供を待つ必要があります。
※ WSL1 や WSL を使わないバージョンからのデータは自動的に移行されません。


この投稿は、[公式の WSL 2 ドキュメント](https://docs.microsoft.com/ja-jp/windows/wsl/install-win10) を読んでも、このままでは Docker for Desktop を動かすに至らなかったので、状況整理のために作成しました。

# 動作要件

WSL2 が動作する Windows 10 ( [※詳細](https://docs.microsoft.com/ja-jp/windows/wsl/install-win10) ）

- `バージョン 2004、ビルド 19041 以上に更新された Windows 10 を実行している。`

本原稿執筆時点では、 Inside Program に加入する必要があります。


# 手順

全く WSL に対応していないシステムで、WSL 2 対応の Docker Desktop for Windows を使うための手順です。

## 動作要件を満たすかどうかの確認

Docker Desktop for Windows を起動し、次のウインドウが自動的に出ることを確認します。おそらく、システムが対応すると、意図せず次の画面が出ます。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13002/47c317ca-8916-d5dd-235e-19870b0ef47e.png)


**もし、データ移行の準備が出来ていなかったり、WSL 2 に対する理解が十分でなければ「Not now」をクリックし、現時点では WSL 2 に移行すべきではありません。** 

ここで「Enable WSL 2」（WSL 2）を有効化するをクリックすると、システム状態のチェックに入ります。デフォルトの Windows 10 では WSL は入っていないため、「WSL 2 is not installed」（WSL 2 はインストールされていません）と表示が出ています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13002/f5ee007d-1760-b4d0-276b-869479d03a5c.png)

ここでセットアップ作業を進行するには「 Stop Docker 」をクリックします。

## WSL 2 のセットアップ

ここは基本的に [公式ドキュメント](https://docs.microsoft.com/ja-jp/windows/wsl/install-win10) の通り作業をします。

「PowerShell」を管理者として実行します。Windows ボタンを押し、「PowerShell」と入力すると実行するプログラム候補が自動的に出ますので、「管理者として実行」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13002/513c83eb-a993-6126-7251-0172139c68d4.png)

次に PowerShell が起動します。

WSL をセットアップするコマンド `dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
` を実行します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13002/3df7254d-f0a8-9094-6662-6d5b1f5012a0.png)

公式ドキュメントでは「wsl --set-default-version 2」の実行とありますが、

```
PS C:\WINDOWS\system32> wsl --set-default-version 2
wsl : 用語 'wsl' は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識されません。
名前が正しく記述されていることを確認し、パスが含まれている場合はそのパスが正しいことを確認してから、再試行してください
。
発生場所 行:1 文字:1
+ wsl --set-default-version 2
+ ~~~
    + CategoryInfo          : ObjectNotFound: (wsl:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException
```

このように `wsl` のパスが通っていない旨の表示が出ます。

PC を再起動します。

再起動後 WSL 2 Linux カーネルの更新が必要です（ [詳細](https://docs.microsoft.com/ja-jp/windows/wsl/wsl2-kernel) ）。

マイクロソフトのドキュメントを確認します。ウェブブラウザで、次の URL を開きます。

- WSL 2 Linux カーネルの更新 | Microsoft Docs
  - https://docs.microsoft.com/ja-jp/windows/wsl/wsl2-kernel

この中の「x64 マシン用の最新の WSL2 Linux カーネル更新プログラム パッケージをダウンロードしてください。」のリンク先をクリックします。

「wsl_update_x64.msi」のダウンロードが開始しますので、ファイルを保存して、ダウンロードが終わったら実行します。

以上が WSL 2 のシステムまわりの設定です。

## Linux ディストリビューションのセットアップ

次は linux ディストリビューションを Windows 10 にセットアップします。Windows 10 では「アプリ」として Linux ディストリビューションが配布されています。WSL 2 で Docker を使うには、Ubuntu など Linux ディストリビューションをセットアップする必要があります（ [詳細](https://docs.microsoft.com/ja-jp/windows/wsl/install-win10#install-your-linux-distribution-of-choice
) ）。

まずは、 [Microsoft Store](https://aka.ms/wslstore) を開きます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13002/cfcabaaa-e0e0-4970-bad8-b7b7920ddfd9.png)



それから「Ubuntu 」を選択し、「入手」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13002/2d39b68c-69c4-1ea6-0f86-47447efbada2.png)

ダウンロードが完了すると、 Windows のスタートメニューをクリックし、「Ubuntu」と入力します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13002/d02d4f67-b700-7c81-d63b-fa631add2864.png)


暫く、次の表示が出るまで待ちます。

```
Installing, this may take a few minutes...
Please create a default UNIX user account. The username does not need to match your Windows username.
For more information visit: https://aka.ms/wslusers
Enter new UNIX username:
```

ここで、セットアップする Ubuntu のユーザ名とパスワードを指定します。

```
Enter new UNIX username: docker
New password:
Retype new password:
```

ここでは `docker` と入力し（何でも構いません）、次に、パスワードを設定しています。

そうすると、Ubuntu にログインできます。

```
Installation successful!
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

Welcome to Ubuntu 20.04 LTS (GNU/Linux 4.19.84-microsoft-standard x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

  System information as of Sat May 23 12:25:38 JST 2020

  System load:  0.13               Processes:             8
  Usage of /:   0.4% of 250.98GB   Users logged in:       0
  Memory usage: 0%                 IPv4 address for eth0: 172.29.185.157
  Swap usage:   0%

0 updates can be installed immediately.
0 of these updates are security updates.


The list of available updates is more than a week old.
To check for new updates run: sudo apt update


This message is shown once once a day. To disable it please create the
/home/docker/.hushlogin file.
```


この状態では特にすることもないので、 `exit` を入力し、終了します。

## PowerShell で WSL2 の設定

それから、再び PowerShell で管理者モードとして、実行するべき WSL のバージョンを `2` と明示します。

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

## Docker Desktop の確認

あとは Docker Desktop を起動します。

画面上、「Skip tuotrial」を選び、起動した画面の右から3つめに「歯車」のマークがあり、そこをクリックすると `User the WSL 2 based engine` にチェックが入っていれば、対応完了です。もし入っていなければ、チェックをいれます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13002/ed6209a4-16a1-c176-8d30-294a9b0ca779.png)

この状態で、Docker は PowerShell 上で使えますので、「dokcer pull hello-world」や「docker run hello-world」などが使えます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13002/7b048e0a-b345-6c87-1d31-d22e498d5615.png)


# 参考文章

- Windows Subsystem for Linux (WSL) を Windows 10 にインストールする | Microsoft Docs
  - https://docs.microsoft.com/ja-jp/windows/wsl/install-win10