🐳

WindowsでもサクサクDocker (Docker Desktop with WSL2)

7 min read 5

目的

Windows上で快適にDockerを使える環境を構築します。

おまけとして「Hyper-Vの仮想マシン上でDocker Desktopを使う」方法も記載しておきます。

内容

一昔前のWindowsのDocker環境は混沌としていましたが、Windows 10 2004 から使えるようになった WSL2 とDocker Desktopによって、WindowsのDocker環境は劇的に改善しました。
WSL2という聞き慣れない単語かもしれませんが、Docker Desktopのインストーラがほとんど自動的に環境を整えてくれます。
以下に、その手順を記します。

  1. Docker Desktopのインストール
  2. 「WSL2 Linux カーネル更新プログラム パッケージ」のインストール

動作要件

WSL2上でDocker Desktopを実行するためにはWSL2が動作する必要があります。
WSL2の動作要件は以下になります。

  • CPUが仮想マシン支援機能(Intel-VTやAMD-Vなど)を持つこと
  • BIOSで上記機能を有効にしていること
  • Windows 10 Home/Professional/Enterprise edition の 1903以降 Build:18362.1040以上 [1]

Dockerを快適に実行するためには上記以外に十分なメモリとストレージの空き容量及びCPUリソースが必要になります。

方法

Docker Desktop for Windows のインストール

DockerをWSL2上で動かすためには、特別な準備は必要ありません。
以下のURLよりDocker Desktopをダウンロードしてインストールします。

https://www.docker.com/products/docker-desktop

Download Docker Desktop

インストーラを実行すると、まずは必要なモジュールを自動的にダウンロードしてきます。
Downloading

ダウンロードが完了すると、以下の画面になります。
OSのバージョンがWSL2に対応している場合、デフォルト状態でWSL2のコンポーネントがインストールされます。
「Install required Windows components for WSL 2」 がチェックされていることを確認し、「OK」ボタンを押して次に進みます。
Install Configuration

OSのバージョンによって、以下のようにHyper-Vに関わる選択肢が表示される場合があります。
こちらもそのままの設定でインストールして構いません。
Install Configuration with Hyper-V

下記画面のように「Install required Windows components for WSL 2」の選択肢が表示されていない場合、OSがWSL2に対応していません。
この場合、「Windows10 1903以降 Build:18362.1040以上」 にアップデートしてください。
なお、このままインストールを続けることでHyper-VをバックエンドにしてDockerを起動することは可能ですが、WSL2をバックエンドにした場合と比べてパフォーマンスが著しく悪くなります。
WSL2 not support

インストール中は以下のように表示されるので、しばらく待ちましょう。
Unpacking Files

インストールが完了すると、下記の画面になります。
「Close and restart」ボタンを押すとPCが再起動されます。
Close and restart

Dockerの起動

PC再起動後、自動的にDockerが起動します。
右下に通知が出ますので、WSL2 をバックエンドにして起動しようとしていることを確認してください。
Starting Docker

「WSL2 Linux カーネル更新プログラム パッケージ」のインストール

初回起動時には以下のようなアラートが表示されます。
WSL2 alert

WSL2環境が整っている場合は、本画面は表示されません。

「WSL 2 is not installed」と表示される場合は、下記のトラブルシュートを参照してください。

アラート内のURL(https://aka.ms/wsl2kernel)をクリックして、ダウンロードページに移動します。
なお、このアラート画面は常に最前面に表示されて邪魔になるので、アップデートのインストールが完了するまで隅の方に移動しておきましょう。

ダウンロード・ページが表示されたら「x64 マシン用 WSL2 Linux カーネル更新プログラム パッケージ」をクリックして、インストーラをダウンロードし、ファイルを実行します。
Linux Kernel Update Package Download

2021年9月時点でLinuxカーネル更新プログラムのダウンロードリンクが消えているようです。
下記のURLをご利用ください。
x64 マシン用 WSL2 Linux カーネル更新プログラム パッケージ

インストーラを実行すると下記の画面が表示されるので、「Next」をクリックして先に進みます。
Linux Kernel Update install

インストールが完了したら、「Finish」をクリックします。
Linux Kernel Update Finish

Linux Kernelのインストールが完了したら、先程のアラートダイアログに戻り、「Restart」ボタンを押し、Dockerを再起動します。
Restart Docker

Linux kernelアップデート後のDocker起動にはしばらく時間がかかります。(数分程度)

Dockerが再起動され無事起動すると、以下のような画面が表示され、Dockerのチュートリアルが開始されます。
Skip tutorial
チュートリアル自体は実行する必要はないので、「Skip tutorial」をクリックしてチュートリアルをスキップします。

Hello World

Docker Desktopの準備ができたら Hello World を実行して、動作を確認してみましょう。
コマンドプロンプトまたはPowerShellより、以下のコマンドを実行します。

docker run --rm hello-world

うまく動けば以下のように表示されるはずです。

Hello World 実行結果
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
0e03bdcc26d7: Pull complete
Digest: sha256:1a523af650137b8accdaed439c17d684df61ee4d74feac151b5b337bd29e7eec
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

動作が確認できたら、不要なイメージは消しておきましょう。

docker rmi hello-world

以上でDocker Desktopのインストールは完了です。
それでは存分にDockerを楽しみましょう!!

トラブルシュート

Docker起動時に「WSL 2 is not installed」と表示される場合

WSL 2 is not installed

Docker起動時に「WSL 2 is not installed」と表示される場合は、ダイアログの内容に従い、管理者権限でPowerShellを起動して、以下のコマンドを実行します。

Enable-WindowsOptionalFeature -Online -FeatureName $("VirtualMachinePlatform", "Microsoft-Windows-Subsystem-Linux")

処理が完了すると再起動を促されるので、PCを再起動してください。
その後、Dockerが正常に起動するはずです。

「Windows の仮想マシン プラットフォーム機能を有効にして、BIOS で仮想化が有効になっていることを確認してください。」と表示される場合

VM Error!!

「Windows の仮想マシン プラットフォーム機能を有効にして、BIOS で仮想化が有効になっていることを確認してください。」と表示される場合はCPUが対応しているかどうかを確認してください。
CPUが仮想化支援に対応している場合はBIOSで機能を有効化してください。

おまけ:Hyper-Vの仮想マシン上でDocker Desktopを使う

Hyper-Vの仮想化マシン(VM)でWSL2をバックエンドにしたDocker Desktopを利用することが可能です。
デフォルトの状態でVMを起動しDocker Desktopをインストールすると、起動時にトラブルシュートにある「Windows の仮想マシン プラットフォーム機能を有効にして、BIOS で仮想化が有効になっていることを確認してください。」エラーが表示されます。
その場合、VMを一旦シャットダウンした後に、PowerShellから以下のコマンドを実行してください。

Set-VMProcessor <VMName> -ExposeVirtualizationExtensions $true

<VMName> の部分はDocker Desktopを動かしたい、VM名に置き換えてください。
上記のコマンドを実行すると、指定されたVM上で仮想環境を構築することが可能になり、VM上でDocker Desktopを実行出来るようになります。

脚注
  1. Win10 1903 2020 Sep Build:18362.356 ← 要WindowsUpdate
    Win10 1903 2020 Dec Build:18362.1256 ← Update不要 ↩︎

Discussion

公式ドキュメントによれば、WSL2の動作要件はWindows 10 2004以降ではないようです。

https://docs.microsoft.com/ja-jp/windows/wsl/install-win10

x64 システムの場合:バージョン 1903 以降、ビルド 18362 以上。
ARM64 システムの場合:バージョン 2004 以降、ビルド 19041 以上。
18362 より前のビルドは WSL 2 をサポートしていません。 Windows 更新アシスタントを使用して、お使いのバージョンの Windows を更新します。

当初は2004のみサポートでしたが、コロナ禍の影響もあり、夏ごろに変わったと思います。

※Dockerは試していないので、もしかしたらwsl2 ではなく、Dockerの対応バージョンがあるのかも知れませんが

コメントありがとうございます。
ご指摘の記述は私も読んだのですが、1903での動作確認をしていないので、個人的に確認が取れている2004以降とさせていただきました。
1903を入れて、Windows Updateしてまで確認取る必要はないと思っていましたが、ちょうど手元に1903のイメージがありましたので、ちょっと試してみます。

コメントありがとうございます。
承知しました。
蛇足かもとは思いましたが、記事の記述「WSL2の動作要件は以下になります。」は公式ドキュメントと異なる動作要件のためコメントいたしました。

検証いただけるとのことありがとうございます。

出先なので詳しくは調べていませんが、8月時点でDocker edge 版なら2004以外にも対応していたようです。

https://kawadev.net/wsl2-docker-desktop/

ご提示いただいた記事によると「1903以降 Build:18362以上」とのことでしたが、実際には細かいリビジョンも影響するようで、「Windows10 1903 2020年9月版」(Build:18362.356)ではWSL2をインストール不可でした。

リビジョンによる差異
Win10 1903 2020 Sep - Build:18362.356 (WSL2不可) → アップデート後 Build:18363.1198 (WSL2可)
Win10 1903 2020 Dec - Build:18362.1256 (WSL2可)

Dockerによると「1903以降 Build:18362.1040以上」のようですので、記述を変更しました。
また、1903でDocker Desktopインストール時に表示されるダイアログが異なっていたので、こちらも追記しました。

ご検証ありがとうございます!

ログインするとコメントできます