・はじめに

新規にPCを購入したため、良い機会なのでWSL2の導入を頭から記録してみました。
公式にはCentOS8でのDockerCEのサポートはされていない様ですが、最新の環境で動作させてみたかったので試してみました。
最後に大きく詰まった箇所があり、そちらの解決方法については後編にてご紹介します。

・環境作成

1.環境確認

WSL2の動作環境はWindowsのバージョン2004かつビルドが19041以上なので、環境の確認をしていきます。
Windows+Rでファイル名を指定して実行を開き、「winver」を入力してOKで以下のようなダイアログが出るので、ここでバージョン確認ができます。

2.仮想マシンの有効化

WSL2のインストール前には、「仮想マシンプラットフォーム」の機能を有効にする必要があるので、以下のURLの通り作業していきます。
https://docs.microsoft.com/ja-jp/windows/wsl/install-win10#enable-the-virtual-machine-platform-optional-component
PowerShellを管理者として実行します。

管理者モードで実行した後に、以下のコマンドを入力し、仮想マシンの有効化を行います。仮想マシンの有効化あとには一度再起動します。

> dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

3.WSLの有効化

管理者モードでPowerShellを実行した後に、以下のコマンドを入力し、WSLの有効化を行います。WSLの有効化あとには一度再起動します。

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

4.仮想マシンとWSLの有効化の確認

「Windowsの機能の有効化または無効化」を開き、「仮想マシン プラットフォーム」と「Linux 用 Windows サブシステム」にチェックが入っていれば有効化が成功しています。

5.WSL1からWSL2への切り替え

以下コマンドを実行しましたが、以下キャプチャの様にエラーになりました。

> wsl –set-default-version 2

上記のエラーになった場合はカーネルの更新が必要なため、カーネルの更新を行います。
以下URLから「wsl_update_x64.msi」をダウンロードし、実行します。
https://docs.microsoft.com/ja-jp/windows/wsl/wsl2-kernel

カーネルの更新後に同じコマンドを実行します。カーネルの更新によって、エラーが解決し、正常終了しました。

6.Linuxイメージのインストール

LinuxのイメージはUbuntuなどと同じ様に、CentOSについてもMicrosoftStoreにありますが、有料です。
今回はMicrosoftStoreからではなく、GitHubのプロジェクトで無料で導入可能なので、そちらからインストールしていきます。

では、以下のGitHubプロジェクトから、CentOS8のインストーラをダウンロードし、インストールを行います。
https://github.com/yuk7/CentWSL

インストール後、以下のコマンドを実行し、インストールされているOSを確認します。

> wsl -l -v

ここまででWSL2とCentOS8のインストールは完了です。
続いて、windows Terminalを導入していきます。

・WindowsTeminal導入

MicrosoftStoreでWindowsTerminalをインストールします。

インストールしたWindowsTeminalを起動すると、タブメニューからインストールしたOSが選択できるので、選択するとそのOSを利用できます。

・Dockerのインストール

1.リポジトリの登録

以下コマンドでDockerのリポジトリをdnfに登録します。

> dnf config-manager –add-repo=https://download.docker.com/linux/centos/docker-ce.repo

以下コマンドでDockerのリポジトリが登録された事が確認できました。

> dnf repolist –all

2.Dockerのインストール

以下コマンドでDockerのインストールを行いますが以下の様にエラーになります。
原因は、containerd.ioのバージョン問題で、要求しているバージョンのcontainerd.ioがCentOS8対応版がないため。

> dnf install docker-ce

CentOS8の対応版は現状無いため、上記コマンドに–nobestオプションをつけてCentOS7用のパッケージをインストール。

> dnf -y install docker-ce –nobest

3.Dockerの実行

以下コマンドでDockerを実行しようとしたところ、エラーが発生。

> systemctl start docker

エラーの原因について調査したところ、pid1がsystemdでないため発生している様子。
調べたところ、WSL2ではデフォルトではsystemdが無効化されており、そもそも起動していない様子。
後編では、Dockerの実行に関連する問題を解決し、Dockerの実行を行います。