以前の記事でDocker for Windowsを使ってWindows10上でLinux Kernelベースのコンテナを実行する手順を紹介しました。今回はWindows10のHyper-Vコンテナーの機能を使って、Windows Kernelベースのコンテナを実行する手順を紹介します。
1. Windows 10 Pro上で利用できるコンテナー
本記事はMSDNサイトにある「Windows 10のWindowsコンテナー」という記事を参考にして、Windows 10 Pro Insider Previewを使って検証しました。
Windows Server 2016ではWindows ServerコンテナーとHyper-Vコンテナーの2種類のコンテナ機能が利用可能です。この二つのコンテナの違いは以下の通りです。
- Windows Serverコンテナーでは各コンテナはホストの1プロセスとして動き、コンテナのホストとその上で動くすべてのコンテナでWindows Kernelを共有している。
- Hyper-Vコンテナーでは各コンテナは独立した仮想マシン上(つまりvmwp.exeプロセスとして)で実行され、Kernelはコンテナ間で共有されない。
コンテナの操作にはDockerエンジン、Dockerクライアントを利用します。そのため、コンテナの操作感はLinux Kernelベースのコンテナを扱うときと全く変わりません。
2. Hyper-Vコンテナー環境のセットアップ
以下、Windows 10 Pro上で実際にHyper-Vコンテナー環境をセットアップする手順を紹介します。
2-1. Hyper-Vおよびコンテナー機能の有効化
コントロールパネルの「プログラム」>「プログラムと機能」画面にて「Windowsの機能の有効化または無効化」をクリックしますすると、次のようなWindowsの機能の有効化ウィンドウが表示されますので、「コンテナー」と「Hyper-V」のチェックボックスをつけます。サブツリーにある項目もすべてチェックをつけます。
次へ進むと昨日のインストールが開始され、その後次のようにOS再起動を促す画面が表示されます。ここでOS再起動を実施します。
2-2. Docker EngineおよびDocker Clientのインストール
コンテナーを操作するためにDockerをインストールします。Windows用のDockerバイナリはこのリンク先のサイトにあります。
上記サイトにあるwindows/amd64/docker-(バージョン)-dev.zip
をダウンロードします。
ダウンロードしたZIPファイルを展開したら、中にある「docker」フォルダをC:\Program Files\
にコピーします。
コピーしたら以下の手順でC:\Program Files\docker
をPATH環境変数に追加します。
1. システムの詳細設定画面を開く
コントロールパネルの「システムとセキュリティ」>「システム」画面で「システムの詳細設定」をクリックします。
2. 環境変数の設定
以下の図のように「詳細設定」>「システムの環境変数」内の「Path」を選択して「編集」をクリックします。
3. Docker用パスの追加
Pathの編集画面で「新規」ボタンをクリックします。フォーカスされた入力部分にC:\Program Files\docker
を入力した後、「OK」ボタンをクリックします。
2-3. Dockerのサービス化
DockerデーモンをWiondowsサービスとして登録するために以下のコマンドを管理者権限のコマンドプロンプトにて実行します。
C:\WINDOWS\system32> dockerd --register-service C:\WINDOWS\system32> sc start docker
3. Hyper-Vコンテナーの動作確認
ここまでの手順でコマンドプロンプトからdockerコマンドでHyper-Vコンテナーを操作できるようになりました。コンテナが動くことを確認します。
3-1. Windows nano serverのコンテナイメージをダウンロード
以下のコマンドを利用してDocker HubからWindows Nano Serverのイメージをダウンロードします。
C:\> docker pull microsoft/nanoserver
ダウンロードしたら、イメージがダウンロードできていることを確認します。
C:\WINDOWS\system32>docker images REPOSITORY TAG IMAGE ID CREATED SIZE microsoft/nanoserver latest 787d9f9f8804 5 weeks ago 918 MB
3-2. Dockerによるコンテナの実行
ダウンロードしたイメージをもとにインタラクティブにコマンドプロンプトを実行するコンテナを起動します。コンテナに入ったことをホスト名などで確認します。
C:\> docker run -it microsoft/nanoserver cmd Microsoft Windows [Version 10.0.14393] (c) 2016 Microsoft Corporation. All rights reserved. C:\>hostname 04700462dbc7
上記の結果でホスト名が元の端末と違うことと、Versionの部分がホストと違うことを確認します。
ここで表示されたホスト名はコンテナIDになります。exitコマンドでコンテナ上のコマンドプロンプトを終了させた後に確認できます。
C:\> docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 04700462dbc7 microsoft/nanoserver "cmd" 31 seconds ago Exited (0) 19 seconds ago modest_goldwasser
以上で、最初のコンテナの実行まで確認できました。
3-3. Hyper-Vコンテナープロセスのホストでの見え方
Hyper-Vコンテナーでは、各コンテナはHyper-V上の仮想マシンとして動くため、コンテナのプロセスは「vmwp.exe」として見えます。このことはコンテナ利用中にホストのタスクマネージャで見ることもできます。
ただし、Hyper-Vを使っているとはいえ、通常の仮想マシンのようにHyper-Vマネージャから見ることはできません。あくまでHyper-Vのハードウェア仮想化機能だけを利用しており、仮想マシンをdockerコマンドで毎回生成しているわけではありません。