Docker ファイルの階層化の詳細な分析 (詳細な例)

WBOY
リリース: 2022-01-28 17:09:33
転載
3730 人が閲覧しました

この記事では、docker ファイルの階層化に関する関連知識を提供します。この記事では、docker コンテナーの例を使用して、docker ファイルの階層化の原則について説明します。皆様のお役に立てれば幸いです。

Docker ファイルの階層化の詳細な分析 (詳細な例)

知識の準備

  • Docker は、実際には Linux カーネルのいくつかの機能を使用してリソースの分離を実現しており、ファイル システムもその 1 つです。 , リソースをより効率的に利用できるようにするために、Docker は階層ファイル システム構造を採用してコンテナのファイル システムを実装します。
  • 個人的には、この原理は並行宇宙の概念に少し似ていると思います。私たちの宇宙には並行宇宙が存在すると信じている人もいます。つまり、私たちが行うさまざまな選択によって、さまざまな宇宙が分散され、継続して実行されると考えられています。 . 夢を見るということは、これらの平行世界の間を旅することです。ここでも似ています。イメージをパッケージ化して docker run で実行すると、これに基づいて別のユニバースが実際に作成されます。コンテナーが実行を続けると、コンテナーのコンテンツは元のイメージのコンテンツと同じになります。 . 物事には多くのズレや差異があり、徐々に独自の世界を形成していきます。

Docker ファイル システム

各コンテナのファイル システム階層化ステータスは、docker Inspection [container-id] --format={{.GraphDriver}} から取得できます。

{map[LowerDir:/var/lib/docker/overlay2/52f456f455215e56b77087495a5d35323fbf1c0e0391f45349f386006c75865b-init/diff:/var/lib/docker/overlay2/e4b90240aa77212dde6499a49c421d26977ed9fe8a1f6fcbaaaf77d85c67654e/diff MergedDir:/var/lib/docker/overlay2/52f456f455215e56b77087495a5d35323fbf1c0e0391f45349f386006c75865b/merged UpperDir:/var/lib/docker/overlay2/52f456f455215e56b77087495a5d35323fbf1c0e0391f45349f386006c75865b/diff WorkDir:/var/lib/docker/overlay2/52f456f455215e56b77087495a5d35323fbf1c0e0391f45349f386006c75865b/work] overlay2}
ログイン後にコピー

主に 4 つのタイプがあります

LowerDir

これは、このイメージに基づくすべてのコンテナが同じファイル システム (イメージ レイヤー) を指すということです。コンテナはこのレイヤーを使用します。

それでは、このレイヤーはどこから来たのでしょうか? 使用する画像を見ることができます

MergedDir

これは、下位レイヤーと上位レイヤーを組み合わせた別のコンテナーです。コンテナ内に最終的なファイル システムを提供します

##UpperDir

#これは、さまざまなコンテナの操作を記録し、下位レイヤの比較を通じて、マージ レイヤを生成できます

WorkDir

まだ深くは理解されていません

docker run -d alpine:latest
ログイン後にコピー

ミラー層のファイル システム情報を表示します

docker inspect alpine --format={{.GraphDriver}}
ログイン後にコピー
{map[MergedDir:/var/lib/docker/overlay2/e4b90240aa77212dde6499a49c421d26977ed9fe8a1f6fcbaaaf77d85c67654e/merged UpperDir:/var/lib/docker/overlay2/e4b90240aa77212dde6499a49c421d26977ed9fe8a1f6fcbaaaf77d85c67654e/diff WorkDir:/var/lib/docker/overlay2/e4b90240aa77212dde6499a49c421d26977ed9fe8a1f6fcbaaaf77d85c67654e/work] overlay2}
ログイン後にコピー

UpperDir、これに注意してくださいミラーの上位層です。つまり、このレベルで変更を加えることができます。これは後で作成されるコンテナに影響します

コンテナのファイル システム情報を表示します

docker inspect 9a118484ba --format={{.GraphDriver}}
ログイン後にコピー
{map[LowerDir:/var/lib/docker/overlay2/3d3f32727c4f7867d43c1e61d635ac0ed22e95ff39c66240166dd6614b81fe14-init/diff:/var/lib/docker/overlay2/e4b90240aa77212dde6499a49c421d26977ed9fe8a1f6fcbaaaf77d85c67654e/diff MergedDir:/var/lib/docker/overlay2/3d3f32727c4f7867d43c1e61d635ac0ed22e95ff39c66240166dd6614b81fe14/merged UpperDir:/var/lib/docker/overlay2/3d3f32727c4f7867d43c1e61d635ac0ed22e95ff39c66240166dd6614b81fe14/diff WorkDir:/var/lib/docker/overlay2/3d3f32727c4f7867d43c1e61d635ac0ed22e95ff39c66240166dd6614b81fe14/work] overlay2}
ログイン後にコピー

次のことがわかります。コンテナの下層 (ミラー) 上層では、コンテナに加えた変更が上層に反映され、結合された層が整理されてコンテナに表示されます。

コマンドラインを使用してコンテナファイルシステムの変更を確認できます

docker diff 9a118484ba
ログイン後にコピー

コンテナを操作していないため、現時点ではコンテナとイメージに違いはありません

別のコンテナを起動し、300 秒間スリープさせてから、コンテナに移動してファイル情報を変更します。

# docker exec -it ca91bb /bin/sh

/ # echo "helloWorld" > /tmp/hello.txt
ログイン後にコピー

コンテナ ファイル システムの変更を確認します。

docker diff ca91bbffb801

C /root
C /root/.ash_history
C /tmp
A /tmp/hello.txt
ログイン後にコピー

ファイル システムに対して何かを行ったことを確認してください。これらの変更は記録されています。

これらのコンテンツは実際には UpperDir のディレクトリにあります。

tree -L 1 diff/

diff/
├── root
└── tmp2 directories, 0 files
ログイン後にコピー

ホストからコンテナのコンテンツを変更します。

    From 上記の実験から、上位層が追加されたコンテンツであり、コンテナ内の変更を反映するために下位層とマージされることがわかります。では、上位層を直接変更してコンテナを操作できるのでしょうか?
  • upper が配置されているディレクトリにディレクトリ デモを追加し、その中のファイルをタッチします

    # tree -L 2 ./
    
    ./
    ├── demo
    │   └── mytest.log
    ├── root
    └── tmp
        └── hello.txt
    ログイン後にコピー

    コンテナから作成したファイルが表示されるかどうかを確認します

    /demo # pwd
    /demo
    /demo # ls
    mytest.log
    ログイン後にコピー

    これが有効になっていることがわかります。そのため、このコンテナを初期化したい場合は、上位層のすべてのコンテンツを直接削除できます。

  • アプリケーション

    ソフトウェア インストール トレースの検索
  • これまでのプロジェクトの過程で、お客様は常に次の情報を提供する必要がありました。エージェント ソフトウェアがどのようなコンテンツを変更するかを顧客に提供するこれより良い方法は見つかりませんでした。この Docker 階層化ファイルのアプリケーションから判断すると、コンテナーにエージェントをデプロイでき、どのディレクトリとどのディレクトリが変更されるかが一目でわかります。ソフトウェアが変更するファイル。

  • コンテナをすばやく復元します。
  • コンテナ ファイル システムをすばやく操作します。
  • 基盤となるファイルを保護します。システムは破壊されていません
  • #ホスト領域の節約
  • # 推奨される学習: 「

    docker ビデオ チュートリアル
  • #」

以上がDocker ファイルの階層化の詳細な分析 (詳細な例)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:csdn.net
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート