Windows 10+WSL2環境にDocker Desktopをインストール

2020年8月2日WSL 2Docker,Linux,Windows,WSL2

先日、Windows 10にWSL2(Windows Subsystem for Linux)をインストールしましたが、Windows向けのDockerもWSL2に合わせてアップデートされましたので、インストールしてみました。

従来のWindows向けDockerに比べて、WSL2で動くDocker Desktopは、Linuxがネイティブに動くため起動が速くパフォーマンスが高い、動的メモリにメモリを確保するためリソースを有効活用できる、Docker自体の起動が速いなどの利点があるそうです。

Windows Insider Previewをご利用の方へ(2021/07/24追記)

Windows 10やWindows 11のInsider Previewをご利用の場合は、WSL2のインストールが簡略化されています。Windows 11を例にDocker Desktopをインストールする方法を、こちらの記事にまとめています。Insider Previewに参加されている方は、こちらの記事の方が参考になると思います。

2021/07/24時点の通常リリース版であるWindows 10 21H1では、上記記事のセットアップ方法はできませんので、本記事(次項から)を参考にセットアップしてみてください。

システムの要件

Windowsのバージョンの確認

2020/9/5時点の最新版Docker Desktop(2.3.0.5)の場合、Windows 10 ProやEnterpriseの場合はビルド15063以上、Windows 10 Homeの場合はビルド19018以上である必要があります。Windowsのバージョンは、Win+R(ファイル名を指定して実行)から、winverを開くと確認できます。(下図の18363の部分がビルド番号です)

「winver」でWindowsのビルド番号を確認します

上の図はSurface Pro 7のものですが、未だにWin10 20H1が降ってこず、Windows 10 Homeのビルド番号18363と古いため、Docker Desktopはインストールできません。そのため、インストーラーを起動しても、「要件を満たしていない」とはじかれてしまいます。

Windowsのビルド番号が古いと、Docker Desktopのインストーラーで弾かれます

このような場合は、一旦Windowsアップデートをしたらビルド番号が上がるかもしれません。Windowsアップデートの配信がブロックされいてる場合、インサイダープログラムに参加すればアップデートできるかもしれませんが、素直に配信ブロックが解除されるまで待った方が無難でしょう。

ということで、この記事ではSurfaceではなく、別のパソコンでインストールを行っています。

WSL2のインストール

Docker Desktopをインストールする前に、WSL2をインストールする必要があります。

WSL2のインストールに関しては、先日まとめましたので、こちらをご覧ください。

Dockerは、デフォルトで起動するように設定されているLinuxディストリビューション上で動きます。ですので、上記ページの最後の項wsl --set-default Ubuntu-20.04も行っておいてください。(ディストリビューション名Ubuntu-20.04は、ご使用の環境に合わせて変えてください)

Docker Desktopのインストール

Docker Desktopをインストールすると、チュートリアルが始まります。チュートリアルは、Gitのインストールと、Docker Hubのアカウントが必要になります。チュートリアルも行いたい場合は、こちらを先に準備してください。Docker Hubのアカウントがあると、自分のDockerコンテナをDocker Hubで公開できます。

Gitのダウンロードページ:

Docker Hub:

続いて、Docker Desktopのインストールを行います。こちらのサイトから、Docker Desktopのインストーラーをダウンロードします。

Docker Desktopのインストーラーを起動してしばらく待つと、インストールの設定画面になります。このとき、「Enable WSL 2 Windows Features」にチェックを入れて進めてください。

「Enable WSL 2~」にチェックを入れて次に進みます

インストールが終わったら、指示に従ってログアウトし、再度ログインします。

インストールが終わったら、ログアウト・ログインします

再起動後、「WSL 2 installation is incomplete」というエラーが出てくる場合があるそうです。その場合は後述のトラブルシューティングをご覧ください。

チュートリアルをしてみる

ログインすると、自動的にDocker Desktopが起動して、チュートリアルが始まります。(チュートリアルが必要ない人は、「Skip tutorial」を押して閉じればインストール完了です)

繰り返しますが、このチュートリアルはGitとDocker Hubのアカウントが必要です。

初回ログイン時、チュートリアルが始まります

「Start」を押すと、次のような画面になります。左側にチュートリアルがあって、右にPowerShellの画面があります。案内に従ってコマンドを実行しますが、コマンドの入力は中央のボタンを押すか、右のPowerShell画面に直接入力します。

チュートリアル用ファイルをgit cloneします

すると、GitHubからチュートリアル用のファイルがダウンロードされます。(何もいじらずボタンを押した場合、C:\Users\ユーザー名\getting-startedにリポジトリーがクローンされます)

git cloneが終わりました

「Next Step」を押すと、次はイメージのビルドを行います。先ほどクローンしたフォルダに入り、Dockerイメージのビルドを行います。-tオプションは、コンテナイメージの名称を決めるオプションです。

Dockerイメージをビルドします

ビルドが終わったら、Dockerコンテナを起動します。
-dオプションは、起動後にデタッチするオプションです(コンテナのシェルに入らず、Windows側のプロンプトに戻ってきます)。
-pオプションでは、Windows側の80番ポートをコンテナの80番ポートにマッピングするよう指定しています。
--nameオプションでは、起動するコンテナに与える名称を設定しています。
最後の引数は、起動するコンテナの名称を指定します。

Dockerコンテナを実行します

起動すると、Windowsファイアウォールからの警告が出てくる場合があります。「プライベートネットワークに接続しているとき、LAN内デバイスからDockerコンテナへの接続許可したい」という場合は、下図のようにチェックを入れてアクセスを許可します。

Windows Defender ファイアウォールの設定

最後に、今回作成したDockerコンテナをDocker Hubにアップロードします。「Sign in here」を押してDocker Hubにログインします。そして、Dockerコンテナにタグをつけて、docker pushでDocker Hubにアップロードします。

Docker Hubにアップロードします

Doneを押すと、次のような画面になります。この画面は、ダッシュボードの説明です。Docker Desktopのダッシュボードは、タスクバーのDockerアイコンを右クリックして「Dashboard」から開けます。ダッシュボードで「OPEN IN BROWSER」ボタンを押すと、Docker中のnginxが開設しているチュートリアルページ( http://localhost/tutorial/ )が開きます。このチュートリアルページも読んだ方が良さそうですが、私はまだ読めていません。

Docker Desktopのチュートリアル終了

以上でDockerのチュートリアルは終了です。まだDockerの概念がよく分からないのでコマンドも理解できていないのですが、とりあえずDockerコンテナが動くようになりました。

ネットで検索すると、dockerコマンドの使い方がいろいろ出てきますが、この「WSL2で動くDocker」を使ってコンテナを起動したりする場合は、(WSL2上のUbuntuに入るのではなく)Windows側のコマンドプロンプトやPowerShellからDockerコマンドを打てば良さそうです。もしくは、似たようなことがDocker Desktopのダッシュボード画面からもできそうです。


この記事は、こちらのページを参考にさせていただきました。

トラブルシューティング

「WSL 2 installation is incomplete」というエラーが出る場合(2020/9/1追記)

WSL2のカーネルコンポーネントがインストールされていない場合、「WSL 2 installation is incomplete」というエラーが出ることがあるそうです。

その場合は、エラーメッセージに従ってWSL2カーネルコンポーネントのインストールを行います。

https://aka.ms/wsl2kernelにアクセスすると、「x64 マシン用 WSL2 Linux カーネル更新プログラム パッケージ」というリンクがありますので、ここから「wsl_update_x64.msi」をダウンロードします。

ダウンロードしたら実行してインストールすればOKです。とくに設定項目はなく[Next]を押すだけです。

WSL 2 カーネルのアップデート

インストールが終わったら、続きの設定を行ってみてください。

おすすめの記事

FrontISTRというCAEソフト(強度解析ソフト)がDocker形式で配布されていたので、Dockerで環境構築してみました。