후속 조치이 문제.
나의 추가 독서도커 스토리지 드라이버overlay
드라이버는 하드 링크 구현을 사용하여 모든 이미지 레이어를 하위 레이어에 병합하므로 inode 활용도가 높은 것으로 나타났습니다 . 누군가 이것을 설명할 수 있나요? 내가 아는 한, 하드 링크를 생성해도 새 inode가 생성되지는 않습니다.
답변1
OverlayFS는 Docker 수준에서 두 개의 스토리지 드라이버( 이라는 원본/이전 버전 overlay
및 이라는 새 버전) 에서 사용되는 페더레이션된 파일 시스템입니다 overlay2
. OverlayFS에는 읽기 전용으로 노출되는 하위 수준 디렉터리가 있습니다. 이 디렉터리 위에는 읽기 및 쓰기 액세스를 허용하는 상위 디렉터리가 있습니다. 각 디렉터리를 레이어라고 합니다. 하위 카탈로그와 상위 카탈로그의 결합된 보기는 "병합된" 카탈로그라고 하는 단일 단위로 나타납니다.
최신 overlay2
스토리지 드라이버는 기본적으로 이러한 계층을 최대 128개까지 지원합니다. 이전 overlay
드라이버는 한 번에 두 개의 레이어만 처리할 수 있습니다. 대부분의 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가 필요합니다. 이렇게 하면 많은 수의 인덱스 노드를 빠르게 추가할 수 있습니다.
내 테스트 시스템에서 inode overlay2
와 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부터 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다.