(朗報)これまでWindows10 Homeでは動作できなかったDocker DesktopをWSL2機能で動作させる

いろいろとRaspberryPiを触っていて、たまたまカーネルコンパイルを行うためのクロスコンパイル環境をUbuntuで作成しようと思ったのですが、 Windows10 HomeエディションではDocker Desktopが使用できないといった制限がありました。そのため、環境構築にはVirtual Boxなどが必要になり、 かつインストール後にOSインストールも必要になるので、ちょっと面倒だなと思っていました。

最近、使用できるようになったWSL2(Windows Subsystem for Linux Version 2)を使えばHomeエディションでもDocker Desktopが使えるようになったようです。

※仮想化機能が使えないPCではWindows Homeエディションでも使用できないので注意です。BIOSやタスクマネージャーなどで確認しましょう。

f:id:ueponx:20200614195916p:plain


今回の設定でDockerの設定を行い、これをベースにクロスコンパイル環境を作ってみようと思います。

以下を参照させていただきましたありがとうございました。

docs.microsoft.com

dorasu-tech.dorasu.com

qiita.com

Docker Desktop for Windowsインストールの手順

起動するには以下の手順をおこなっていくことになると思います。以前のWSLのバージョンを導入していた場合には、Windowsのアップデートを行ったあとに デフォルトバージョンの変更あたりから作業することになるかなと思います。

  • Windows 10 May 2020 Update(以降)を適用
  • Windows Subsystem for Linux (WSL) を有効化
  • WSLのデフォルトバージョンをWSL2に設定
  • Docker Desktop for Windowsをインストール

Windows 10 May 2020 Update(以降)を適用

Windows 10 May 2020 Updateを適用されているか確認を行います。適用されていればwinverコマンドを実行すると以下のような表示になります。 ここでバージョン 2004、ビルド 19041 より新しいものになっていることを確認します。バージョンが満たない場合にはアップデートを行って バージョンアップを行います。

f:id:ueponx:20200614145554p:plain

ちなみにwinverコマンドを実行するには【Windows ロゴ キー + R キー】を押下して、ファイル名を指定して実行のダイアログを開いてwinverと入力して、【OK】ボタンをクリックすると現在のWindows10のバージョンを表示してくれます。

f:id:ueponx:20200614143813p:plain

Windows Subsystem for Linux (WSL) を有効化

該当するバージョンになったら今度はWSLを有効化する処理を行います。

WSL仮想マシン プラットフォームコンポーネントを有効にする必要があります。 インストール作業をする前に、管理者として PowerShell のコンソールを開き、以下のコマンドを実行します。

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

f:id:ueponx:20200614153359p:plain

ちなみに管理者として PowerShellのコンソールを開くには【Windows ロゴ キー + X キー】を押下してメニューを開き、Windows PowerShell(管理者)をクリックすると実行できます。

f:id:ueponx:20200614151716p:plain

実行後にPCの再起動を行います。再起動後にWSLが有効化されます。

WSLのデフォルトバージョンをWSL2に設定

WSLを有効化することができたのですが、デフォルトではWSLのバージョンは1のままになっています。

管理者としてPowerShellで次のコマンドを実行して、新しい Linux ディストリビューションをインストールするときにWSL2を既定のバージョンとして設定します。

PS > wsl --set-default-version 2

実行すると、以下のような表示がでます。これまでみたドキュメントにはない表示です。しかたないのでエラーメッセージで表示されているリンクにいってみます。

f:id:ueponx:20200614155103p:plain

以下のリンクになります。

docs.microsoft.com

ページ内にあるLinux カーネル更新プログラム パッケージをダウンロードして実行を行います。

f:id:ueponx:20200614155744p:plain

ダウンロードファイルを起動すると以下のようなダイアログが表示されるので【Next】ボタンをクリックして

f:id:ueponx:20200614155751p:plain

自動的に以下のようなダイアログが表示されて、処理が完了します。【Finish】ボタンをクリックして終了させます。

f:id:ueponx:20200614155755p:plain

完了後に先程と同様にバージョン設定の設定を行うと…

PS > wsl --set-default-version 2

表示が先程とメッセージが少し変わったので、正常に設定ができたようです。

f:id:ueponx:20200614155801p:plain

Docker Desktop for Windowsをインストール

f:id:ueponx:20200614200306p:plain

このままWindows StoreUbuntuディストリビューションをインストールしてみ良いのですが、今回はWSL2に合わせて使えるようになったDocker Desktop for Windowsを使用してみます。今回使用しているPCのOSはWindows10 HomeなのでこれまではDocker Desktopが使用できませんでした。(DockerHyper-Vを仮想基盤としてしようしていたため)WSL2の導入によってWindows10 HomeでもDocker Desktopが使用できるようになります。

表現が微妙ですが、Dockerが使えないわけではなありません。公式サイトには以下のように書いてあります。

Requires Microsoft Windows 10 Professional or Enterprise 64-bit. For previous versions get Docker Toolbox.

f:id:ueponx:20200614160143p:plain

hub.docker.com

画面から【Get Docker】ボタンをクリックして、Docker Desktop for Windowsstableバージョンをダウンロードします。

f:id:ueponx:20200614171946p:plain

ダウンロードが完了したら、インストーラを起動します。

f:id:ueponx:20200614182616p:plain

起動すると以下のような画面になるので、必ず【Enable WSL 2 Windows Features】のチェックボックスにチェックを入れておきます(デフォルトでチェックが入っているので変更しなければ大丈夫です)【Ok】ボタンを押してインストールを開始します。

f:id:ueponx:20200614182630p:plain

インストールが進行し…

f:id:ueponx:20200614182639p:plain

以下のように表示されれば、インストール完了です。【Close and log out】ボタンをクリックします。(注意:このボタンをクリックすると問答無用でWindowsのログアウトされるので作業中のアプリは保存してください。)

f:id:ueponx:20200614183417p:plain

ログインしなおすと、Docker Desktopが起動します。チュートリアルなどの画面が表示されますが、それをスキップします。 チュートリアルを終了(完了)したら、PowerShellで以下のように実行します。

PS > wsl -l -v

するとDocker側からWSL2が使用されているのが確認できます。

f:id:ueponx:20200614184741p:plain

インストールのバージョンをCLIで調べてみると

f:id:ueponx:20200614190630p:plain

あとはDockerのコンテナを起動してみます。定番のhello-worldのコンテナを実行します。

PS > docker run hello-world

f:id:ueponx:20200614191047p:plain

これでDockerのコンテナを実行できることが確認できました。

おわりに

これまでWindows10 Homeエディションで使えなかったDocker Desktopもようやく使用できるようになりました。WSL2によってDockerが使用可能になったことで更に仮想化コンテナ実行の裾野がひろがったのではないでしょうか。後日、Ubuntuのコンテナを導入して、カーネルのクロスコンパイル環境を設定してみようと思います。