この記事ではDockerとContainerdの違いを説明します。

この記事ではDockerとContainerdの違いを説明します。

コンテナランタイム

コンテナ ランタイムは、オペレーティング システム レベルでコンテナを作成および管理するソフトウェア ツールまたはコンポーネントです。これはコンテナ化技術のコアコンポーネントの 1 つであり、コンテナ内でアプリケーションを実行し、分離、リソース管理、セキュリティなどの機能を提供するために使用されます。 Kubernetes では、コンテナ ランタイムはコンテナの管理と実行を担当するコンポーネントです。以前は、Docker が最も一般的に使用されていたコンテナ ランタイムでしたが、時間が経つにつれて、containerd が Kubernetes の別の一般的なコンテナ ランタイムの選択肢になりました。

注: Dockershim は、Kubernetes バージョン 1.24 以降、Kubernetes プロジェクトから削除されました。

コンテナ ランタイムの主なタスクは次のとおりです。

  1. コンテナの作成と起動: コンテナ ランタイムは、事前定義されたコンテナ構成情報 (イメージ、コマンド、環境変数など) に基づいてコンテナ インスタンスを作成および起動する役割を担います。
  2. コンテナ ファイル システム管理: コンテナ ランタイムは、コンテナのファイル システムを処理し、イメージの内容をコンテナのファイル システムにマウントし、コンテナ間の分離を提供します。
  3. リソースの制限と管理: コンテナ ランタイムは、ユーザーまたは管理者が定義したリソース制限に従って、コンテナの CPU、メモリ、ディスクなどのリソースの使用を管理できます。
  4. コンテナ ネットワーク: コンテナ ランタイムは、コンテナが他のコンテナまたは外部ネットワークと通信できるように、コンテナのネットワークを構成するのに役立ちます。
  5. セキュリティ: コンテナ ランタイムは、コンテナとホスト間の分離を確保し、コンテナ内の悪意のある動作が他のコンテナやホストに影響を及ぼさないようにするためのセキュリティ メカニズムを実装します。

今日のクラウドネイティブ テクノロジーのトレンドでは、コンテナ化テクノロジーが最新のアプリケーション展開の主流の選択肢となっています。 Kubernetes (K8s) は、人気のコンテナ オーケストレーション システムとして、大規模なコンテナ クラスターの管理に広く使用されています。 K8s では、コンテナ ランタイムの選択がパフォーマンス、信頼性、セキュリティにおいて重要な役割を果たします。この記事では、2 つの一般的な K8s コンテナ ランタイムである Containerd と Docker を比較し、それらの類似点と相違点を探ります。

Docker: 元祖リーダー

初期のコンテナ技術である Docker は、従来の仮想化方式を覆し、軽量なコンテナ化によるアプリケーションのパッケージ化、配信、運用を実現しました。 Docker はコンテナ技術の普及に重要な役割を果たしてきました。ユーザーフレンドリーなコマンドライン ツールとグラフィカル インターフェイスにより、コンテナ テクノロジーは開発者にとってより使いやすくなっています。ある時点で、Docker はコンテナ化とほぼ同義になりました。しかし、Kubernetes の台頭により、K8s における Docker の地位は徐々に脅かされるようになりました。一方、完全なコンテナ プラットフォームである Docker には、K8s に必要のない多くの機能が含まれており、リソースの無駄が生じます。一方、K8s 自体はコンテナ オーケストレーションとスケジューリング機能を提供しており、これらは Docker と重複し、ある程度の競合が発生します。 Docker が市場を独占するのを防ぐために、Docker の実装はいくつかの標準化されたモジュールに分割されました。標準化の目的は、モジュールを他の実装に置き換えることができ、特定のメーカーによって制御されないようにすることです。 Dockerは

  • dockerクライアント
  • ドッカー
  • コンテナ
  • docker-shim
  • ランク

したがって、containerd は docker の基本コンポーネントの 1 つです。 Docker のコンテナの管理と操作は基本的に containerd を通じて完了します。では、containerd とは何でしょうか?

Containerd: K8s エコシステムの標準

Containerd は、Docker チームによって開発されたオープンソースのコンテナ ランタイムです。軽量で高性能なコンテナ ランタイム環境の提供に重点を置いています。 Containerd は純粋なコンテナ ランタイムとして、K8s のアーキテクチャと要件にさらに沿うように設計されています。リソースフットプリントが小さく、起動時間が短く、パフォーマンスが向上します。 K8s コミュニティは Containerd の利点を認識しており、K8s エコシステムの標準コンテナ ランタイムとして使用しています。 Containerd は、コンテナ イメージの転送と保存、コンテナの実行と管理、ストレージとネットワークなど、ホスト内のコンテナのライフサイクル全体を管理できます。より詳細には、Containerd は次のことを行います。

  • コンテナのライフサイクルを管理する(コンテナの作成から破棄まで)
  • コンテナイメージのプル/プッシュ
  • ストレージ管理(画像やコンテナデータのストレージを管理)
  • runC を呼び出してコンテナを実行します (runC などのコンテナ ランタイムと対話します)
  • コンテナのネットワークインターフェースとネットワークの管理

コンテナ ランタイム インターフェース (CRI)

コンテナ ランタイム インターフェース (CRI)。 CRI は、クラスター コンポーネントを再コンパイルせずに kubelet がさまざまなコンテナ ランタイムを使用できるようにするプラグイン インターフェイスです。 kubelet が Pod とそのコンテナを起動できるように、クラスター内のすべてのノードで機能するコンテナ ランタイムが必要です。コンテナ ランタイム インターフェース (CRI) は、kubelet とコンテナ ランタイム間の通信に使用される主要なプロトコルです。

Kubernetes と dockershim

Kubernetes アーキテクチャ図から、Kubelet の下に、OS との実際のやり取りである Contianer ランタイム (コンテナ ランタイム) のレイヤーがあることがわかります。このコンテナ ランタイムは、コンテナのライフ サイクル全体を管理し、イメージのプルなどの操作を実行する役割を担います。

現在サポートされているCRIバックエンド

Kubernetes を初めて使用する場合、通常はデフォルトで Docker をコンテナ ランタイムとして使用します。実際、Kubernetes 1.5 は CRI をサポートしています。 CRI インターフェースを通じて、Pod のバックエンドとして他のコンテナ ランタイムを指定できます。現在、CRI をサポートしているバックエンドは次のとおりです。

  • cri-o: cri-o は Kubernetes 用の CRI 標準の実装であり、Kubernetes が OCI 互換のコンテナ ランタイムを間接的に使用できるようにします。 cri-o は、Kubernetes が OCI 互換のコンテナ ランタイムを使用するための中間層として考えることができます。
  • cri-containerd: Containerd に基づく Kubernetes CRI 実装。 Containerd は、CRI-Containerd のプロセスおよび実装です。
  • rkt: CoreOS が Docker に対抗するために推進しているコンテナ ランタイム
  • frakti: ハイパーバイザベースの CRI
  • Docker: Kubernetes が元々サポートしていたコンテナ ランタイム。まだ kubelet から完全に分離されていません。 Docker は OCI 標準も推進しました。

ドッカーシム

Kubernetes が CRI 動作仕様を提案したとき、Docker は containerd を分離したばかりで、CRI 標準をサポートしていませんでした。当時、Docker は最も主流かつ権威のあるコンテナ技術であったため、Kuberentes は CRI インターフェース仕様を提案したものの、CRI と Docker 間の接続を適応させる必要があり、Kubelet と Docker のコンテナ ランタイムを接続するための中間層またはシムが必要でした。そこで、Dockershim が kubelet に追加されました (shim は一時的かつ互換性があることを意味します)。 docker をランタイムとして使用する場合、コンテナを起動する実際のプロセスは次のようになります。この段階では、dockershim コンポーネントは Kubelet コード内にあります。つまり、Dockershim は K8S 組織によって開発および保守されています。 K8S 組織は Docker のバージョンリリースを制御および管理できないため、Docker が新しいリリースをリリースするたびに、K8S 組織は Dockershim を迅速に更新および保守することに重点を置く必要があります。 Kubernetes バージョン 1.24 では、dockershim が正式に削除され、非推奨になりました。この問題の本質は、組み込みの dockershim 機能を放棄し、Containerd に直接接続することです (CRI は後でサポートされます)。この方法はより標準的であり、呼び出しリンクもシンプルです。

通話関係の比較

ランタイムが docker の場合の呼び出しチェーン: 呼び出し関係は次のとおりです: kubelet --> dockershim (kubelet プロセス内) --> dockerd --> containerd ランタイムが containerd の場合の呼び出しチェーン: 呼び出し関係は次のとおりです: kubelet --> cri plugin (containerd プロセス内) --> containerd 概要: k8s の観点からは、Containerd をランタイム コンポーネントとして選択する方が適切です。これは、Containerd の方が呼び出しチェーンが短く、コンポーネントが少なく、より安定しており、占有するノード リソースが少ないためです。

一般的なコマンド

ctr は containerd のクライアント ツールです。 crictl は、k8s ノード上のコンテナ ランタイムとアプリケーションを検査およびデバッグするために使用できる、CRI 準拠のコンテナ ランタイム コマンド ライン インターフェイスです。 ctr -v は containerd のバージョンを出力し、crictl -v は k8s の現在のバージョンを出力します。結果から、明らかに crictl が k8s に使用されていることがわかります。


ドッカー

ctr (コンテナ)

crictl (Kubernetes)

実行中のコンテナを表示する

ドッカーps

ctr タスク ls/ctr コンテナ ls

クリクトルps

ミラーを見る

Docker イメージ

ctr イメージ ls

crictl画像

コンテナログを表示する

docker ログ

なし

crictl ログ

コンテナデータ情報を表示する

ドッカー検査

ctr コンテナ情報

crictl 検査

コンテナリソースの表示

docker 統計

なし

crictl 統計

既存のコンテナを起動/停止する

docker の開始/停止

ctr タスクの開始/終了

crictl 開始/停止

新しいコンテナを実行する

ドッカー実行

ctr 実行

なし(最小単位はポッド)

画像タグを変更する

docker タグ

ctr 画像タグ

なし

新しいコンテナを作成する

ドッカー作成

ctr コンテナ作成

crictl 作成

画像のインポート

ドッカーロード

ctr 画像のインポート

なし

画像のエクスポート

ドッカー保存

ctr イメージエクスポート

なし

コンテナの削除

ドッカーrm

ctr コンテナ rm

crictl rm

画像の削除

ドッカー

ctr 画像 rm

crictl rmi

画像をプルする

docker プル

ctr イメージ プル

ctictl プル

プッシュ画像

ドッカープッシュ

ctr画像プッシュ

なし

コンテナ内でコマンドを実行する

ドッカー実行

なし

crictl 実行


<<:  エッジコンピューティングアーキテクチャ: 低遅延エッジサービスの実現

>>:  小紅書は、兆レベルのソーシャルネットワーク関係の課題にどのように対処するのでしょうか?グラフストレージシステム REDtao が登場しました!

推薦する

ページ最適化について留意すべき3つのこと

ページ最適化は SEO 最適化における最も基本的な内容であり、焦点でもあります。しかし、多くのウェブ...

大規模エリアにおける仮想化コアネットワークの導入に関する議論

NFV テクノロジーは、ネットワーク要素のソフトウェアを基盤となるハードウェアから分離し、VNF の...

国内外の安価な高防御VPSを推奨、安くて実用的を追求するだけ

DDoS 攻撃は今のところ最も解決不可能な攻撃です。本物の防御力を備えた安価で防御力の高い VPS ...

恒生銀行が2023年フィンテックトレンド調査レポートを発表、デジタル金融時代の技術革新を探る

12月8日、恒生銀行は「デジタルインテリジェンス、共生、未来」2022恒生金融技術カンファレンスにお...

シームレスなハイブリッドクラウド + SD-WAN ZStack が Dahe Cloud と提携し、クラウドネットワークの新たな章を開く

2018年、プライベートクラウドとパブリッククラウドの競争熱は薄れ、両者の利点を組み合わせたハイブリ...

#おすすめ# ftpit: すべての VPS が 50% オフ、オプションのコンピュータ ルームが 6 つ、控えめで人気のないビジネス、Web サイト構築などのタスクに適しています

運営開始から数年経ちますが、基本的に半年ごとにプロモーションを実施しています。サーバーも安定しており...

中間レビュー: 2022 年に注目を集める Kubernetes スタートアップ 10 社

Kubernetes は、2014 年に Google が複数のクラスターとデバイス上で何千ものジョ...

検索エンジンが好むウェブサイトレイアウトを作成する

ウェブサイトの構造は SEO の基礎です。SEO に有利なウェブサイトの構造を構築するには、検索エン...

timeweb: 老舗ロシアのホスティング会社、VPSの月額料金はわずか4.95人民元

timeweb (登録商標 N461919、ライセンス ROSKOMNADZOR N142739) ...

O2O運用と潜在的および既存のバンユーザー管理

最近、地元の新興インターネット企業をいくつか見てきました。彼らの良い発展を楽しみにしていますが、同時...

B2B ウェブサイトの収益化テクニックを解読 - A5 Webmaster Network

B2Bウェブサイトの主な収入源は広告収入、会員費、オフライン活動などですが、実際の運用においてはいく...

nodeblade-Dallas VPS/15% オフ/無料ダブルメモリ/256M メモリ、年間 12 ドル

NodeBlade Solutions, LLC は 2009 年から運営されています。今月、3 番...

dreamhost 1.62USD/月、無料ドメイン名付き

私は長い間 Dreamhost に注目していませんでした。今日、彼らの特別オファーを見つけました。こ...

Baidu の経験を活用して旅行ウェブサイトを宣伝する方法

Baidu傘下のすべての製品は、ウェブサイト最適化担当者にとって必須科目となっているため、Baidu...