Docker Desktop を Hyper-V仮想マシンにインストールします。Docker Desktopで色々と試してみたいことがあるのですが、物理マシンにインストールすると不要ファイルが削除困難な形で色々と溜まっていくようなので、仮想マシンにDocker Desktopを入れて使い、不要ファイルで重たくなったら仮想マシンごと捨てるという方法を試すことにしました。Dockerの用途としてはWindows系のコンテナを動かす想定です。(もっと正確にはDynamics 365 Business CentralというERPのDockerコンテナを動かしたい訳ですが、この記事では関係ないので忘れてもらって結構です。)
Dockerインストールの記事は山ほどあるので、この記事の価値としては以下2点です。
・仮想マシンにDocker入れようとすると必要な「入れ子の仮想化」の設定手順を説明する。
・インストール時に出てくるエラーを敢えて出してから対応することで何のために何が必要になるかを理解しやすくする。
エラーが出ない手順って結構出回っていますし、それはそれできれいにインストールするのに大事ですが、理解が浅くなる側面もあるので敢えて試行錯誤の記録を残します。(本当の試行錯誤はもっとゴチャゴチャしてましたが、適当に読みやすく割愛します。)
前提:Hyper-Vで作成したWindows10Enterpriseの仮想マシン。
※Win10Proでも多分同じです。マシン構成の詳細は以下を参照。
Hyper-Vで仮想マシンを作る(1) | IT長のネタ帳 (d3654.be)
Hyper-Vで仮想マシンを作る(2) | IT長のネタ帳 (d3654.be)
インストール手順
以下、断りなければ基本的にHyper-Vの仮想マシンにリモートデスクトップ接続する。 (途中で1か所だけHyper-Vホストで実行する場合あり)
まずはDocker DesktopのインストーラーをDocker Desktop for Windows by Docker | Docker Hubからダウンロード。

インストーラーを実行。インストラーを右クリックして「管理者として実行」。

「はい」を選択。

最終目的がWindowsのコンテナを動かすことなので「Install required Windows components for WSL2」にチェックをつける。「Add shortcut to desktop」も便利なのでチェックつけて「OK」をクリック。

インストーラーが実行される。

インストール完了。(エラーが出なくて拍子抜けする。)「Close and restart」をクリック。

再起動したのち、サインインしてしばらくすると(おそらくバックグラウンドでDocker Desktopサービスが起動するまで少し待たされて)以下の画面が起動し、利用規約の同意を求められる。中身を読んで異存なければ右下の「I accept the term」にチェックOnしてAcceptボタンを押す。

以下のエラーが表示される。WSL2のインストールが完了できていない、とのこと。これは、WindowsマシンでWindowsのコンテナを動かすには(いろいろあるけど2021年初時点最新のやり方では)Windows Subsystem for Linux 2という仕組みを使うことになっており、これのインストールができてないよ、ということ。つまり前提条件の一つになっている。エラーメッセージでインストーラのリンク先を明示してくれているので、リンクをクリックしてブラウザで開く。

MicrosoftのDocsに誘導される。「x64マシン用WSL2 Linux カーネル更新プログラムパッケージ」をクリックする。(先の画面のエラーメッセージが最前面に出てきて邪魔なので右側に寄せておく)

ダウンロードしたファイル(wsl_update_x64.msi)をインストールする。

Windows Subsystem for Linux Update Setup のWizardが開始する。「Next」をクリック。

「はい」を選択。

インストールが開始される。一瞬でインストール完了。「Finish」をクリック。

エラーメッセージに戻る。インストールしたら再起動しろと言っているので「Restart」をクリック。

するとリスタートせずに以下のようなエラーが表示される。

エラーメッセージには「Windowsの仮想マシンプラットフォーム機能を有効にしてBIOSで仮想化が有効になっていることを確認してください。」と書かれている。仮想マシンプラットフォーム機能はともかく、「BIOSで仮想化が有効になっていること」が少しわかりにくい。

結論を書くと、「BIOS~」はHyper-V仮想化の入れ子設定を実施することで解決する。
Hyper-Vホストマシンに戻り、仮想マシンを停止する。

Hyper-Vホストマシンで、PowerShellを管理者として実行する。

以下のコマンドを実行する。一瞬で完了する。
Set-VMProcessor –VMName -ExposeVirtualizationExtensions $true
※VMNameは自分の仮想マシン名に置き換える。

仮想マシンを起動する。

仮想マシンにリモートデスクトップ接続して、デスクトップのDocker Desktopアイコンを起動してDockerを起動する。Docker起動後、タスクバーの ^ アイコンをクリックしてクジラマークを右クリックして Switch to Windows container を選択する。(Windowsマシン上のDockerでWindowsコンテナを動かすにはこの操作が必要。)

スイッチを切り替えてよいか確認される。Switchを選択する。

ここでエラーが発生する。Windowsの機能のインストールが足りないというメッセージ。 WindowsマシンのDockerでWindowのコンテナを動かすためにはまだ前提を満たしていない、ということ。

機能を追加インストールする前に現状を確認する。検索ボックスで「機能」と入力して「Windowsのっ機能の有効化または無効化」を起動する。

エラーメッセージにはHyper-VとContainers機能をインストールせよと表示されており、実際に「Windowsの機能」画面で確認すると両者ともインストールされていない。

「 Windowsの機能」 画面からインストールしてもよいが、せっかくエラーメッセージでスクリプトを提供してくれているのでPowerShellからインストールする。PowerShellを管理者モードで起動する。


エラーメッセージ上のスクリプトをコピー。

PowerShellにそのまま貼り付けて実行。

スクリプトが実行され、機能がインストールされる。

yを選択して再起動を実行する。

再起動後、Docker Desktopを起動したのち、再度Windowsコンテナにスイッチする。

前回と同じ確認メッセージ。「Switch」を選択。

今度はエラーが出ずに切り替わった。

タスクバーの ^ アイコンをクリックして、クジラのアイコンを右クリックすると「Switch to Linux containers」と表示されていれば、今現在Windowsコンテナモードになっている。

PowerShellでDocker version コマンドを実行するとバージョンを確認できる。

これでWindowsベースで動くアプリのコンテナを動かす準備が完了です。
個人的にはここからDynamics 365 Business Centralのコンテナを動かしたいのですが、一般的には「Docker Desktop なしにWindowsでDockerを利用する」のほうが興味があると思うので、次の記事とその次の記事で書きます。
1件のコメント