Windows コンテナー プラットフォームが拡大中です。 Docker はコンテナー体験の最初の部分でしたが、現在は他のコンテナー プラットフォーム ツールを構築しています。
- containerd/cri - Windows Server 2019/Windows 10 1809 の新機能。
- runhcs - runc に対応する Windows コンテナー ホスト。
- hcs - ホスト コンピューティング サービスと、それを使いやすくする便利なシム。
この記事では、Windows と Linux のコンテナー プラットフォームと、各コンテナー プラットフォーム ツールについて説明します。
Windows および Linux コンテナー プラットフォーム
Linux 環境では、Docker などのコンテナー管理ツールは、より詳細なコンテナー ツール (runc とコンテナー化された ) に基づいて構築されています。
LinuxDocker architecture on Linuxでの Docker アーキテクチャの
runc
は、OCI コンテナー ランタイム仕様に従ってコンテナーを作成して実行するための Linux コマンド ライン ツール。
containerd
は、コンテナー イメージのダウンロードとアンパックからコンテナーの実行と監督までのコンテナー ライフ サイクルを管理するデーモンです。
Windows では、別のアプローチを採用しました。 Windows コンテナーをサポートするために Docker の使用を開始したときは、HCS (Host Compute Service) 上に直接ビルドしました。 このブログ記事 には、HCS を構築した理由と、最初にコンテナーに対してこのアプローチを取った理由に関する情報が含まれています。
WindowsInitial Docker Engine architecture on Windowsでの初期 Docker エンジン アーキテクチャの
この時点でも、Docker は HCS に直接呼び出します。 ただし、今後、Windows コンテナーと Windows コンテナー ホストを含むように拡張されたコンテナー管理ツールは、Linux で containerd と runc を呼び出すのと同様に、containerd と runhcs を呼び出すことができます。
runhcs
runhcs
は runc
のフォークです。
runc
と同様に、runhcs
は Open Container Initiative (OCI) 形式に従ってパッケージ化されたアプリケーションを実行するためのコマンド ライン クライアントであり、Open Container Initiative 仕様の準拠した実装です。
runc と runhcs の機能上の違いは次のとおりです。
runhcs
は Windows で実行されます。 コンテナーを作成および管理するために、HCS と通信します。runhcs
は、さまざまな種類のコンテナーを実行できます。- Windows と Linux の Hyper-V 分離
- Windows プロセス コンテナー (コンテナー イメージはコンテナー ホストと一致する必要があります)
使用法:
runhcs run [ -b bundle ] <container-id>
<container-id>
は、開始するコンテナー インスタンスの名前です。 名前は、コンテナー ホストで一意である必要があります。
バンドル ディレクトリ (-b bundle
を使用) は省略可能です。
runc と同様に、コンテナーはバンドルを使用して構成されます。 コンテナーのバンドルは、コンテナーの OCI 仕様ファイル "config.json" を含むディレクトリです。 "bundle" の既定値は現在のディレクトリです。
OCI 仕様ファイル "config.json"は、正しく実行するには、次の 2 つのフィールドが必要です。
- コンテナーのスクラッチ スペースへのパス
- コンテナーのレイヤー ディレクトリへのパス
runhcs で使用できるコンテナー コマンドは次のとおりです。
コンテナーを作成して実行するためのツール
- run コンテナーを作成して実行します
- コンテナーを 作成 作成する
コンテナーで実行されているプロセスを管理するためのツール:
- start 作成されたコンテナー内でユーザー定義のプロセスを実行します
- exec コンテナー内で新しいプロセスを実行する
- 一時停止 一時停止すると、コンテナー内のすべてのプロセスが中断されます
- resume 以前に一時停止されたすべてのプロセスを再開します
- ps ps は、コンテナー内で実行されているプロセスを表示します
コンテナーの状態を管理するためのツール
- 状態 コンテナーの状態を出力します
- kill は指定されたシグナル (既定値: SIGTERM) をコンテナの init プロセスに送信します。
- 削除は、コンテナが保持するリソースを削除します。これは、デタッチされたコンテナでよく使用されます。
複数コンテナーと見なすことができる唯一のコマンドは、リスト です。 指定されたルートで runhcs によって開始された実行中または一時停止中のコンテナーの一覧が表示されます。
HCS
GitHub には、HCS とインターフェイスするための 2 つのラッパーがあります。 HCS は C API であるため、ラッパーを使用すると、上位レベルの言語から HCS を簡単に呼び出すことができます。
- hcsshim - HCSShim は Go で記述されており、runhcs の基礎です。 AppVeyor から最新のものを入手するか、自分でビルドします。
- dotnet-computevirtualization - dotnet-computevirtualization は HCS の C# ラッパーです。
HCS を (直接またはラッパー経由で) 使用する場合、または HCS の周囲に Rust/Haskell/InsertYourLanguage ラッパーを作成する場合は、コメントを残してください。
HCS について詳しくは、John Stark の DockerCon プレゼンテーション をご覧ください。
containerd/cri
重要
CRI のサポートは、Windows Server 2019/Windows 10 1809 以降でのみ使用できます。
OCI 仕様では 1 つのコンテナーが定義されますが、CRI (コンテナー ランタイム インターフェイス) では、ポッドと呼ばれる共有サンドボックス環境のワークロードとしてコンテナーが記述されます。 ポッドには、1 つ以上のコンテナー ワークロードを含めることができます。 ポッドを使用すると、Kubernetes や Service Fabric Mesh などのコンテナー オーケストレーターが、メモリや vNET などの一部の共有リソースを持つ同じホスト上にある必要がある、グループ化されたワークロードを処理できます。
runHCS とコンテナー化された両方は任意の Windows システム Server 2016 以降で管理できますが、ポッド (コンテナーのグループ) をサポートするには、Windows のコンテナー ツールに重大な変更が必要です。 CRI のサポートは、Windows Server 2019/Windows 10 1809 以降で利用できます。