Windowsのコンテナとは?
Windowsコンテナは、Windows Serverの仮想化の中核を成すテクノロジーです。Windowsでは仮想マシン(VM)とコンテナを仮想化に利用します。そのため、マイクロソフト社も公式ドキュメントサイトに各仮想化テクノロジーの詳細情報を掲載しています。 【参考】:Windows のコンテナーに関するドキュメント
マイクロソフトでは、DockerでWindowsを動かすことを想定しています。自社の強みである開発ツールを用いてコードを開発し、オンプレミスやAzureクラウドサービスでコンテナを利用するケースが想定されます。
Windows Serverとは?dockerとの関連性
Windows Serverとは、マイクロソフト社が開発・提供しているプラットフォームソフトウェア製品で、サーバ用途に最適化したオペレーティングシステム(OS)を指します。
Windows ServerはOSであるため、Windows Server上でDockerを含むコンテナを使用可能です。
用意したPCにインストールと構築作業を行うことで、Windows環境として作業可能となります。Windows Severの詳細について、詳しく知りたい方はこちらの記事をご覧ください。
Windowsのコンテナ概要
コンテナは、アプリケーションをパッケージ管理するOSレベル仮想化テクノロジーで、WindowsやLinux等で利用します。アプリケーションの開発・テスト・デプロイを簡単に行い、管理も簡単な他、変化するニーズに素早く対応できるのが特長です。
マイクロソフト社はコンテナのプラットフォームに以下のソフトウェア利用を想定し、連携性を保証しています。 ・Docker Desktopの利用 Docker Desktop利用を想定し、Windows・LinuxのコンテナをWindows10で実行します。同様にWindows Serverで直接コンテナを実行することもできます。
・Docker DesktopとVisual Studioの連携 Docker Desktopに含まれるDocker Engine・Docker Compose・Kubernetes等をVisual Studio・Visual Studio Codeを用いて、開発・テスト・デプロイします。
・Azureとの連携 DockerHubとAzure Container Registryを活用し、Visual Studioを用いた開発コード・アプリを発行・共有します。Azureを用いた大規模システムにも利用可能です。
Windowsの仮想マシンとコンテナの違い
仮想マシンはホストOSから分離され、任意のOSを実行するアーキテクチャです。Windowsでも他のOSでも考え方には違いがありません。WindowsではWindows管理センタまたはHyper-Vマネージャを用いてデプロイを行います。
コンテナはOSレベル仮想化に違いがありません。Windowsでは他のOSとは異なり、Hyper-V分離モードが搭載されているため、追加機能としてHyper-V分離コンテナが作成できます。Dockerからも”docker run”の際に”--isolation=hyperv”を指定することで、Hyper-V分離コンテナが作成できます。これによりHyper-V分離コンテナでホストOSのWindows旧バージョン環境を設定し、アプリケーション実行することもできます。
以上のことからWindowsコンテナでできることは、他のOSより幅広い適応領域となっていると考えられます。 【参考】:Windows コンテナ―の基本事項 分離モード
Windowsのコンテナイメージ
マイクロソフトではコンテナ構築に際し、いくつかの基本イメージを提供しています。具体的には以下のイメージが提供されます。
・Windows Windows APIとサーバーロールを除くシステムサービスが提供されます。
・Windows Server Windows APIとサーバーロールを含むシステムサービスが提供されます。
・Windows Server Core Windows ServerのサブセットとなるAPIが提供されます。
・Nano Server .NET Core APIをベースとした最小のWindows Serverイメージとなります。
Windowsコンテナの動作要件
Windowsコンテナの動作OSは、Windows Server 2022・Windows Server(半期チャネル)・Windows Server 2019・Windows Server 2016、Windows 10 Professional・Enterpriseエディション(バージョン1607以降)がサポートされています。
Hyper-V分離コンテナを利用する場合は、Hyper-Vロールをインストールしておきます。Hyper-V仮想マシンからコンテナを実行する場合、メモリ容量や仮想化に対応したプロセッサ等の要件があります。詳しくは以下のリンクからご確認ください。 【参考】:Windows コンテナーの要件
Windowsでコンテナを利用するために
まず最初にコンテナ利用のためのWindows OSを、Windows ServerまたはWindows Clientにセットアップします。
・Windows Server Windows Server 2022・Windows Server(半期チャネル)・Windows Server 2019・Windows Server 2016の稼働するサーバーを準備します。
・Windows Client バージョン1607以降のWindows 10 Professional・Enterpriseエディション・Windows11を用意します。Hyper-V機能が利用できるか確認しておきます。
Dockerのインストール
DockerをWindows OSに合わせてインストールします。
・Windows Server
マイクロソフトではインストール作業を簡素化するために、GitHub登録のOneGetプロバイダーPowerShellモジュールの利用を推奨しています。管理者権限でPowerShellを起動し、以下のコマンドで Docker-Microsoft PackageManagement Providerをインストールします。
Install-Module -Name DockerMsftProvider -Repository PSGallery -Force
続いてDockerをインストールします。
Install-Package -Name docker -ProviderName DockerMsftProvider
インストール完了後サーバーを再起動します。
Restart-Computer -Force
・Windows Client Windowsのクライアント環境ではDocker Desktopが利用できます。Docker Desktopには、デスクトップダッシュボード・Docker Engine・Docker CLI・Docker Compose等が含まれます。Docker公式ダウンロードからモジュールをダウンロードし、インストールします。個人ユーザや小規模事業者は無償ライセンスプランが選択できます。具体的なリンクは以下の通りです。 【参考】:Docker Desktop for Windows
インストーラでは「Configuration」の画面で、「Enable Hyper-V Windows Features」と「 Install required Windows components for WSL 2」のオプション設定を確認します。また、インストール時にデフォルトコンテナをWindowsコンテナに変更することもできます。Dockerの「Switch to Windows containers…」メニューから変更することもできます。
詳細は以下のリンクをご確認ください。 【参考】:Windows 上の Docker エンジン
Windowsコンテナの作成と実行
コンテナを作成・実行するには最初にベースとなるイメージ(基本イメージ)を準備します。マイクロソフトの提供する基本イメージとなる、Windows・Windows Server・Windows Server Core・Nano Serverから選択します。Nano Serverをダウンロード・インストールする場合は以下のコマンドとなります。コマンドプロンプトから実行します。
docker pull mcr.microsoft.com/windows/nanoserver:ltsc2022
この際、エラーが発生する場合はDockerデーモンが起動しているか確認してください。Dockerサービスを”Start-Service docker”等を用いた再起動が必要な場合があります。また、初期設定でLinuxコンテナが構成されている場合は、「Switch to Windows containers…」から「Windowsコンテナ」を選択します。
イメージダウンロードが完了したら、”docker images”でインストール済みイメージの一覧で確認できます。その後コンテナを実行可能です。”docker run”でイメージを指定し、実行します。
マイクロソフト製品をWindowsコンテナとともに有効活用しましょう
Windowsコンテナは、Visual Studio・Visual Studio Codeを用いて開発・テスト・デプロイを行うのが効果的です。Dockerを使いながらAzureへの大規模展開も可能です。.NETベースのイメージを活用する際には利用価値が高く、開発生産性の観点からも利用をおすすめします。
編集部オススメコンテンツ
アンドエンジニアへの取材依頼、情報提供などはこちらから