Docker VFS(storage driver)
한 문장 요약
OverlayFS 같은 UnionFS/Copy-on-Write(CoW)를 쓰지 않고, 레이어를 "그냥 디렉터리로 풀어놓고(복사/하드링크)" 컨테이너 writable layer를 별도 디렉터리로 관리하는 가장 단순한 드라이버
vfs 드라이버 역할
Docker의 storage driver는
- 이미지 레이어(읽기 전용 레이어들)
- 컨테이너 레이어(쓰기 가능한 레이어)
를 합쳐서 컨테이너에서 하나의 파일시스템처럼 보이게 만드는 역할
----------------
overlay2는 커널 OverlayFS로 Union + Cow
반면 vfs는 Union/Cow를 아예 안함
동작 방식(핵심 메커니즘)
vfs는 파일 변경 시 "copy-up" 같은 커널 기능이 없어, 아래와 같이 동작
- 이미지 레이어 : 각각 "일반 디렉터리"
- 컨테이너 생성 시 : 이미지 루트 파일시스템을 컨테이너 디렉터리로 통째로 복사 - (특징)
- 컨테이너에서 파일을 수정하면 : 그냥 "컨테이너 디렉터리에서 직접 수정"
=>
즉, "레이어를 겹쳐 보이게" 만드는 게 아니라, 컨테이너 시작 시점에 실제 파일 트리를 하나 만들어 놓고 그걸 그냥 가져다가 쓰는 개념
단점
성능/용량 문제
- 컨테이너 만들 때마다 이미지 파일 트리를 대량 복사 -> 생성/시작이 느림
- 이미지 레이어 공유(CoW)가 안 되니 컨테이너가 늘수록 중복 파일이 폭증
- 작은 변경도 "상위 레이어만 추가"가 아니라, 이미 컨테이너 루트에 파일이 있으니
전체 footprint가 커짐