イントロダクション
Windows Server 2022 以降では、Windows Server コンテナーと Hyper-V コンテナーの 2 種類のコンテナーを使用できます。 各コンテナーの種類では、Windows Server 2022 の Server Core または Nano Server SKU がサポートされます。
これらの構成にはさまざまなパフォーマンスへの影響があります。ここでは、シナリオに適した内容を理解するために、以下で詳しく説明します。 さらに、パフォーマンスに影響を与える構成について詳しく説明し、これらの各オプションとのトレードオフについて説明します。
Windows Server コンテナーと Hyper-V コンテナー
Windows Server コンテナーと Hyper-V コンテナーは、移植性と整合性の利点の多くを提供しますが、分離の保証とパフォーマンスの特性の点で異なります。
Windows Server コンテナーは、 プロセスと名前空間の分離テクノロジによるアプリケーションの分離を提供します。 Windows Server コンテナーは、コンテナー ホストとホスト上で実行されているすべてのコンテナーとカーネルを共有します。
Hyper-V コンテナー は、高度に最適化された仮想マシンで各コンテナーを実行することで、Windows Server コンテナーによって提供される分離を拡張します。 この構成では、コンテナー ホストのカーネルは、Hyper-V コンテナーと共有されません。
Hyper-V コンテナーによって提供される追加の分離は、コンテナーとコンテナー ホスト間の分離のハイパーバイザー レイヤーによって大部分が実現されます。 これは、Windows Server コンテナーとは異なり、システム ファイルとバイナリの共有が少なくなり、記憶域とメモリの占有領域が全体的に大きくなるため、コンテナーの密度に影響します。 さらに、一部のネットワーク、ストレージ IO、および CPU パスでは、さらにオーバーヘッドが予想されます。
Nano Server と Server Core
Windows Server コンテナーと Hyper-V コンテナーでは、Server Core のサポートが提供されています。 コンテナーの基本イメージ オプションの詳細について説明します。
Nano Server は、プライベート クラウドとデータセンター用に最適化されたリモート管理サーバー オペレーティング システムです。 これは、Server Core モードの Windows Server に似ていますが、大幅に小さく、ローカル ログオン機能がなく、64 ビットのアプリケーション、ツール、エージェントのみをサポートします。 ディスク領域がはるかに少なく、セットアップが大幅に高速化され、Windows Server よりもはるかに少ない更新プログラムと再起動が必要になります。 再起動すると、はるかに高速に再起動します。
コンテナーのスタートアップ時間
コンテナーの起動時間は、コンテナーが最大の利点を提供するシナリオの多くの主要なメトリックです。 そのため、コンテナーの起動時間に最適に最適化する方法を理解することが重要です。 起動時間を改善するために理解するチューニングのトレードオフを次に示します。
最初のログオン
Microsoft は、Nano Server と Server Core の両方の基本イメージを提供します。 Server Core に付属する基本イメージは、初回ログオン (OOBE) に関連する起動時間のオーバーヘッドを取り除くことで最適化されています。 Nano Server の基本イメージでは、これは当たりません。 ただし、コンテナー イメージに少なくとも 1 つのレイヤーをコミットすることで、Nano Server ベースのイメージからこのコストを削除できます。 イメージから後続のコンテナーが起動しても、最初のログオン コストは発生しません。
スクラッチスペースの場所
コンテナーは、デフォルトで、実行中の間、コンテナー ホストのシステム ドライブ上の一時的なスクラッチ領域を記憶域として使用します。 これはコンテナーのシステム ドライブとして機能し、コンテナー操作で行われる書き込みと読み取りの多くは、このパスに従います。 システム ドライブが回転ディスク磁気メディア (HDD) 上に存在するが、より高速なストレージ メディア (より高速な HDD または SSD) があるホスト システムでは、コンテナースクラッチ領域を別のドライブに移動できます。 これは、dockerd –g コマンドを使用して実現されます。 このコマンドはグローバルであり、システムで実行されているすべてのコンテナーに影響します。
入れ子になった Hyper-V コンテナー
Windows Server 2022 の Hyper-V では、入れ子になったハイパーバイザーがサポートされます。 つまり、仮想マシン内から仮想マシンを実行する機能です。 これにより、多くの便利なシナリオが開かれますが、物理ホストの上に 2 つのレベルのハイパーバイザーが実行されるため、ハイパーバイザーによって発生するパフォーマンスへの影響も誇張されます。
コンテナーの場合、仮想マシン内で Hyper-V コンテナーを実行すると、これが影響を受けます。 Hyper-V コンテナーは、それ自体とコンテナー ホストの間のハイパーバイザー レイヤーを介して分離を提供するため、コンテナー ホストが Hyper-V ベースの仮想マシンである場合、コンテナーの起動時間、ストレージ io、ネットワーク io とスループット、CPU の観点からパフォーマンスオーバーヘッドが発生します。
ストレージ
マウントされたデータ ボリューム
コンテナーには、コンテナー ホストのシステム ドライブをコンテナーのスクラッチ領域に使用できる機能が用意されています。 ただし、コンテナーのスクラッチ領域の有効期間は、コンテナーの有効期間と同じです。 つまり、コンテナーが停止すると、スクラッチ領域と関連するすべてのデータが消えます。
ただし、コンテナーの有効期間に関係なくデータを保持することが必要なシナリオは多数あります。 このような場合、コンテナー ホストからコンテナーへのデータ ボリュームのマウントがサポートされます。 Windows Server コンテナーの場合、マウントされたデータ ボリューム (ほぼネイティブ パフォーマンス) に関連する IO パスのオーバーヘッドはごくわずかです。 ただし、データ ボリュームを Hyper-V コンテナーにマウントすると、そのパスで IO パフォーマンスが低下します。 さらに、この影響は、仮想マシン内でコンテナー Hyper-V 実行すると誇張されます。
スクラッチ スペース
Windows Server コンテナーと Hyper-V コンテナーの両方で、コンテナースクラッチ領域に対して既定で 20 GB の動的 VHD が提供されます。 どちらの種類のコンテナーでも、コンテナー OS はその領域の一部を占有します。これは、起動されたすべてのコンテナーに当てはまります。 したがって、開始されたすべてのコンテナーにはストレージに影響があり、ワークロードによっては最大 20 GB のバッキング ストレージ メディアを書き込むことができることに注意することが重要です。 サーバー ストレージの構成は、これを念頭に置いて設計する必要があります。
ネットワーキング
Windows Server コンテナーと Hyper-V コンテナーでは、さまざまなネットワーク構成のニーズに最も適したさまざまなネットワーク モードが提供されます。 これらの各オプションは、独自のパフォーマンス特性を示します。
Windows ネットワーク アドレス変換 (WinNAT)
各コンテナーは、内部のプライベート IP プレフィックス (172.16.0.0/12 など) から IP アドレスを受け取ります。 コンテナー ホストからコンテナー エンドポイントへのポート転送/マッピングがサポートされています。 Docker は、dockerd が最初に実行されるときに、既定で NAT ネットワークを作成します。
これら 3 つのモードのうち、NAT 構成は最もコストの高いネットワーク IO パスですが、必要な構成量は最小限です。
Windows Server コンテナーでは、ホスト vNIC を使用して仮想スイッチに接続します。 Hyper-V コンテナーは、仮想スイッチに接続するために合成 VM NIC (ユーティリティ VM に公開されていません) を使用します。 コンテナーが外部ネットワークと通信している場合、パケットは WinNAT 経由でルーティングされ、アドレス変換が適用されるため、オーバーヘッドが発生します。
透明
各コンテナー エンドポイントは、物理ネットワークに直接接続されます。 物理ネットワークの IP アドレスは、外部 DHCP サーバーを使用して静的または動的に割り当てることができます。
透過的モードは、ネットワーク IO パスに関して最もコストが低く、外部パケットはコンテナー仮想 NIC に直接渡され、外部ネットワークに直接アクセスできます。
L2 ブリッジ
各コンテナー エンドポイントは、コンテナー ホストと同じ IP サブネット内にあります。 IP アドレスは、コンテナー ホストと同じプレフィックスから静的に割り当てる必要があります。 レイヤー 2 アドレス変換により、ホスト上のすべてのコンテナー エンドポイントの MAC アドレスが同じになります。
L2 ブリッジ モードは外部ネットワークへの直接アクセスを提供するため WinNAT モードよりもパフォーマンスが高くなりますが、MAC アドレス変換も導入されるため、透過的モードよりもパフォーマンスは低くなります。