Windows 10の開発者向け機能として、Dockerによる「Windowsコンテナ」のサポートがあります。これまでは、Hyper-Vで分離された「Hyper-Vコンテナ」だけがサポートされていましたが、最新の「Docker Desktop for Windows」では、「Windows Serverコンテナ」もサポートされました。
64bit版Windows 10 バージョン1607のProエディション以上は、Windows Server 2016で追加された「コンテナ」機能を搭載しており、Dockerを使用して「Windowsコンテナ」環境によるアプリ開発が可能です。
Windows Server 2016では「プロセス分離(process isolation)」と「Hyper-V分離(hyperv isolation)」のいずれかで、Server CoreまたはNano ServerのベースOSイメージのコンテナを作成し、実行することが可能です。
プロセス分離はLinuxベースのDocker環境と同様、ホストのカーネル上のプロセスとしてコンテナ用のOS環境が用意されます(複数のコンテナがホストのカーネルを共有します)。一方、Hyper-V分離では、コンテナごとに用意されるHyper-Vで分離されたカーネルを使用してコンテナが実行されます。
Windows 10におけるWindowsコンテナのサポートは、以下のWindowsコンテナのバージョン互換性マトリックスが示すように、これまではHyper-V分離のみのサポートでした。
2019年1月中旬に、Windows 10に対応した「Docker Desktop 2.0.0.2」(旧称Docker for Windows、このバージョンから名称変更)がリリースされました(画面1)。Docker Desktopは無償で利用できる、Docker Community Edition(Docker CE)です。
このバージョンは「Docker Enterprise Edition(Docker EE)for Windows Server(Docker Enterprise 2.1)」と共通の「Docker Engineバージョン18.09.1」を搭載しており、以下のリリースノートで説明されているように、Windows 10上でのプロセス分離が可能になりました。なお、上記のDocker Desktopのリリースノート(「About Docker」ウィンドウの「Release Notes」ボタンから参照可)によると、次のメジャーリリース(2.1.0.0以降)からは、Windows 10 バージョン1607のサポートが廃止されるとのことです。
Windows Server 2019では「Linux Container on Windows(LCOW)」と呼ばれるLinuxコンテナのサポートが予定されていますが(現在はプレビュー)、Windows 10 バージョン1709以降と2018年3月リリースの「Docker for Windows 18.03-0-ce-win59」以降で、Experimental(実験的)機能としてLCOWを試すことができます。LCOWに関しては、本連載の第31回と第37回でも紹介しました。
「Hyper-Vコンテナ(Hyper-V分離)」と「Windows Serverコンテナ(プロセス分離)」は、ユーザーにとっては「docker run」コマンドに指定する“「--isolation」オプションの違い”でしかなく、作成および実行されるWindowsコンテナのエクスペリエンスは同じです。
例えば、最新の「Windows Server,version 1809」のServer CoreベースOSイメージ(mcr.microsoft.com/windows/servercore:1809)を、Hyper-Vコンテナとして実行するには、次のようなコマンドラインを実行します。
docker pull mcr.microsoft.com/windows/servercore:1809 docker run -it --name wincont01 --isolation=hyperv --rm mcr.microsoft.com/windows/servercore:1809 powershell
この例では、作成したコンテナでWindows PowerShellを対話的に開始し(--itオプション)、コンテナを終了するとイメージを削除します(--rmオプション)。Windows 10ではHyper-V分離が既定となっているため、「--isolation=hyperv」オプションの指定は省略できます(Windows Serverではプロセス分離が既定)。
Windows 10 バージョン1809上のDocker Desktop 2.0.0.2(Docker Engine 18.09.1)以降では、次のようなコマンドラインを実行することで、プロセス分離でWindows Serverコンテナとして実行できるようになりました(画面2)。
docker run -it --name wincont02 --isolation=process --rm mcr.microsoft.com/windows/servercore:1809 powershell
Docker Desktop 2.0.0.0(Docker Engine 18.09)および以前のDocker for Windowsでは、この方法はサポートされていませんでした。また、プロセス分離を利用できるのは、Windows 10 バージョン1809からであり、Windows 10 バージョン1803以前は引き続きHyper-Vコンテナ以外実行できません。
Copyright © ITmedia, Inc. All Rights Reserved.