コンテナーのデプロイのために Windows Server 2019 ホストを準備する

完了

Note

この Microsoft Learn モジュールでは、すべての例を Docker CLI で実行します。 これらのコマンドは、Docker Desktop を使用する Windows 10 と 11、および Moby または MCR を使用する Windows Server で機能するはずです。 containerd を使用する環境には他の CLI オプションがあり、コマンドは異なります。

Contoso Windows Server 管理者は、コンテナー ベース イメージを理解してソースを作成すること、どのコンテナー ベース イメージが使用可能であり、使用に適しているかを判断する方法、そしてベース イメージをローカルにプルする方法について理解する必要があります。 これにより、管理者は必要なコンテナーを作成して実行できるようになります。

コンテナーベース イメージをダウンロードする

任意のコンテナー ランタイムをインストールした後、次の手順では基本イメージをプルします。これは、コンテナーに OS サービスの基本レイヤーを提供するために使用されます。 これで、ベース イメージに基づいたコンテナーを作成し、実行できるようになります。

コンテナー ベース イメージには次のものが含まれます。

  • プロビジョニングされたアプリケーションをサポートするために必要なユーザー モードの OS ファイル。

  • アプリケーションに必要なランタイム ファイルまたは依存関係。

  • アプリの正常なプロビジョニングと実行に必要なその他の構成ファイル。

Microsoft は、独自のコンテナー イメージを構築するための出発点として、次の表に示す基本 OS イメージを提供しています。

基本イメージ名 詳細
Server Core 完全な .NET Framework などの Windows Server アプリケーション プログラミング インターフェイス (API) のサブセットを含むイメージ。 また、ほとんどのサーバー ロールも含まれています。 このイメージは、既存のアプリケーションが "コンテナー化" されているシナリオに最適です。
Nano Server 最小の Windows Server イメージ。.NET API と一部のサーバー ロールがサポートされます。 このイメージでは、Nano Server 用にアプリケーションを記述する必要があり、Windows に依存する新しいアプリケーションに最適です。
Windows Windows API とシステム サービスの完全セットが含まれますが、サーバー ロールは含まれません。 このイメージは、Windows Server 2022 以降のサーバーのイメージに置き換えられました。
サーバー Windows イメージと同様に、この基本イメージには、Windows Server API とシステム サービスの完全なセットが含まれています。 これにより、コンテナー イメージは大きくなりますが、アプリケーションの互換性は高くなります。 このイメージは、既存のアプリケーションがコンテナー化されているものの、Server Core イメージではアプリケーションに必要な依存関係が提供されないシナリオに最適です。

注意

Windows ホスト OS のバージョンは、コンテナーの OS バージョンと一致する必要があります。 新しい Windows ビルドに基づいてコンテナーを実行するには、同等の OS バージョンがホストにインストールされていることを確認する必要があります。

ホスト サーバーに新しいバージョンの OS がインストールされている場合は、Hyper-V 分離モードを使用して、以前のバージョンの Windows コンテナーを実行できます。

ホストとコンテナー イメージの互換性について詳しくは、「Windows コンテナーのバージョンの互換性」を参照してください。

Microsoft Container Registry を使用して、基本イメージを見つけてダウンロードすることができます。 特定のベース イメージをダウンロードするには、docker pull コマンドを使用します。

重要

OS 基本イメージでは、Windows Server OS コンポーネントとそのサーバー ロールが提供されます。 Microsoft は、IIS、.Net Framework、.Net など、既にインストールされているさまざまなフレームワーク用の特定のイメージも提供しています。

docker pull コマンドを入力するときは、ホスト マシンのバージョンと一致するバージョンを指定します。 たとえば、Windows Server 2022 に基づいて Nano Server イメージをプルする場合は、次のコマンドを使用します。

docker pull mcr.microsoft.com/windows/nanoserver:ltsc2022

Windows Server 2019 Server Core のイメージをプルする場合は、次のコマンドを使用します。

docker pull mcr.microsoft.com/windows/servercore:ltsc2019

コンテナーに必要なベース イメージをダウンロードしたら、次のコマンドを入力して、ローカルで使用できるイメージを確認し、メタデータ情報を表示することができます。

docker images

Windows コンテナーを実行する

大規模な運用環境では、Kubernetes や Docker Swarm などのコンテナー オーケストレーターを使用してコンテナーを操作する可能性が最も高くなります。 より小規模な開発/テスト環境では、CLI を使用して Windows Server 上でコンテナーを作成、削除、管理できます。

Docker Hub または Microsoft Container Registry を参照して、構築済みのイメージにアクセスしてプルすることもできます。 アプリケーションをホストするコンテナー イメージを構築するには、主に次の 2 つの代替手段があります。

  • 開発者ツールを使用してコンテナー イメージを構築する。 開発者がアプリケーションを作成する場合は、Visual Studio などの開発者 IDE から直接パッケージ化できます。

  • dockerfile を使用してコンテナー イメージを構築する。 dockerfile は、ユーザーがコマンド ラインで呼び出してイメージをアセンブルできるすべてのコマンドを含むテキスト ドキュメントです。 Visual Studio などのツールでは、新しいアプリケーション用に dockerfile をネイティブに構築しますが、ユーザーが独自の dockerfile を手動で構築することもできます。

Note

実行中のコンテナーに基づいてコンテナー イメージを作成する追加のオプションがあります。 これは、実行中の VM からゴールデン イメージを作成するのと似ています。 この方法はお勧めできません。 詳細については、次のセクションで説明します。

Windows 上で dockerfile を使用してコンテナー イメージの作成を自動化する

Docker Desktop エンジンと MCR には、コンテナー イメージの作成プロセスを自動化するためのツールが含まれています。 コンテナー イメージは手動で作成することもできますが、イメージ作成の自動化プロセスを採用すると、次のように多くの利点があります。

  • コンテナー イメージをコードとして格納できる。

  • メンテナンスやアップグレードのために、コンテナー イメージを迅速かつ正確に再作成することができる。

  • コンテナー イメージと開発サイクル間の継続的な統合。

Note

Moby と containerd には、ネイティブ イメージ ビルド ソリューションは含まれていません。 Azure Container Registry (ACR) タスクなどのコンテナー イメージ ビルド サービスを使用することもできます。

この自動化を推進する Docker コンポーネントは、dockerfile テキスト ファイルと docker build コマンドです。

  • dockerfile テキスト ファイルには、新しいコンテナー イメージを作成するために必要な手順が含まれています。 たとえば、ベースとして使用する既存のイメージの指定、イメージの作成プロセス時に実行されるコマンド、コンテナー イメージの新しいインスタンスが展開されるときに実行されるコマンドなどの手順です。

  • docker build コマンドにより、dockerfile が使用されてから、イメージ作成プロセスがトリガーされます。

CLI を使用してコンテナーを管理する

次のコマンドを使用して、コンテナーとコンテナー イメージを作成および管理します。

  • docker images コマンドを実行すると、コンテナー ホストで使用できるイメージが一覧表示されます。 これを行う理由の 1 つは、既存のコンテナー イメージを新しいコンテナーのベースとして使用するためです。
docker images
  • docker run コマンドを実行すると、コンテナー イメージを使用してコンテナーが作成されます。 たとえば、次のコマンドを実行すると、Windows Server Core コンテナー イメージに基づくコンテナーが作成されます。 コマンドに分離モードを指定しないでください。Docker には、既定の分離モードであるプロセス分離が使用されます。 --name パラメーターは、名前をコンテナーに設定するために使用されます。 -it はコンテナーとの対話型セッションを確立するために使用され (デタッチして実行する -d とは異なる)、PowerShell 命令によって PowerShell セッションが開かれます。
docker run --name IIS -it mcr.microsoft.com/windows/servercore:ltsc2022 powershell
  • docker commit コマンドを実行すると、コンテナーに加えた変更が新しいコンテナー イメージにコミットされます。 コミット操作には、コンテナー内にマウントされたボリュームに格納されているデータは含まれません。 既定では、新しいコンテナー イメージの作成中にコンテナーが一時停止されます (新しいコンテナー イメージを作成するためのベスト プラクティスとして、このオプションは推奨されないことに注意してください)
docker commit
  • docker stop コマンドを実行すると、実行中のコンテナーが停止されます。
docker stop <container name or ID>
  • docker rm コマンドを実行すると、1 つまたは複数のコンテナーが削除されます。
docker rm <container name or ID>

デモンストレーション

次のビデオでは、以下の方法について説明します。

  • Windows Server 上に Docker CE/Moby をインストールする。

  • コンテナー イメージをプルし、新しいコンテナーを対話形式で実行する。

  • IIS コンテナー インスタンスをデプロイし、ブラウザーで Web ページを検証する。

このプロセスの主な手順は以下のとおりです。

  1. Windows Server 上に Docker CE/Moby をインストールします。

  2. インターネット インフォメーション サービス (IIS) を含む Windows Server Core のイメージをダウンロードします。 コンテナー基本イメージのバージョンはホストのものと一致する必要があるため、iis:windowsservercore-ltsc2022 コンテナーを使用します。

  3. これらのパラメーターを使用して、次の Docker コマンドを実行します。

    • -d パラメーターを使用して、ダウンロードしたコンテナーをバックグラウンド サービスとして実行する。

    • コンテナー ホストのポート 80 がコンテナーのポート 80 にマップされるようにネットワークを構成します。

Docker run -d -p 80:80 mcr.microsoft.com/windows/servercore/iis:windowsservercore-ltsc2022
  1. 次のコマンドを使用して、コンテナー ID を取得します。
docker ps
  1. 次のコマンドを使用して、コンテナーを停止します。
docker stop <container ID>

クイック レビュー