containerdが必要な理由とDockerから分離された理由

3月中旬に、Dockerが独立したCloud Native Computing Foundationにコンテナプロジェクトを提案したことが判明ました(ちなみに、これはCoreOSのrktと同時に行われました) 。 このイベントは、昨年12月にコンテナがDocker Engineから正式に分離されたという同社の約束に従いました。 このコンポーネントとは何ですか?なぜ分離されたのですか?







containerdの仕組み



containerdはDockerの以前の部分であり、 containersを実行するための実行可能環境を実装するスタンドアロンソリューションになりました 。 開発者によると、作成時に、彼らはシンプルさ、信頼性、移植性を求めて努力しました。



「物理的に」は、コンテナのライフサイクル全体を管理するホストシステム上のデーモンです。イメージの受信と保存から、コンテナの起動runCを介して-詳細は以下を参照)とその操作の制御まで。 ローカルUNIXソケットを介して低レベルgRPC APIを使用してcontainerdデーモンと対話できます。また、コンソールユーティリティctrは実験およびデバッグにも使用できます(gRPC APIも使用します) 。 ソースコードはGoで記述され、Apache License 2.0の下でGitHubで入手できます。







containerdが動作する基本的なプリミティブは、 バンドルとコンテナーです。 実行中のコンテナーはrunCで、これはlibcontainerを使用するGoで作成されたユーティリティで、2015年のDockerとは別のものです。 OCIランタイム仕様に従って動作し、コンテナをその子プロセスとして実行します。 開始するには、ルートファイルシステムと構成のみが必要です(他のすべて:イメージの取得、アンパックなど-そのために「舞台裏」のままです)



バンドルには、構成、メタデータ、およびルートファイルシステムデータが含まれます。 これらは、実行中のコンテナ(最も単純な場合、これはFSの通常のディレクトリ)のディスク表現であり、他のシステムに転送、パッケージ化、および配布できます。 基本的に、コンテナ化されたデバイス全体がバンドルの作成と起動を調整します。



アーキテクチャの詳細



コンテナ化されたコンポーネントは、次のサブシステムを形成します。



  1. 配布-コンテナーイメージを提供するサービス。
  2. バンドルは、ディスクイメージからバンドルを抽出(およびパッケージ化)できるサービスです。
  3. ランタイム-バンドルを実行するサービス(runCを呼び出して、渡されたパラメーターでコンテナーを起動します)。


各サブシステムには、その動作を実装する1つ以上のコンポーネントがあります。 コンテナ化されたユーザーがgRPC APIを介してアクセスするのは、サブシステムによって提供されるサービスです。



異なるサブシステムと同時に動作するコンテナ化されたコンポーネントはモジュールと呼ばれ、次のように表されます。





合わせて、次のようになります。





仕組み



図とその説明は、 containted / design / architectureドキュメントから取得されてます。

画像



Dockerでの役割、他のコンポーネントとの通信



containerdの別のプロジェクトへの導入は約1年前に始まり 、Docker開発者が「 Docker Engineをよりコンパクトに、より良く、より速く、より強く 」しようと試み、その動作を次のように説明しました:スタック全体にruncを追加し、数百のコンテナを管理します。」



containerdがDocker(1.12)から分離された時点で、プロジェクト開発計画には、「Docker Engineコードベースをリファクタリングして、単一ホスト上のホスティングロジック、ネットワーク操作、ストレージのほとんどをDockerで使用できる再利用可能なコンポーネントに転送する」というものが含まれていました他のコンテナオーケストレーションプロジェクトとコンテナ配置サービスを使用します。」



containerdに課金された関数のセットは次のとおりです。





そのため、Dockerでは、Docker Engine内で将来のcontainerd 1.0(そのリリースは2017年6月に予定されています)の使用を見ています。







要約すると、著者 、containedが「コンテナ指向のプラットフォームが必要とする」機能だけに焦点を合わせていると主張しています。 実際、これはかなり低レベルのソリューションであり、エンド開発者やユーザーではなく、Kubernetes(Kubelet内)やMesosなどの大規模システム、およびAmazon ECSやGoogle Container Engineなどのサービスと対話することが提案されています。 製品への埋め込みはすべて同じgRPC APIを介して提供されます(ctrユーティリティはデバッグと実験のみを目的としています)。



PS先週、Cloud Native Computing Foundationは、プロジェクト間でcontainerd 採用を正式に確認しました。 また、同じ日に、CoreOSの同様のコンテナー化された問題を解決するrktプロジェクトは、そのような運命をたどりました。これは、オープン仕様のコンテナーアプリ(appc)の実装であり、イメージにACI形式(アプリケーションコンテナーイメージ)を使用します。 CNCFは両方のプロジェクトの開発をサポートします。



All Articles