フォローアップこの問題。
私の追加読書ドッカーストレージドライバ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が必要です。これにより、多数のインデックスノードをすばやく追加できます。
私のテストシステムでは、inodeoverlay2
とoverlay
ドライバ間の分布は次のとおりです。
[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数がoverlay2
3378個に達しました。を使用すると、overlay
この数は5615に増加します。この値は実行中のコンテナーがない単一のイメージを考慮しているため、多数のDockerコンテナーとイメージを持つ大規模システムは、サポートされている/var/lib/docker/overlay
ファイルシステム(XFSまたはEXT4、ディレクトリ)があるポイントにすばやく到達できます。
したがって、overlay2
現在のほとんどの新規インストールでは、最新のストレージドライバを選択することをお勧めします。このoverlay
ドライバはDocker v18.09以降廃止予定であり、今後のリリースで削除される予定です。