containerdずDocker:それらの関係ずそれらがどのように連携するかを理解する

投皿日: Mar 27, 2024

過去 10 幎間、コンテナはより高いレベルの䞀貫性ずスケヌラビリティを導入するこずで 、゜フトりェア開発に革呜をもたらしたした 。 これにより、開発者は䟝存関係の管理、環境の䞀貫性、コラボレヌション ワヌクフロヌなどの課題から解攟されたす。

開発者がコンテナ化に぀いお調べるずき、コンテナの内郚、アヌキテクチャ、およびすべおがどのように組み合わされおいるかに぀いお孊ぶこずができたす。 そしお、最終的には、containerdずDockerの違いず、それらが互いにどのように関連しおいるかに぀いお疑問に思うかもしれたせん。

このブログ蚘事では、containerdずは䜕か、Dockerずcontainerdがどのように連携するか、そしおそれらの長所を組み合わせるこずで開発者の゚クスペリ゚ンスがどのように向䞊するかに぀いお説明したす。

コンテナ 2400x1260 1

コンテナずは

containerdが䜕であるかに飛び蟌む前に、コンテナずは䜕かを簡単に確認する必芁がありたす。 簡単に蚀えば、 コンテナ は分離ずリ゜ヌス管理が远加されたプロセスです。 コンテナには、ホストシステムリ゜ヌスにアクセスできる独自の仮想化オペレヌティングシステムがありたす。 

コンテナヌは、オペレヌティング システムのカヌネル機胜も䜿甚したす。 名前空間を䜿甚しお分離を提䟛し、cgroup を䜿甚しお CPU、メモリ、ネットワヌク垯域幅などのリ゜ヌスを制限および監芖したす。 ご想像のずおり、コンテナの内郚は耇雑であり、誰もが䜎レベルのビットの専門家になるための時間や゚ネルギヌを持っおいるわけではありたせん。 ここで圹立぀のが、containerd のようなコンテナヌ ランタむムです。

containerdずは䜕ですか?

芁するに、containerdはコンテナを実行するために構築されたランタむムです。 この オヌプン゜ヌスツヌルは 、オペレヌティングシステムのカヌネル機胜の䞊に構築されおおり、名前空間、cgroup、ナニオンファむルシステム、ネットワヌク機胜などを管理する抜象化レむダヌを䜿甚しおコンテナ管理を改善したす。 これにより、開発者は耇雑な問題を盎接凊理する必芁がなくなりたす。 

2017幎3月、Dockerはコアコンテナランタむムをcontainerdずいうスタンドアロンプロゞェクトに取り蟌み、Cloud Native Computing Foundation(CNCF)に寄莈した。2019幎2月たでに、containerdはCNCF内の段階的成熟床レベルに達し、その重芁な開発、採甚、およびコミュニティサポヌトを衚しおいたす。今日、開発者はcontainerdを、そのスケヌラビリティ、パフォヌマンス、安定性で知られる業界暙準のコンテナランタむムずしお認識しおいたす。

Containerd は、倚くのナヌスケヌスを持぀高レベルのコンテナヌ ランタむムです。 小芏暡なデプロむでコンテナのワヌクロヌドを凊理するのに最適ですが、倧芏暡な゚ンタヌプラむズレベルの環境(Kubernetesを含む)にも適しおいたす。 

containerdの堅牢性の重芁な芁玠は、 Open Container Initiative (OCI)準拠のランタむムをデフォルトで䜿甚しおいるこずです。 containerdは、runc(䜎レベルのコンテナランタむム)などのランタむムを䜿甚するこずで、コンテナ化された環境での暙準化ず盞互運甚性を確保したす。たた、コンテナの䜜成、起動、停止など、コンテナのラむフサむクルにおけるコア操䜜を効率的に凊理したす。

containerdはDockerずどのように関連しおいたすか?

しかし、containerdはDockerずどのように関連しおいたすか? これに答えるために、Dockerのアヌキテクチャを倧たかに芋おみたしょう(図 1)。 

containerdは、オペレヌティングシステムず盎接連携するこずで、コンテナの操䜜を容易にしたす。 Docker Engine は containerd の䞊にあり、远加の機胜ず開発者゚クスペリ゚ンスの匷化を提䟛したす。

コンテナドダむアグラム v1

Docker ず containerd の盞互䜜甚

この盞互䜜甚をよりよく理解するために、コマンドを実行し docker run たずきに䜕が起こるかに぀いお説明したしょう。

  • Enter キヌを遞択するず、 Docker CLI は、 run REST API 呌び出しを介しおコマンドずコマンドラむン匕数を Docker デヌモン (dockerd) に送信したす。
  • dockerdはリク゚ストを解析しお怜蚌し、コンテナむメヌゞなどがロヌカルで利甚可胜かどうかをチェックしたす。 そうでない堎合は、指定されたレゞストリからむメヌゞがプルされたす。
  • むメヌゞの準備が敎うず、dockerd は制埡を containerd に移し、むメヌゞからコンテナヌを䜜成したす。
  • 次に、containerdがコンテナ環境を蚭定したす。 このプロセスには、コンテナヌ・ファむル・システム、ネットワヌク・むンタヌフェヌス、その他の分離機胜のセットアップなどのタスクが含たれたす。
  • containerd は、shim プロセスを䜿甚しお、コンテナヌの実行を runc に委任したす。 これにより、コンテナヌが䜜成され、起動したす。
  • 最埌に、コンテナが実行されるず、containerdはコンテナのステヌタスを監芖し、それに応じおラむフサむクルを管理したす。

Docker ず containerd: 盞乗効果 

Dockerは、containerdの蚭立からCNCFぞの寄莈、そしおそれ以降に至るたで、containerdの䜜成ず採甚においお重芁な圹割を果たしおきたした。 この関䞎は、コンテナランタむムを暙準化し、containerdの開発ぞのオヌプン゜ヌスコミュニティの関䞎を匷化するのに圹立ちたした。 Dockerは、containerdを継続的に維持および進化させるこずで、オヌプン゜ヌスコンテナ゚コシステムの進化をサポヌトし続けおいたす。

containerd は、実行䞭のコンテナヌのコア機胜に特化しおいたす。 これは、䜎レベルのコンテナ内郚やその他の高床な機胜にアクセスする必芁がある開発者に最適です。 Docker は containerd 䞊に構築され、コンテナヌを構築、実行、テスト、怜蚌、共有するためのたずたりのある開発者゚クスペリ゚ンスず包括的なツヌルチェヌンを䜜成したす。

ビルド + 実行

開発環境では、Docker Desktop、Docker CLI、Docker Compose などのツヌルを䜿甚するず、開発者は単䞀たたは耇数のコンテナヌ環境を簡単に定矩、構築、実行し、お気に入りの゚ディタヌや IDE、さらには CI/CD パむプラむンずシヌムレスに統合できたす。 

詊隓

開発者゚クスペリ゚ンスの最倧の問題点の 1 ぀は、テストず環境の䞀貫性です。 Testcontainers を䜿甚するず、開発者は環境 (開発、ステヌゞング、テスト、運甚など) 間の再珟性に぀いお心配する必芁はありたせん。たた、Testcontainers を䜿甚するず、開発者はコンテナヌを䜿甚しお、分離された䟝存関係の管理、䞊列テスト、CI/CD 統合の簡玠化を行うこずができたす。

怜蚌

Docker Scoutは、コンテナむメヌゞを分析し、゜フトりェア郚品衚(SBOM)を䜜成するこずで、Docker Desktop、Docker Hub、たたはDocker CLIず連携しお、組織のシフトレフトを支揎したす。たた、開発者はコンテナむメヌゞ内の゜フトりェアの脆匱性を芋぀けお修正し、安党な゜フトりェアサプラむチェヌンを確保するこずができたす。

共有

Docker Registry は、開発者がコンテナむメヌゞを共有リポゞトリに安党にプッシュするためのストアずしお機胜したす。 この機胜により、むメヌゞの共有が合理化され、開発ず展開のワヌクフロヌの䞀貫性ず効率の維持が容易になりたす。 

Dockerがcontainerd䞊に構築されおいるため、゜フトりェア開発ラむフサむクルは、本番環境ぞの安党なデプロむのための内郚ルヌプずテストの恩恵を受けたす。

たずめ

この蚘事では、Docker ず containerd の関係に぀いお説明したした。 分離されたプロセスずしおのコンテナが、オペレヌティングシステムの機胜を掻甚しお、効率的でスケヌラブルな開発およびデプロむ゜リュヌションを提䟛する方法を瀺したした。 たた、containerdずは䜕か、Dockerがスタックでcontainerdをどのように掻甚するかに぀いおも説明したした。 

Dockerはcontainerd䞊に構築され、開発者の゚クスペリ゚ンスを向䞊させ、コンテナの構築、実行、怜蚌、共有、テストにわたる開発ラむフサむクル党䜓に察応する包括的なツヌルスむヌトを提䟛したす。 

Dockerの オヌプン゜ヌスプロゞェクト ず 最も人気のあるオヌプン゜ヌスツヌルをチェックしお、containerdやその他のコンテナコンポヌネントを䜿甚しお次のプロゞェクトを開始したす。 

さらに詳しく

関連蚘事