ホームページ  >  記事  >  運用・保守  >  Docker ファイルの階層化の詳細な分析 (詳細な例)

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

WBOY
WBOY転載
2022-01-28 17:09:333714ブラウズ

この記事では、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 までご連絡ください。