Docker for Windows 10 Home ~導入プロセスと要チェック点~

# はじめに

Windows 10 ProではHyper-Vなどを利用することでDockerを使用することができるものの、Windows 10 HomeではHyper-Vの機能は搭載されておらず、Dockerを動作させるにはVirtual Boxなどを使う方法がメインであり、セッティングが複雑であった。しかし、Windows Version 20H1 (2004)から追加された機能WSL2を使うことで、Windows 10 Homeでも容易にDocker環境を作成できるようになった。以下にその方法を示す。

ちなみに使用したDocker DesktopとWindows 10 Homeのバージョンは以下の通りである。

- Docker Desktop：3.1.0
- Windows 10 Home：2004

# System Requirements

[Docker Docsの情報](https://docs.docker.com/docker-for-windows/install-windows-home/)によれば、Docker Desktopの動作必要環境は以下の通りである。

> **System Requirements**
> Windows 10 Home machines must meet the following requirements to install Docker Desktop:

> - Install Windows 10, version 1903 or higher.
> - Enable the WSL 2 feature on Windows. For detailed instructions, refer to the [Microsoft documentation](https://docs.microsoft.com/en-us/windows/wsl/install-win10).
> - The following hardware prerequisites are required to successfully run WSL 2 on Windows 10 Home:
    - 64 bit processor with [Second Level Address Translation (SLAT)](https://en.wikipedia.org/wiki/Second_Level_Address_Translation)
    - 4GB system RAM
    - BIOS-level hardware virtualization support must be enabled in the BIOS settings. For more information, see [Virtualization](https://docs.docker.com/docker-for-windows/troubleshoot/#virtualization-must-be-enabled).
> - Download and install the [Linux kernel update package](https://docs.microsoft.com/windows/wsl/wsl2-kernel).

ただ、WSL2やLinuxカーネルのインストールについてはDocker Desktopのインストールとともに行えるので、この時点ではまず、

- **Windows 10のバージョン**
- **CPUのVirtualizationの有効化**
- (ほとんど該当するであろうが)Windowsが64 bit版か、メモリが4GB以上か

の確認をしなければならない。

# Windows 10 のバージョン

Windows 10 のバージョンは`スタートメニュー(右クリック) > システム`から確認可能。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1087081/3eb99e00-08ad-33d5-21e1-23f82b745e91.jpeg" width="400px">
上の画像のように基本的に更新をしていれば必要バージョンである**1903**より上になっているはずである。

# CPU Virtualization (要チェック)

`スタートメニュー(右クリック) > タスクマネージャー > パフォーマンスタブ`から確認可能。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1087081/058a5581-7aef-55d7-d7ae-7759d8acdc7f.jpeg" width="600px">
問題はこの中の項目の`仮想化`が**有効**でないといけないのにもかかわらず、上の画像のように**無効**となっているケースがあることである。この場合、**有効化作業**が必要である。

## CPU Virtualization checking

まずそもそも仮想化に適応しているCPUなのかを確認しよう。

- CPUがIntel製なら「[インテル®プロセッサー識別ユーティリティー](https://downloadcenter.intel.com/ja/download/28539/Intel-Processor-Identification-Utility-Windows-Version)」をダウンロード
- CPUがAMD製なら「[AMD V検知ユーティリティ](http://download.amd.com/techdownloads/AMD-VwithRVI_Hyper-V_CompatibilityUtility.zip)」をダウンロード (直接リンクなので注意)

手順はインストーラーに沿って行えば問題ない。詳細を知りたい場合は、「[バーチャライゼーション(VT)を有効にする方法] (https://support.bluestacks.com/hc/ja/articles/115003174386-PCでバーチャライゼーション-VT-を作動させるには-)」の「**PCがバーチャライゼーションに対応しているかの確認方法**」を参照。

参考のために載せるが、私のPCはAMD製のCPUのため、以下の表示が出た。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1087081/73d34388-b6bc-504f-4aaf-acefcfca9389.jpeg" width="600px">

表示の通りバーチャライゼーション無効になっている状態であるが、BIOSで有効化すれば仮想化は可能であるという意味に捉えられる。

仮想化が可能なCPUであることが判明したのならば、BIOSでVirtualizationの設定を有効化すれば良い。BIOS設定といえば特定のキーを押しながらPCを起動させ設定画面に移動する方法もあるが、Windows 10では`設定 > 更新とセキュリティ > 回復`から、`PCの起動をカスタマイズ`するという方法にて再起動後の設定ができ、容易にBIOSに入ることができる。これについても詳細は、「[バーチャライゼーション(VT)を有効にする方法](https://support.bluestacks.com/hc/ja/articles/115003174386-PCでバーチャライゼーション-VT-を作動させるには-)」の「**無効状態のバーチャライゼーションを有効にする方法**」を参照。

BIOSの設定まで来た場合PC端末によってそれぞれやり方異なるため、そこからは自身にて調べてもらいたい。基本的には、

- Intel製CPUの場合は`CPU Configuration > Intel Virtualization Technology`の設定を**Disable**から**Enable**へ変更
- AMD製CPUの場合は`CPU Configuration > SVM Mode`の設定を**Disable**から**Enable**へ変更 

すれば良い。

BIOSにて仮想化の設定を有効化して再起動すれば、先程の`スタートメニュー(右クリック) > タスクマネージャー > パフォーマンスタブ`のところで、下の画像のように`仮想化`の項目に有効の表示が出る。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1087081/241d400a-5120-5790-9dd1-00eb6e7b32cb.jpeg" width="600px">

# Docker Desktop

ようやくDockerのSystem Requirementsはカバーできたので、ここから先はDocker Desktopをインストールする。

[Docker Desktop for Windows](https://hub.docker.com/editions/community/docker-ce-desktop-windows/)をダウンロードし起動。表示手順に沿ってそのままインストール作業を進めれば問題ない。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1087081/9c90dc71-4c6d-0122-1dc0-759ab7ee5933.jpeg" width="350px"> <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1087081/81c373e9-b307-e791-c28b-1d3a2fc95fa0.jpeg" width="350px">
再起動後、WSL2の設定をまだ行っていないため、`WSL 2 installation is incomplete.`というウィンドウが出現する。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1087081/54498cc4-245f-6fe6-2012-4dfd66eb6863.jpeg" width="600px">
RestartもCancelも押さず、そこにあるURL (https://aka.ms/wsl2kernel) へ移動し、「**手順 4 - Linux カーネル更新プログラム パッケージをダウンロードする**」に従う。

「[x64 マシン用 WSL2 Linux カーネル更新プログラム パッケージ](https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi)」をダウンロードしてインストール。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1087081/557af132-dc10-bf52-07dc-fbccb99bf421.jpeg" width="600px">
インストール後、Windows PowerShellを開き、WSL2を既定のバージョンとして設定するために以下のコマンドを入力。

```PowerShell:WindowsPowerShell
wsl --set-default-version 2
```

設定後、Microsoft Storeから必要な Linuxディストリビューションをダウンロード＆インストールする。今回は[Ubuntu 20.04 LTS](https://www.microsoft.com/store/apps/9n6svws3rx71) を選択した。

インストール完了後通知文が出るので、そこからUbuntuを起動 (もしくはMictosoft Storeやスタートメニューから起動) 。セットアップを行う。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1087081/dbbdacb7-d010-9853-fd2d-c35ca3e06a95.jpeg" width="400px">
この際、

```
Installing, this may take a few minutes...
WslRegisterDistribution failed with error: 0xc03a001a
Error: 0xc03a001a ???????????????????????????????????????????????????
```

といったエラーが出た場合はディストリビューションのディレクトリの圧縮を解除すれば良いらしい。私はエラーが出たので、「[WSL2のインストール時にWslRegisterDistribution failed with error: 0xc03a001aで失敗するときの対処法] (https://qiita.com/kuryus/items/27a7206c64eca7ba710b)」を参考に圧縮を解いたら、問題なくインストール画面に移行できたため、そのまま`username`と`password`を決めてセットアップ完了。

```
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:
New password:
Retype new password:
passwd: password updated successfully
Installation successful!
```

Linux ディストリビューションのセットアップまで終わったら、先程のDockerのウィンドウ、`WSL 2 installation is incomplete.`からRestartボタンを押す。そうするとDocker for Desktopが再起動され、最終的にDocker is runningの表示まで出れば完了。dockerコマンドも動き、getting-startedもできるはず。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1087081/53b2c745-2aa4-93ac-def4-abdee75b086e.jpeg"> <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1087081/e6c5cfef-c882-e859-48ea-14a6abaca2f3.jpeg">
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1087081/fa17432e-686e-5211-c399-4931220d6947.jpeg" width="600px">
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1087081/58189c82-b95e-d528-f8c2-b8e3ce53c2b3.jpeg" width="800px">

# おわりに

このようにWindows 10 Homeにても容易な方法にてDockerを導入することが可能となった。1つ気をつけるポイントとしては、CPUの仮想化が有効になっているか否か、という部分であるように感じられる。Windowsバージョンが必要バージョンを満たしているのにも関わらず上手くDockerの導入ができない場合には、一度**CPU Virtualization**の確認を行うと良いかもしれない。

# 参考

- [バーチャライゼーション(VT)を有効にする方法](https://support.bluestacks.com/hc/ja/articles/115003174386-PCでバーチャライゼーション-VT-を作動させるには-)
- [Windows 10用Windows Subsystem for Linuxのインストールガイド](https://aka.ms/wsl2kernel)
- [WSL2のインストール時にWslRegisterDistribution failed with error: 0xc03a001aで失敗するときの対処法] (https://qiita.com/kuryus/items/27a7206c64eca7ba710b)