WSL2 と Docker 導入手順の覚書き。
WSL1 から WSL2 に切り替えて、WSL2 上で動作する Docker を導入します。
導入手順は Microsoft の下記ドキュメントを参考にしました。
導入環境
Boot Camp ( intel CPU ) 上の Windows 10 Pro 20H2 (10.0.19042) で、既に WSL1 がインストールされている環境です。
PS C:\> Get-CimInstance -Class Win32_OperatingSystem | Format-List Version
Version : 10.0.19042
PS C:\> wsl -l -v
NAME STATE VERSION
* Ubuntu-20.04 Stopped 1
また、 Hyper-V は無効化されている状態です。
( WSL2 上で Docker を動作させるため無効状態でOK)
Hyper-V の状態は、「 コントロール パネル\すべてのコントロール パネル項目\プログラムと機能 」の「Windowsの機能の有効化または無効化」から確認するか、PowerShellを管理者権限で実行して「Get-WindowsOptionalFeature」コマンドで確認。
Start-Process pwsh.exe -Verb runas
PS C:\> Get-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V
FeatureName : Microsoft-Hyper-V
DisplayName : Hyper-V プラットフォーム
Description : 仮想マシンとそのリソースの作成および管理に使用できるサービスを提供します。
RestartRequired : Possible
State : Disabled
CustomProperties :
BIOS 内部の仮想化を有効にする
Boot Camp で起動していると、BIOS 内部の仮想化が有効になっていない場合があります。
この設定は「タスクマネージャー」の「パフォーマンス」タブにある「仮想化」欄で確認できます。
最初、この設定が無効になっていたため、下記のエラーメッセージが表示され WSL2 が有効化できませんでした。
Error: 0x80370102 ??????????????????????????????????????
コンピューターの BIOS 内部で仮想化が有効になっていることを確認してください
BIOS 内部の仮想化を有効化するには macOS で再起動後、「システム環境設定」から「起動ディスク」 を選択し、ディスクを「BOOTCAMP Windows」に設定してから Windows を起動します。
WSL2 へ切り替える
WSL1 から WSL2 に切り替えます。
WSL1 がインストール済みのため「Linux用Windowsサブシステム」機能は有効になっており、「仮想マシンプラットフォーム」機能は無効化されている状態です。
仮想マシンの機能を有効化するため、 PowerShell を管理者権限で起動し、以下のコマンドを実行します。
有効化したら PC を再起動します。
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
再起動後、上記の参考ドキュメントに記載されている「Linux カーネル更新プログラムパッケージ」をダウンロードしてインストールします。
インストールが完了したら、 WSL2 を既定に設定します。
wsl --set-version Ubuntu-20.04 2
設定完了後、WSL2 に切り替わっているか確認します。
PS C:\> wsl -l -v
NAME STATE VERSION
* Ubuntu-20.04 Running 2
Docker を導入する
Docker の公式サイトから Docker Desktop for Windows のインストーラをダウンロードします。
インストーラを実行し、「Install required Windows components for WSL 2」欄にチェックが付いていることを確認して OK ボタンを押します。
OK ボタンを押すとインストールが始まります。
インストール完了後、「Close and Log out」ボタンが表示され、押すとログアウトします。
ログインすると、自動的に WSL2 をバックエンドに Docker が起動します。
起動後に表示されているチュートリアルを実行したところ問題なく表示されました。
docker run -d -p 80:80 docker/getting-started