コンテナ・ランタイムを掘り下げることで、コンテナ環境がどのようにセットアップされるかを理解します。
コンテナの基礎については、 学んだときに説明しましたが、今度はコンテナに飛び込んで、コンテナ環境がどのように構築されるかを理解しましょう。この記事の情報の一部はコンテナエンジンの 引用しているので、使用するコンテナエンジンに関係なく情報は一貫しています。
コンテナ操作機構
では、podman run や docker run コマンドを実行すると、バックグラウンドでは一体何が起こるのでしょうか?ステップバイステップの概要は以下の通りです:
- ローカルにイメージがない場合は、イメージからイメージを取り出します。
- イメージは、すべてのコンテナレイヤーが互いにスタックされ、マージされたファイルシステムを形成する書き込み時間複製ファイルシステム上に抽出されます。
- コンテナのマウントポイントを準備
- コンテナが期待通りに動作するように、コンテナ・イメージからメタデータを設定(CMDやENTRYPOINTをユーザー入力から上書きする設定、SECCOMPルールの設定など)。
- プロセス、ネットワーク、ファイルシステム () など、このコンテナに何らかの分離を割り当てるようカーネルに思い出させます。
- カーネルに、CPUやメモリの制限など、変更コンテナに何らかのリソース制限を割り当てるように指示 ()
- コンテナ起動用にカーネルに1つ渡します。
- SELinux/AppArmorのセットアップ
上記のすべてを担うのがコンテナランタイムです。コンテナ・ランタイムというと、runc、lxc、containerd、rkt、cri-oなどが思い浮かぶかもしれません。まあ、間違ってはいません。これらはコンテナエンジンとコンテナランタイムで、それぞれ異なる状況に合わせて作られています。
コンテナの実行、名前空間の設定、コンテナの制御グループに重点を置いており、基礎となるコンテナランタイムとしても知られています。上位のコンテナランタイムまたはコンテナエンジンは、フォーマット、解凍、管理、イメージ共有に重点を置いています。また、開発者向けのAPIも提供します。
オープンコンテナ構想
これは、以下の2つの仕様によって行われます:
イメージの仕様
仕様の目標は、コンテナの構築、輸送、および実行準備のための相互運用可能なツールを作成することです。
仕様のハイレベルな構成要素は以下の通り:
- イメージマニフェスト - コンテナイメージを構成する要素を記述したファイル。
- イメージインデックス - イメージリストの注釈付きインデックス
- Image - イメージコンテンツのファイルシステムレイアウト。
- ファイルシステムレイアウト - コンテナファイルシステムを記述するチェンジセット
- Image - イメージレイヤーの順序と ランタイムバンドルに変換するための構成ファイルを決定します。
- ファイルシステムのレイアウト - 変換方法を説明するファイル
ランタイム仕様
この仕様は、コンテナの構成、実行環境、およびライフサイクルを定義するために使用されます。config.json ファイルは、サポートされるすべてのプラットフォーム用のコンテナ構成を提供し、コンテナの作成に使用されるフィールドを詳細に定義します。また、実行環境の詳細な定義では、コンテナの内部で実行されるアプリケーションが異なる実行環境間で一貫した環境を持つことを保証するために、コンテナのライフサイクルに定義された共通の操作について説明します。
Linuxコンテナ仕様は、 , , , LSM、ファイルシステムなど、さまざまなカーネル機能を使用して仕様を実装しています。
まとめ
コンテナランタイムはOCI仕様によって管理され、一貫性と相互運用性を提供します。多くの人はコンテナの仕組みを理解する必要なくコンテナを使用していますが、トラブルシューティングや最適化が必要な場合には、コンテナを理解することは貴重なアドバンテージとなります。
本記事は 記事をもとに、許可を得て改変したものです。





