ストレージドライバ内の上書き

ストレージドライバ内の上書き

フォローアップこの問題

私の追加読書ドッカーストレージドライバoverlayドライバはハードリンク実装を使用してすべての画像レイヤをサブレイヤにマージするため、inodeの利用率が高いことがわかりました。誰かがこれを説明できますか?私が知っている限り、ハードリンクを作成しても新しいinodeは生成されません。

答え1

OverlayFSは、Dockerレベルで2つのストレージドライバ(という名前の元/以前のバージョンと呼ばれる新しいoverlayバージョン)で使用されるフェデレーションファイルシステムですoverlay2。 OverlayFSには、読み取り専用として公開される低レベルのディレクトリがあります。このディレクトリの上には、読み取りおよび書き込みアクセスを許可する親ディレクトリがあります。各ディレクトリをレイヤと呼びます。サブカタログと親カタログの組み合わせビューは、「マージされた」カタログと呼ばれる単一の単位として表示されます。

最新のoverlay2ストレージドライバは、デフォルトで最大128のレイヤをサポートします。以前のoverlayドライバは一度に2つのレイヤしか処理できません。ほとんどのDockerイメージは複数のレイヤーを使用して構築されるため、これらの制限は重要です。この制限を解決するために、各レイヤーは画像全体をシミュレートする別々のディレクトリとして実装されます。

テストシステムの違いを確認するために、Docker Hubから「ubuntu」イメージを取得し、ドライバを使用してディレクトリoverlay2構造の違いを確認しました。overlay

[root@testvm1 overlay2]$ ls */diff
4864f14e58c1d6d5e7904449882b9369c0c0d5e1347b8d6faa7f40dafcc9d231/diff:
run

4abcfa714b4de6a7f1dd092070b1e109e8650a7a9f9900b6d4c3a7ca441b8780/diff:
var

a58c4e78232ff36b2903ecaab2ec288a092e6fc55a694e5e2d7822bf98d2c214/diff:
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

c3f1a237c46ed330a2fd05ab2a0b6dcc17ad08686bd8dc49ecfada8d85b93a00/diff:
etc  sbin  usr  var


[root@testvm1 overlay]# ls */root/
001311c618ad7b94d4dc9586f26e421906e7ebf5c28996463a355abcdcd501bf/root/:
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

048f81f400f7d74f969c4fdaff6553c782d12c04890ad869d75313505c868fbc/root/:
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

8060f0c647f24050e1a4bff71096ffdf9665bff26e6187add87ecb8a18532af9/root/:
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

fbdef944657234468ee55b12c7910aa495d13936417f9eb905cdc39a40fb5361/root/:
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

overlay表現では、各レイヤーは完全なイメージをシミュレートし、各レイヤーにはoverlay2レイヤー間の正確な違いのみが含まれます。overlayドライバのアプローチでは、ハードリンクを使用して異なるレイヤ間のスペースを節約します。しかし、この方法はまだ完璧ではありません。画像データにシンボリックリンク、文字デバイスなどの特殊ファイルが含まれている場合は、新しいinodeが必要です。これにより、多数のインデックスノードをすばやく追加できます。

私のテストシステムでは、inodeoverlay2overlayドライバ間の分布は次のとおりです。

[root@testvm1 overlay2]$ du --inodes -s *
8       4864f14e58c1d6d5e7904449882b9369c0c0d5e1347b8d6faa7f40dafcc9d231
27      4abcfa714b4de6a7f1dd092070b1e109e8650a7a9f9900b6d4c3a7ca441b8780
3311    a58c4e78232ff36b2903ecaab2ec288a092e6fc55a694e5e2d7822bf98d2c214
1       backingFsBlockDev
25      c3f1a237c46ed330a2fd05ab2a0b6dcc17ad08686bd8dc49ecfada8d85b93a00
5       l

[root@testvm1 overlay]# du --inodes -s *
3298    001311c618ad7b94d4dc9586f26e421906e7ebf5c28996463a355abcdcd501bf
783     048f81f400f7d74f969c4fdaff6553c782d12c04890ad869d75313505c868fbc
768     8060f0c647f24050e1a4bff71096ffdf9665bff26e6187add87ecb8a18532af9
765     fbdef944657234468ee55b12c7910aa495d13936417f9eb905cdc39a40fb5361

私のシステムの総inode数がoverlay23378個に達しました。を使用すると、overlayこの数は5615に増加します。この値は実行中のコンテナーがない単一のイメージを考慮しているため、多数のDockerコンテナーとイメージを持つ大規模システムは、サポートされている/var/lib/docker/overlayファイルシステム(XFSまたはEXT4、ディレクトリ)があるポイントにすばやく到達できます。

したがって、overlay2現在のほとんどの新規インストールでは、最新のストレージドライバを選択することをお勧めします。このoverlayドライバはDocker v18.09以降廃止予定であり、今後のリリースで削除される予定です。

関連情報