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 にこれがあるのはなぜですか?

推薦する

数字当てゲームを実装するための純粋なJavaScript

100 以内の自然数をランダムに選択し、プレイヤーに 10 ラウンド以内にその数を推測させる数字推...

Nginx 1つのドメイン名で複数のプロジェクトにアクセスする方法の例

背景最近、複数のプロジェクトを展開する際に、1 つのドメイン名で複数のプロジェクトにアクセスする方法...

MySQL thread_stack 接続スレッドの最適化

MySQL は、ネットワーク経由だけでなく、名前付きパイプ経由でも接続できます。MySQL への接続...

CSSを使用してAndroidシステムの読み込みアニメーションを実装する

Web には一般的な読み込みアイコンが 2 つあります。1 つは iOS の「菊」、もう 1 つは ...

Vueはビデオ再生を実装するためにビデオタグを使用します

この記事では、ビデオタグを使用してビデオ再生を実装するVueの具体的なコードを参考までに共有します。...

Mybatis での動的 SQL ステートメント分析

この記事は主にMybatisでの動的SQL文の解析について紹介します。この記事のサンプルコードは非常...

Linux sshのデフォルトのリモートポート番号を変更する6つの手順

Linux のデフォルトの ssh リモート ポートは 22 です。デフォルトのポートは、悪意のある...

MacでDockerがホストマシンにpingできない問題を解決する

解決Docker for Macに付属するLinux仮想マシン(軽量ですが、ソケットファイルを使用し...

ウェブページの幅を携帯電話の画面(ビューポート)の幅に自動的に適応させる実装コード

一般的な書き方は次のとおりです。 XML/HTML コードコンテンツをクリップボードにコピー<...

ボタンをクリックした後のCSS読み込み効果を実現する

自社製品にクリック後1~2秒待機時間があるボタン(確認メールを送信する)があるため、クリック後の1~...

複合主キーと複数列インデックスに遭遇した場合の MySQL 行ロックの詳細な説明

背景今日、他のプロジェクト チームと協力してシス​​テムのストレス テストを実施しているときに、プロ...

VMware WorkStation 14 pro インストール Ubuntu 17.04 チュートリアル

この記事では、VMware Workstation14 ProにUBuntu17.04をインストール...

HTTP 戻りコード一覧(中国語と英語の説明)

httpリターンコードリスト(以下は概要です)詳細な中国語の説明についてはここをクリックしてくださ...

Element-UI の Select と Cascader にポップアップ下部アクション ボタンを追加する方法

下図のように、 selectポップアップレイヤーの下部に操作ボタンを配置するのが一般的な設計方法です...

Linux のごみ箱メカニズムの実装プロセスと使用方法の詳細な説明

序文: Linux システムでの rm は元に戻せません。コマンドの設計自体に問題はありません。問題...