記事のレベル; ★★★☆☆
はじめに
Windows × Rails6でDocker desktop for Winsowsを使用できるようにすることを目指すにあたって、windowsでLinuxを使う環境が必要です
そのLinux環境がWSL。Docker desktopは「WLS2」にしないといけないようです。
WLSとは、windows linux systemの略です。
WLSとWLS2は全く別物らしいですが、「スーパーサイヤ人」と「スーパーサイヤ人2」みたいなノリで押さえておけばいいでしょう。
DockerはそのWLS2にのみ対応しているようです。
イメージ的にはこんな感じ
本記事の続き
環境
前提
具体的な方法
手順
windowsでLinuxを使うために、まずは左下の虫眼鏡マークをクリックして
「windowsの機能の有効化または無効化」から、
Linux用 Windows サブシステムにチェックを入れて有効化
windowsのバージョンアップ windows version 2004以上かつビルド番号190411以上じゃないと使えないらしい
(↑ビルド番号のこと知らずに先に進めようとしてここで1時間くらい沼った)
・ビルド番号を調べるには
コマンドプロンプトを開いて
ver
と打てば自分のwindowsのビルド番号が確認できる。
ここでは18362がビルド番号
要件を満たしていなければ
https://www.microsoft.com/ja-jp/software-download/windows10
ここから「今すぐアップデートをポチる」
25GBくらいの容量の空きがないと途中でバグるかもしれないっぽい。
・power shellを起動させる。
windowsの右下の虫眼鏡マークのところに「powershell」って打ったら出てくる。
(管理者権限がないとコマンド受け付けませんとか調子に乗ったこと言ってきたら
Start-Process powershell.exe -Verb runas
で管理者権限有りのpowershellに行ける。)
そもそも管理者として実行するを押して開くを押したら上の煩わしい作業は不必要
(筆者は管理者がどうとか言ってくるので無駄にコントロールパネルいじってた↑ここで1時間くらい沼った)
・powershellにて
WSL1を使えるようにするには以下のコマンドを入力
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
WSL2を使えるようにするには以下のコマンドを入力
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
を打つ。(スーパーサイヤ人2になった気分になれる)
・↑はあくまでも、WSL2が使える状態になっただけなので、
バージョンアップのために
https://docs.microsoft.com/en-us/windows/wsl/wsl2-kernel
のページから download the latest WSL2 Linux kernelをタウンロードしてインストール
沼ったエラー
(↓ここで3時間くらい沼った)
筆者はインストールするとこんなエラーが出ました。
解決するには
↑でダウンロードしたファイルを
C:\Windows\System32\lxss\tools
にコピーして、そこで実行する必要があるそうです!
これでおk!
その後の手順
WSL2をデフォルトに設定するためにpowershellで
~> wsl --set-default-version 2
をうつと、音沙汰もなくなにごともなかったかのように、WSL2が使えるようになってる。
このままでは怖いので、ホントに確認入できたか確認するためにpowershellで
wsl -l -v
を打つとバイナリなんとかとかほざいてエラーになるので、
Ubuntu 18.04 LTSをインストール。
https://www.microsoft.com/ja-jp/p/ubuntu-1804-lts/9n9tngvndl3q?rtc=1&activetab=pivot:overviewtab
導入後当然のようにエラー吐いてくる。
仮想ディスク システムの制限が関係してるらしい
C:\Users\[name]\AppData\Local\Packages
にある
CanonicalGroupLimited.Ubuntu18.04onW…
を右クリック > プロパティ > 詳細設定 > 内容を圧縮してディスク領域を節約する
のチェックを外す。
をするとおk
(↑ここで2時間くらいは沼った)
powershellにて(もちろん管理者権限で)
wsl -l -v
を打って↓のようになればOKです。お疲れ様です。