WindowsでもサクサクDocker (Docker Desktop with WSL2)
目的
Windows上で快適にDockerを使える環境を構築します。
おまけとして「Hyper-Vの仮想マシン上でDocker Desktopを使う」方法も記載しておきます。
内容
一昔前のWindowsのDocker環境は混沌としていましたが、Windows 10 2004 から使えるようになった WSL2 とDocker Desktopによって、WindowsのDocker環境は劇的に改善しました。
WSL2という聞き慣れない単語かもしれませんが、Docker Desktopのインストーラがほとんど自動的に環境を整えてくれます。
以下に、その手順を記します。
- Docker Desktopのインストール
- 「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をダウンロードしてインストールします。
インストーラを実行すると、まずは必要なモジュールを自動的にダウンロードしてきます。
ダウンロードが完了すると、以下の画面になります。
OSのバージョンがWSL2に対応している場合、デフォルト状態でWSL2のコンポーネントがインストールされます。
「Install required Windows components for WSL 2」 がチェックされていることを確認し、「OK」ボタンを押して次に進みます。
インストール中は以下のように表示されるので、しばらく待ちましょう。
インストールが完了すると、下記の画面になります。
「Close and restart」ボタンを押すとPCが再起動されます。
Dockerの起動
PC再起動後、自動的にDockerが起動します。
右下に通知が出ますので、WSL2 をバックエンドにして起動しようとしていることを確認してください。
「WSL2 Linux カーネル更新プログラム パッケージ」のインストール
初回起動時には以下のようなアラートが表示されます。
アラート内のURL(https://aka.ms/wsl2kernel)をクリックして、ダウンロードページに移動します。
なお、このアラート画面は常に最前面に表示されて邪魔になるので、アップデートのインストールが完了するまで隅の方に移動しておきましょう。
ダウンロード・ページが表示されたら「x64 マシン用 WSL2 Linux カーネル更新プログラム パッケージ」をクリックして、インストーラをダウンロードし、ファイルを実行します。
インストーラを実行すると下記の画面が表示されるので、「Next」をクリックして先に進みます。
インストールが完了したら、「Finish」をクリックします。
Linux Kernelのインストールが完了したら、先程のアラートダイアログに戻り、「Restart」ボタンを押し、Dockerを再起動します。
Dockerが再起動され無事起動すると、以下のような画面が表示され、Dockerのチュートリアルが開始されます。
チュートリアル自体は実行する必要はないので、「Skip tutorial」をクリックしてチュートリアルをスキップします。
Hello World
Docker Desktopの準備ができたら Hello World
を実行して、動作を確認してみましょう。
コマンドプロンプトまたはPowerShellより、以下のコマンドを実行します。
docker run --rm 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」と表示される場合
Docker起動時に「WSL 2 is not installed」と表示される場合は、ダイアログの内容に従い、管理者権限でPowerShellを起動して、以下のコマンドを実行します。
Enable-WindowsOptionalFeature -Online -FeatureName $("VirtualMachinePlatform", "Microsoft-Windows-Subsystem-Linux")
処理が完了すると再起動を促されるので、PCを再起動してください。
その後、Dockerが正常に起動するはずです。
「Windows の仮想マシン プラットフォーム機能を有効にして、BIOS で仮想化が有効になっていることを確認してください。」と表示される場合
「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を実行出来るようになります。
-
Win10 1903 2020 Sep Build:18362.356 ← 要WindowsUpdate
Win10 1903 2020 Dec Build:18362.1256 ← Update不要 ↩︎
Discussion
公式ドキュメントによれば、WSL2の動作要件はWindows 10 2004以降ではないようです。
当初は2004のみサポートでしたが、コロナ禍の影響もあり、夏ごろに変わったと思います。
※Dockerは試していないので、もしかしたらwsl2 ではなく、Dockerの対応バージョンがあるのかも知れませんが
コメントありがとうございます。
ご指摘の記述は私も読んだのですが、1903での動作確認をしていないので、個人的に確認が取れている2004以降とさせていただきました。
1903を入れて、Windows Updateしてまで確認取る必要はないと思っていましたが、ちょうど手元に1903のイメージがありましたので、ちょっと試してみます。
コメントありがとうございます。
承知しました。
蛇足かもとは思いましたが、記事の記述「WSL2の動作要件は以下になります。」は公式ドキュメントと異なる動作要件のためコメントいたしました。
検証いただけるとのことありがとうございます。
出先なので詳しくは調べていませんが、8月時点でDocker edge 版なら2004以外にも対応していたようです。
ご提示いただいた記事によると「1903以降 Build:18362以上」とのことでしたが、実際には細かいリビジョンも影響するようで、「Windows10 1903 2020年9月版」(Build:18362.356)ではWSL2をインストール不可でした。
Dockerによると「1903以降 Build:18362.1040以上」のようですので、記述を変更しました。
また、1903でDocker Desktopインストール時に表示されるダイアログが異なっていたので、こちらも追記しました。
ご検証ありがとうございます!