Windows版のDockerをインストールする前に確認すること(システム要件の確認)

# 初めに
本記事は、Windows版のDockerをインストールする前に確認してほしいこと(__システム要件の確認__)について記載しています。まぁ、本来は何かをインストールする際にそれが自身の環境で動く要件を満たしているか確認するのは当たり前のことですがこの記事の投稿者はそれをしてなかったみたいなので・・・。

# 事の発端
以前、Windows版のDockerのインストール方法についての記事を書きました。その記事では、「__WSL2__」と「__Docker Desktop for Windows__」のインストールを行う方法と動作確認としてJavaとGradleをの開発環境の構築を行ってみるという記事の内容でした。
記事書くときは実際に同じ操作を実施しながら記事を記載しています。なので、「__WSL2__」と「__Docker Desktop for Windows__」のインストールから実施していました。インストールはスムーズに行えたのですが、動作確認でDockerを実行した際に問題が起きました。それは「__パソコンの動作が重くなってしまう__」ということです。結論その原因は「 __システム要件を満たしていない__」ことが原因でした。本来事前に「__システム要件の確認__」をしておけばよかったのですが、自分はそれをせずにパソコンの初期化まで行っていたので、みなさんもまずは「__システム要件の確認__」を忘れないようにしてください。

ちなみに下記はDockerのインストール方法をする記事です。興味があればご覧ください。

https://qiita.com/T-H9703EnAc/items/8090e7cc3b0b4aa40130

# 本題(Dockerをインストールするのに必要な要件)
まずは、公式のシステム要件を確認してください。

https://matsuand.github.io/docs.docker.jp.onthefly/desktop/windows/install/#system-requirements

今回自分は「__WSL2__」を使用した方法を行っているので「__WSL2__」のシステム要件について記載します。

```:公式サイトのシステム要件
・Windows 11 64 ビット: Home または Pro バージョン 21H2 またはそれ以降。 あるいは Enterprise または Education バージョン 21H2 またはそれ以降。

・Windows 10 64 ビット: Home または Pro 2004 (build 19041) またはそれ以降、 Enterprise または Education 1909 (build 18363) またはそれ以降。

・Windows における WSL 2 機能の有効化。 詳しくは Microsoft のドキュメント を参照してください。

・Windows 10 上、または Windows 11 上の WSL 2 を正常に実行するには、以下のハードウェア要件を満たす必要があります。

　・第 2 レベルのアドレス変換（Second Level Address Translation; SLAT）に対応した 64 ビットプロセッサー。

　・4 GB のシステム RAM

　・BIOS 設定において BIOS レベルのハードウェア仮想化サポートが有効であること。 詳しくは 仮想化機能 を参照してください。

・Linux カーネルアップデートパッケージ のダウンロードとインストール。
```

|No|確認項目|
|---|---|
|1|[OSビルド](#1osビルド)|
|2|[WSL2機能の有効化](#2wsl2機能の有効化)|
|3|[WSL2のシステム要件](#3wsl2のシステム要件)|
|4|[Linuxカーネルのアップデート](#4linuxカーネルのアップデート)


# 1:OSビルド
まず、最初の2行は、OSビルドのバージョンについて聞かれています。
```:OSビルドのシステム要件
・Windows 11 64 ビット: Home または Pro バージョン 21H2 またはそれ以降。 あるいは Enterprise または Education バージョン 21H2 またはそれ以降。

・Windows 10 64 ビット: Home または Pro 2004 (build 19041) またはそれ以降、 Enterprise または Education 1909 (build 18363) またはそれ以降。
```
OSビルドの確認方法は、「__設定__」⇒「__システム__」⇒「__詳細情報__」の「__Windowsの仕様__」で確認できます。

「__設定__」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2663952/971dab82-05da-0791-b78f-e71c2ac3dd65.png)
「__システム__」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2663952/825df322-bca4-c932-09f8-c5987372fcb0.png)
「__詳細情報__」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2663952/f57abd75-6fb2-1fdd-47ca-a3b8d75012a8.png)
「__Windowsの仕様__」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2663952/28c88587-459d-b33d-a76a-6cad4dd949a6.png)
または、「__コマンドプロンプトやPowerShell__」で次のコマンドを実行してください。
```:実行コマンド
systeminfo
```
以下は実行結果の抜粋です。
```:実行結果(一部省略)
ホスト名:               DESKTOP-C9JJTM0
OS 名:                  Microsoft Windows 10 Pro
OS バージョン:          10.0.19044 N/A ビルド 19044
OS 製造元:              Microsoft Corporation
OS 構成:                スタンドアロン ワークステーション
OS ビルドの種類:        Multiprocessor Free
...省略
```
筆者が現在使用しているPCは、以下の「__OSビルド__」なのでシステム要件を満たしていると言えます。
__※ちなみに、インストール方法の記事を書いたときに動かしているパソコンとは違います。__
```:筆者のパソコンの場合
# 設定画面の場合
エディション Windows 10 Pro
OSビルド 19044.1826

# コマンドプロンプト/PowerShellの場合
OS 名:                  Microsoft Windows 10 Pro
OS バージョン:          10.0.19044 N/A ビルド 19044
```

# 2:WSL2機能の有効化
これは、そもそも「__WSL2__」が使用できるかという意味なのでインストールが行われていればOKです。
```:WSL2機能の有効化のシステム要件
Windows における WSL 2 機能の有効化。 詳しくは Microsoft のドキュメント を参照してください。
```

# 3:WSL2のシステム要件
[WSL2機能の有効化](#2wsl2機能の有効化)ではインストールできればOKと記載しましたが、「__WSL2__」自体の「__システム要件__」がございます。
```:
・Windows 10 上、または Windows 11 上の WSL 2 を正常に実行するには、以下のハードウェア要件を満たす必要があります。

　・第 2 レベルのアドレス変換（Second Level Address Translation; SLAT）に対応した 64 ビットプロセッサー。

　・4 GB のシステム RAM

　・BIOS 設定において BIOS レベルのハードウェア仮想化サポートが有効であること。 詳しくは 仮想化機能 を参照してください。

```
## SLATに対応しているか
まずは、SLATに対応しているかどうかについてです。
```:SLATに対応しているか
・第 2 レベルのアドレス変換（Second Level Address Translation; SLAT）に対応した 64 ビットプロセッサー。
```
そもそもSLATがよくわからないというかたもいるでしょう。

https://forest.watch.impress.co.jp/docs/review/569777.html#:~:text=%E2%80%9CSLAT%EF%BC%88Second%20Level%20Address%20Translation,%E5%8C%96%E6%94%AF%E6%8F%B4%E6%A9%9F%E8%83%BD%E3%81%AE%E4%B8%80%E7%A8%AE%E3%80%82

上記の記事を見るとあります。
```:SLATとは
“SLAT（Second Level Address Translation）”とは、ゲストOSとホストOSの間で行われる物理メモリの
アドレス変換をハードウェアによって行う仮想化支援機能の一種。
```
まぁ、仮想化機能を効率よく行ってくれるものと思っても問題ないと思います。

「__SLAT__」に対応しているとは「__Hyper-V__」と呼ばれるものが動かせれば「__SLAT__」に対応しているということになります。以下のWikipediaの記事を見るとその意味がわかります。

https://en.wikipedia.org/wiki/Second_Level_Address_Translation#Support_in_software

```:WikipediaのSupport in softwareより抜粋
(英文)
Hyper-V for Windows Server 2008 R2, Windows 8 and later.[13] The Windows 8 (and later Microsoft Windows) Hyper-V actually requires SLAT.[14][15]

(和訳(Google翻訳))
Hyper-V for Windows Server 2008 R2、Windows8以降。Windows 8（およびそれ以降のMicrosoft Windows）Hyper-Vには、実際にはSLATが必要です。
```
つまり、「__Hyper-V__」が使えれば、それは「__SLAT__」に対応しているという意味にもなります。

では、「__Hyper-V__」が使えるかどうかを確認する方法についてです。
「__コントロールパネル__」⇒「__プログラム__」⇒ 「__プログラム機能__」の「__Windowsの機能の有効化または無効化___」⇒ ここに「__Hyper-V__」があるかどうか

「__コントロールパネル__」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2663952/9060835f-866f-9f35-3f3f-6200162c8358.png)
「__プログラム__」の「__Windowsの機能の有効化または無効化___」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2663952/92d5f2a1-b3e8-9d61-c938-5683d0bfebf5.png)
「__プログラム機能__」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2663952/b5e5d7e0-1eea-d13c-dfa2-daf6cd1ce59d.png)
ここに「__Hyper-V__」があるかどうか。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2663952/53efa017-b2af-0334-d783-90b4e255859b.png)

上記を見るとチェックはついていませんがこのPCで「__Hyper-V__」が動かせるので、必然的に「__SLAT__」に対応していると言えます。

https://docs.microsoft.com/ja-jp/virtualization/hyper-v-on-windows/reference/hyper-v-requirements

```:最終確認の注意事項
コントロール パネル: [Windows の機能の有効化または無効化] に Hyper-V ではなく
Windows ハイパーバイザー プラットフォームが表示される場合、
お使いのシステムは Hyper-V との互換性がない可能性があります。
その場合、上記の要件をクロスチェックしてください。 
既存の Hyper-V ホストで systeminfo を実行すると、
Hyper-V の要件セクションでは、次の情報を読み取ります。
```
※上記の「__最終確認__」の注意事項を見ると「__Windows ハイパーバイザー__」が表示されている場合は「__Hyper-V__」との互換性がないとあるので「__SLAT__」に対応していない可能性があります。ちなみに、インストールの記事で使用したPCには「__Hyper-V__」はなく、「__Windows ハイパーバイザー__」ありました。(これが原因?)

## PCにメモリが4GB以上搭載しているかどうか。
次は簡単です。使用するPCにメモリが4GB以上搭載しているかどうかです。
```:PCにメモリが4GB以上搭載しているかどうか
・4 GB のシステム RAM
```
確認方法は[OSビルド](#1osビルド)と同じ方法で確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2663952/f7116328-25c0-7918-dabe-6ad322abd19e.png)
「__コマンドプロンプト__」または「__PowerShell__」で実行
```:実行コマンド
systeminfo
```
```:実行結果(一部省略)
...省略
物理メモリの合計:       16,301 MB
利用できる物理メモリ:   5,043 MB
仮想メモリ: 最大サイズ: 27,012 MB
仮想メモリ: 利用可能:   4,458 MB
仮想メモリ: 使用中:     22,554 MB
...省略
```
上記を見ると16GBあるので対応してると言えます。
※ちなみに、インストールの記事で使用したPCのメモリ搭載容量は4GBでした。システム要件範囲内のものですが実際にDockerを実行したりするとメモリの使用率が100%に近いものとなっていました。なのでDockerやその他のアプリやプログラムを動かすことを考えると「__最低でも8GB__」は必要なのかもしれません。

## 仮想化が有効かどうか
最後に「__仮想化が有効かどうか__」についてです。
```
・BIOS 設定において BIOS レベルのハードウェア仮想化サポートが有効であること。 詳しくは 仮想化機能 を参照してください。
```
[SLATに対応しているか](#slatに対応しているか)で確認したときのように以下の項目について確認してください。
```:以下の項目にチェックがあるか
Virtual Machine Platform <==> 仮想マシンプラットフォーム。
Windows Subsystem for Linux。 <==> Linux用Windowsサブシステム
Windows 起動時のハイパーバイザー有効化。<==> Hyper-V
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2663952/511e1e76-f976-f2fc-b264-4fd82c0f33c6.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2663952/6c3f1af8-97ab-84e3-2b28-ac586222193d.png)

タスクマネージャーのパフォーマンスタブで「__仮想化が有効かどうか__」について確認します。
```:いかについても確認
仮想化技術の有効化
```
「__Ctrl + Shift + Esc__」でタスクマネージャーを開いてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2663952/f8ca8933-8bed-5e7f-a980-284c1c83ece5.png)
「__パフォーマンス__」タブをクリックし「__仮想化__」が「__有効__」になっていることを確認してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2663952/6ab13079-20e7-09f7-11a6-72304fd4b947.png)

# 4:Linuxカーネルのアップデート
最新のインストール方法だとおそらく設定不要だと思うので割愛します。
```:Linux カーネルのアップデート。
・Linux カーネルアップデートパッケージ のダウンロードとインストール。
```
これで、システム要件で確認することはすべてです。

# 最後に
「__システム要件の確認__」は忘れないようにしてください!
以上、何かの参考になれば・・・。