今日はコンテナ レイヤーの概念について見ていきます。 前のセクションでは、コンテナはプロセスであることを学びました。このプロセスに基づいて、次の 3 つの部分が追加されます。 1. 物理マシンからの分離を実現するために、Linux 名前空間構成を開始します。 2. コンテナ リソースを制限するために Cgroups パラメータを設定します。 3. システムファイルディレクトリ、つまりrootfsファイル(ミラーファイルとも呼ばれる)を生成します。 ここで注意すべき点は、rootfs はコンテナが使用する必要がある基本ファイルの組み合わせのみであり、オペレーティング システム カーネルは含まれていないことです。コンテナのオペレーティング システム カーネルは、引き続きホスト マシンのカーネルを使用します。もちろん、rootfs の存在は無意味ではありません。rootfs の存在により、コンテナは最も重要なパフォーマンスである一貫性を実現できます。 01 コンテナの一貫性コンテナの rootfs には、すべての依存関係を含むオペレーティング システムのすべてのファイルとディレクトリがパッケージ化されています。この機能により、コンテナがローカルにあるかクラウドにあるかに関係なく、ユーザーはパッケージ化されたコンテナ イメージを解凍するだけで、アプリケーションの実行環境がセットアップされます。 これはコンテナの一貫性です。 02 レイヤーの概念「私が遠くまで見渡せるのは、巨人の肩の上に立っているからだ」とニュートンはかつて言いましたが、それは今でも当てはまります。 「車輪の再発明はしない」。アプリケーションを開発するときは、Linux オペレーティング システムを使用するだけで済みます。アプリケーションを実行するために Linux システムを再開発する必要はありません。 コンテナの使用中に、データ A が含まれた既存の MySQL コンテナ イメージがすでに存在し、他の人も MySQL コンテナ イメージを使用してデータ B をインポートする必要がある場合、自分の MySQL コンテナでデータ A を削除し、データ B を再インポートするだけで済みます。 上記のシナリオでは、データ A が削除され、データ B がインポートされると、データ A が削除されているため、このコンテナーを自分で使用することはできません。これは明らかに私たちが望んでいる結果ではありません。当然のことながら、データセット A とデータセット B の両方に、MySQL がインストールされているがデータがないコンテナ イメージ (つまり、rootfs) が必要です。 Docker ソフトウェアが設計されたときに、「レイヤー」という概念が導入され、この問題は巧みに解決されました。 「レイヤー」の概念は、ユニオン ファイル システム AuFS を通じて実装されます。正式名称は Advance UnionFS です。その概念は、以下に示すように、理解するのが難しくありません。 ディレクトリ1にはファイルa、ファイルcが含まれています ディレクトリ2にはファイルb、ファイルcが含まれています ファイルを結合することで、ディレクトリ 1 と 2 がディレクトリ 3 にマウントされます。この時点で、ディレクトリ 3 には a、b、c の 3 つのファイルがあります。 このとき、ディレクトリ 3 内のファイル a、b、c が変更されると、対応するディレクトリ 1 と 2 にも反映されます。 「ユニオン ファイル システム」を通じてレイヤーを実装する方法は、実際にはかなり複雑な問題なので、興味のある読者に考えてもらうことにします。ここでは、レイヤーの概念がユニオン ファイル システムを通じて実装されることを理解するだけで十分です。 以下は、mysql ベース イメージの「レイヤー」の例です。 [root@VM-0-14-centos ~]# docker イメージを検査する docker.io/mysql [ { 「ID」: 「sha256:db2b37ec6181ee1f367363432f841bf3819d4a9f61d26e42ac16e5bd7ff2ec18」、 「リポジトリタグ」: [ 「docker.io/mysql:最新」 ]、 ...... 「ルートFS」: { 「タイプ」:「レイヤー」、 「レイヤー」: [ "sha256:d0fe97fa8b8cefdffcef1d62b65aba51a6c87b6679628a2b50fc6a7a579f764c", "sha256:329fe06a30f03f9131ce8d9db2e8a9f725b18efe3457d6f015e1c4d8a3f41a0a", "sha256:ec8c80284c72bcf47ffedc0dde4d5792de761d52f974c30d37d52b9ac00e8a2a", "sha256:9dae2565e824235798981525d6ff9114817b7139c073e0d216b00ae9e58f74d0", "sha256:36b89ee4c647b9c21de8b5476b4922efc873aba69705c169e1a3edcf9128679b", "sha256:c21e35e55228365b268f57fac382a6e991db216cb03d9b7079496f5498956ab0", "sha256:15b463db445cb750fa6bc908a41fd18e38c4d2a02a978b66beb598c4f3f57b95", "sha256:7832ac00d41eda3a773a18408dea0b8e05ddbdd3a1e94afef3b6e3dc6444b7bb", "sha256:7f893b7c04ac2f939737d2da4e15af796c7acc0fd10c2951d9ae5bf33ceec2dc", "sha256:060fef62a228fff7e9dc3b7008bc9089e642ef29dc699f7e90c36ced5b2e75c6", "sha256:af6e790b82373cc65ca73efe5cc8945731525a9dcae6deeea2a5a5802561a72a", 「sha256:9b0377a95c0e0bd5aa5b220449d17333faaa0e2bd7e8b93565beeadbf3906646」 ] } } ] ご覧のとおり、RootFS はコンテナのファイルシステムであり、Layers は「レイヤー」です。 では、Docker コンテナ イメージはどのようなレイヤーで構成されているのでしょうか? ? ? 機能の違いにより、主に読み取り専用層、初期化層、読み書き層に分けられます。 読み取り専用レイヤー: 読み取り専用レイヤーは読み取り専用でマウントされます。これらのレイヤーは、オペレーティング システムの一部を段階的にマウントします。 読み取り/書き込みレイヤー: これはイメージの最上位レイヤーであり、マウント モードは読み取り/書き込みです。ファイルを書き込む前は、このディレクトリは空です。コンテナー内で書き込み操作を実行すると、変更したコンテンツがこのレイヤーに増分的に表示されます。 初期化レイヤー: init レイヤーは、docker によって特別に生成される内部レイヤーで、主に /etc/hosts や /etc/resolv.conf などのファイルが格納されます。 これらの特定のファイルを保存する理由は、これらのファイルは元々オペレーティング システムの一部ですが、ユーザーのアプリケーションによって頻繁に変更されるためです。これらの変更は現在のコンテナーに対してのみ有効です。Docker がコミットするときに、これらの変更が読み取り/書き込みレイヤーと一緒に送信されることは望ましくありません。 いくつかの注意事項: 1. ユーザーが docker commit を実行すると、読み取り/書き込みレイヤーの内容のみがコミットされます。 2. 読み取り専用レイヤー ファイル a.txt を削除する場合は、読み取り/書き込みレイヤーに同じ名前 .wh.a.txt のファイルを書き込むだけです。このようにして、a.txt ファイルは .wh.a.txt ファイルによって隠され、削除の目的が達成されます。 03 レイヤードデザインの利点階層化された設計と増分データ操作により、毎回取得および変更されるコンテンツは、完全なオペレーティング システムよりも小さくなります。 基礎となる読み取り専用レイヤーを共有することで、複数のコンテナ イメージによって使用される合計スペースが、各コンテナ イメージの合計よりも小さくなります。 同時に、コンテナ イメージに基づくチーム コラボレーションにより、さまざまな企業や分野の人々を結び付け、新しい機能をより迅速に反復することができます。 以上がDockerコンテナレイヤーの概念の詳細な説明です。Dockerコンテナレイヤーの詳細については、123WORDPRESS.COMの他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
VScode リモートデバッグ Linux プログラムの問題について見てみましょう。具体的な内容は以...
目次1. 計算されたプロパティ1.1 基本的な例1.2 計算プロパティキャッシュとメソッド1.3 計...
質問1件会社のサーバーはApacheを使用しており、バックエンドはPHP、サーバーはLinux C/...
ページの自動スクロール効果は JavaScript で実現できますが、今日偶然、JS 制御なしでさま...
この記事では、Navicatを使用してcsvデータをmysqlにインポートする方法を参考までに紹介し...
最近、製品部門のユーザーエクスペリエンスチームの学生は、アライアンス環境における広告に関する一連の研...
序文コードを実行してエラーが発生すると、エラーが出力されます。エラーにはスタック情報が含まれており、...
問題の起源docker を使用する場合、残念ながら docker コンテナ内のホストのポート 80 ...
Mysqlが2つのテーブルを関連付けると、次のエラーメッセージが生成されます:照合順序の不正な組み合...
コードを画像に変換するにはhtml2canvas は、ブラウザから Web ページのスクリーンショッ...
最近、分散型およびビッグデータ技術について学ぶために、いくつかの仮想マシンに取り組んでいます。まず、...
目次スタイルスコープスタイルモジュール状態駆動型動的CSS要約するスタイルスコープ注意事項:スタイル...
環境の紹介オペレーティングシステム: Centos 7.4 Zabbix バージョン: zabbix...
序文アプリケーションのバグや DBA の誤操作が発生した場合、テーブル全体が更新される可能性がありま...
目次1. 繰り返し宣言1.1 変数1.2 しましょう1.3 定数2. 可変プロモーション2.1 変数...