開発環境では Docker で DB や各種バックエンドを動かすことが多いのですが、WFH が広がる中で自宅が Windows 10 Home で Docker Desktop for Windows 起動できないんだけど、何か手がないかと相談があったりなかったり。
以前試したときは問題なかったのですが、改めて最新の状況で試します。 また、wsl2 の仕組みから言って Hyper-V でホストしたWindows 10 Home でも動作するはずなのでそこも確認です。
Hyper-V に Windows 10 Homeをインストールしているのでその検証結果も知りたい人にも向けていいのではということで。
目次
- 目次
- 更新履歴
- TL;DR
- WSL2について
- Docker Desktop for Windows をインストールする
- Docker の実行確認
- Docker の設定
- Hyper-V 上の Windows 10 Home はだめなの?
更新履歴
- 2020/5/17: Docker Stable に WSL2 対応がきたのを確認したのでEdge限定の記述を修正
- 2020/5/28: Windows 10, version 2004 がきたので、Insider Preview の記述を修正
TL;DR
- Windows 10 Version 2004 (2020 May Update)がGA されました。
るまでは Insider Preview (Slow Ring でok) が必要 - Docker Desktop fo Windows は Stableでok
Edge が必要(Stableはよ) - wsl2 上の Linux ディストロで Docker を動かすのはまた別に
WSL2について
- WSL1 はオワコン
化する運命。 - FAQ 参照 : WSL 2 についてよく寄せられる質問 | Microsoft Docs
Docker Desktop for Windows をインストールする
* Insider Preview を有効にする (Slow Ring)
- Windows Update で Windows 10 2004 にあげる
- Windows Subsystem for Linux の有効化をしてWSL2を使う
- Docker Desktop for Windows をインストール (Edge)
この時点で Windows バージョンは 1909
Insider Preview を Slowring で有効にする
2020/5/28 以降は、Windows Update で降りてくるので Insider Preview が不要です。
Windows Update で Windows 10 2004 にあげる
Docker Desktop を Windows Home に入れるには、19018 以上である必要があるのでWindows Update をかける。 2時間近く時間がかかるので注意。
これで Windows 10 Version 2004 となる。
Windows Subsystem for Linux の有効化をしてWSL2を使う
Docker for Desktop で実施されるので実行する必要がありません。もしもDocker Desktop for Windows をインストール後に間違って無効にした場合にぐらいしか使わない。
Windows Subsystem for Linux と Vitrual Machine Platformを有効にするため、Windows PowerShell を管理者で起動して、コマンドを実行。
Get-WindowsOptionalFeature -Online | where FeatureName -match linux | Enable-WindowsOptionalFeature -Online -NoRestart Get-WindowsOptionalFeature -Online | where FeatureName -match virtual | Enable-WindowsOptionalFeature -Online
再起動される。
wslコマンドが利用可能になっている。ディストロはインストール不要。
$ wsl -l Linux 用 Windows サブシステムには、ディストリビューションがインストールされていません。 ディストリビューションは Microsoft Store にアクセスしてインストールすることができます: https://aka.ms/wslstore
Docker Desktop for Windows をインストール
https://hub.docker.com/editions/community/docker-ce-desktop-windows/
記事公開時点は Edgeが必須でしたが、Stable にきたので Stableでokです。
もしWindows Update をかけていないと、Docker Desktop のインストールがコケる。
Docker Desktop requires Windows 10 Pro/Enterprise (15063+) or Windows 10 Home (19018+)
Windows 10 2004 になっていれば、WSL2 の有効化を効かれるのでそのままOK。
インストール後は再起動する。
再起動後に wsl2 のインストールが完了していないことが言われる。
wsl2 の有効化
Linux カーネル更新プログラムパッケージを入れる。
https://aka.ms/wsl2kernel のダウンロードから。
これで wsl2 が有効になる。
PC を再起動して、docker-desktop が見えるようになる。
$ wsl -l
ついでに wsl2 をデフォルトバージョンにしておく。
$ wsl --set-default-version 2
Docker の実行確認
実行できるか確認する
docker run --rm hello-world
ボリュームマウントも問題ない
Docker の設定
ドライブ共有が不要になった
従来の Docker Desktop for Windows では ホストマシンとコンテナのドライブ共有が必要だったが、これは不要になった模様。 実際、なにもしなくてもボリュームマウントされた。Firewall や アンチマルウェアとのバトルがなくなってめでたい。
Hyper-V 上の Windows 10 Home はだめなの?
問題なく動作する。 Windows 10 Pro 上の Hyper-V で Windows 10 Home をいれても wsl2 + Docker 動かすこともできるし、Azure 上のWindows Server 2019 上で Nested Hyper-V の上に Windows 10 Home をいれても wsl2 + Docker を動かすことができる。
もし CPU 側の 仮想化支援を有効にしていない場合、Windows 10 Home on Hyper-V on Windows Pro も Windows 10 Home on Nested Hyper-V on Windows Server 2019 (Azure) も動作しない。
これが出た場合は、Hyper-V ホストマシンで Set-VMProcessor
コマンドレットを使って、ExposeVirtualizationExtensions を $true にし忘れている。
Set-VMProcessor -VMName "VMName" -ExposeVirtualizationExtensions $true
物理マシンなら UEFI で CPU のAdvance メニューあたりに設定があるはず。