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

公開:2020/12/29
更新:2020/12/31
7 min読了の目安(約6500字TECH技術記事 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をダウンロードしてインストールします。

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

インストーラを実行すると下記の画面が表示されるので、「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 --rm run 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不要 ↩︎