DockerコンテナのライフサイクルアーキテクチャとVMとの違いについて詳しく説明します。

DockerコンテナのライフサイクルアーキテクチャとVMとの違いについて詳しく説明します。

コンテナのライフサイクル

コンテナランタイムのライフサイクル

コンテナは、分離特性を持つプロセスのセットです。docker run を使用する場合、独立したファイル システムを提供し、対応する実行プログラムを指定するためにイメージが選択されます。ここで指定する実行中のプログラムを初期プロセスと呼びます。初期プロセスが起動するとコンテナも起動します。初期プロセスが終了するとコンテナも終了します。

したがって、コンテナのライフサイクルは初期プロセスのライフサイクルと一致していると考えられます。もちろん、コンテナ内には複数の初期プロセスが存在するため、初期プロセス自体も他のサブプロセスや、docker exec によって生成される運用保守操作を生成する可能性があり、これらも初期プロセス管理の範囲に含まれます。最初のプロセスが終了すると、すべての子プロセスも終了します。これもリソースの漏洩を防ぐためです。

ただし、このアプローチにも問題があります。まず、アプリケーション内のプログラムはステートフルであることが多く、重要なデータを生成する可能性があります。コンテナが終了して削除されると、データは失われますが、これはアプリケーション側にとって受け入れられません。したがって、コンテナによって生成された重要なデータは永続化する必要があります。コンテナーは、データ ボリュームと呼ばれる指定されたディレクトリにデータを直接保存できます。

データ ボリュームにはいくつかの特性がありますが、その 1 つは、データ ボリュームのライフ サイクルがコンテナーのライフ サイクルとは独立していることです。つまり、コンテナーの作成、実行、停止、削除などの操作は、データ ボリュームとは無関係です。これは、データ ボリュームがコンテナーの永続化に使用される特別なディレクトリであるためです。簡単に言えば、データ ボリュームをコンテナーにマウントして、コンテナーが対応するディレクトリにデータを書き込むことができるようにし、コンテナーを終了してもデータが失われないようにします。

一般的に、データ ボリュームを管理する主な方法は 2 つあります。

1 つ目の方法は、bind を通じてホスト ディレクトリをコンテナ内に直接マウントする方法です。この方法は比較的シンプルですが、ホスト ディレクトリに依存し、すべてのホストを一元管理する必要があるため、運用および保守コストが発生します。

2 つ目は、ディレクトリ管理をランタイム エンジンに引き渡すことです。

コンテナプロジェクトのアーキテクチャ

Moby コンテナ エンジン アーキテクチャ

Moby は最も人気のあるコンテナ管理エンジンです。Moby デーモンは、コンテナ、イメージ、ネットワーク、ボリュームの管理を提供します。 moby デーモンが依存する最も重要なコンポーネントは containerd です。containerd は、moby デーモンから独立したコンテナ ランタイム管理エンジンであり、コンテナとイメージの管理を提供できます。

containerd の基盤となるレイヤーは、デーモン プロセスに似た containerd shim モジュールです。この設計には、いくつかの理由があります。

まず、containerd はコンテナのライフサイクルを管理する必要があり、コンテナは異なるコンテナ ランタイムによって作成される可能性があるため、柔軟なプラグイン管理が必要です。 Shim はさまざまなコンテナ ランタイム用に開発されているため、containerd から分離してプラグインを通じて管理できます。

次に、shim はプラグインとして実装されているため、containerd によって動的に引き継がれる可能性があります。この機能がないと、moby デーモンまたは containerd デーモンが予期せず終了すると、コンテナーは管理されなくなり、消えたり終了したりして、アプリケーションの動作に影響を及ぼします。

最後に、moby や containerd はいつでもアップグレードされる可能性があるため、shim メカニズムが提供されていない場合は、その場でアップグレードしたり、ビジネスに影響を与えずにアップグレードすることは不可能になります。したがって、動的テイクオーバーの機能を実装する containerd shim は非常に重要です。

上記は moby の一般的な紹介にすぎません。

コンテナとVM

コンテナとVMの違い

VM はハイパーバイザー仮想化テクノロジーを使用して CPU やメモリなどのハードウェア リソースをシミュレートし、ホスト マシン上にゲスト OS を確立できるようにします。これは、仮想マシンのインストールと呼ばれることがよくあります。

Ubuntu、CentOS、さらには Windows など、各ゲスト OS には独立したカーネルがあります。このようなゲスト OS では、各アプリケーションは互いに独立しており、VM はより優れた分離効果を提供できます。ただし、この分離効果には一定の代償が伴います。コンピューティング リソースの一部を仮想化に引き渡す必要があるため、既存のコンピューティング リソースを十分に活用することが困難になります。また、各ゲスト OS には大量のディスク領域が必要です。たとえば、Windows オペレーティング システムのインストールには 10~30G のディスク領域が必要であり、Ubuntu にも 5~6G が必要です。同時に、この方法は起動が非常に遅くなります。まさに仮想マシン技術の欠点のために、コンテナ技術が誕生したのです。

コンテナはプロセス用なので、ゲスト OS は必要ありません。必要なファイル セットを提供するには、独立したファイル システムのみが必要です。すべてのファイルの分離はプロセス レベルで行われるため、起動時間は VM よりも速く、必要なディスク領域も VM よりも小さくなります。もちろん、プロセスレベルの分離は想像したほど良くはなく、分離効果は VM よりもはるかに悪くなります。

全体:

VM と比較すると、コンテナには独自の長所と短所があるため、コンテナ技術も強力な分離に向けて発展しています。

Docker コンテナのライフサイクル アーキテクチャと VM との違いについては、上記の記事ですべて説明しました。参考になれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Windows ホストと Docker コンテナに共有フォルダを設定してマウントする手順
  • Dockerイメージのインポート、エクスポート、バックアップ、移行操作
  • 負荷分散と動的および静的分離操作を実現するDocker NginxコンテナとTomcatコンテナ
  • Dockerイメージの作成Dockerfileとコミット操作
  • Docker Gitlab+Jenkins+Harborは永続的なプラットフォーム運用を構築します
  • Dockerコンテナ監視の原理とcAdvisorのインストールおよび使用方法
  • dockerコマンドの使用にはsudoは必要ありません

<<:  HTMLエンコードによる文字化け問題について

>>:  JS にこれがあるのはなぜですか?

推薦する

Vue のキーボードイベント監視の概要

キー修飾子キーボード イベントをリッスンする場合、詳細なキーを確認する必要があることがよくあります。...

フロントエンドにアニメーション遷移効果を実装する方法

目次導入従来のトランジションアニメーションCSS トランジションアニメーションjsアニメーション従来...

Centos7 に yum 経由で MySQL をインストールする方法

1. MySQLがインストールされているかどうかを確認する yum インストール済みリスト | gr...

MySQL 8.x msi バージョンのインストール チュートリアル (画像とテキスト付き)

1. MySQLをダウンロードする公式サイトのダウンロードアドレス https://dev.mys...

Vue 学習 - VueRouter ルーティングの基礎

目次1. Vueルーター1. 説明2. 選択したルートのレンダリング: 3. 基本的な動作原理2. ...

Centos8でdockerがインストールできない問題の解決方法

問題 [root@zh ~]# [root@zh ~]# [root@zh ~]# yum -y d...

要素タイムラインの実装

目次コンポーネント - タイムラインカスタムノードスタイルカスタムタイムスタンプコンポーネント - ...

Javascript 文字列メソッドの詳細な説明

目次文字列の長さ: 長さcharAt() charCodeAt()文字列に値が含まれているかどうかを...

水平スクロールバーを実装する2つの方法の例

序文:プロジェクトの開発中に、1 行にナビゲーション バーが多すぎる場合に水平スクロール バーを実装...

MySQLデータベースでの値の追加、変更、削除、クリアの例

3. MySQLデータ管理最初の方法:お勧めできません。複雑そうです -- 学生テーブルの grad...

docker-machineの使い方の詳しい説明

Docker-machineはDockerが公式に提供しているDocker管理ツールです。これは d...

MySQL 8の新機能ROLEの詳しい説明

MySQL ROLE はどのような問題を解決しますか?プロフェッショナルな資質を持ち、権限管理に細心...

Linux サーバーで MySQL リモート接続を有効にする方法

序文以前の非MKレコードを再編成するためのMySQLの学習説明する有効になっていない場合、データベー...

Win10 での MySQL 8.0.20 のインストールと設定のチュートリアル

Win10 システムでの MySQL 8.0.20 のインストールと設定の超詳細なチュートリアルMy...