overlay2

2025. 12. 30. 21:04Docker

overlay2는 “레이어는 diff만 저장된다”는 개념이 실제로 어떻게 구현되는지를 보여주는 핵심 파일시스템 드라이버입니다.

ImageImageImage

 

🧠 overlay2 한 문장 정의

 

overlay2는 Linux OverlayFS를 사용해
여러 개의 읽기 전용 레이어(diff)를 하나의 파일시스템처럼 합쳐 보여주고,
쓰기 작업은 맨 위의 전용 레이어에만 기록하는 방식
입니다.

 

 

1️⃣ overlay2가 필요한 이유 (문제부터)

도커 이미지는 이렇게 생겼습니다.

Layer A (base)
Layer B (apt install)
Layer C (copy app)

하지만 Linux 커널은 원래

  • 파일시스템을 하나만 마운트해서 사용합니다.

❓ 그럼 질문:

 

“여러 레이어를 어떻게 하나처럼 보이게 하지?”

 

👉 그 해답이 OverlayFS,
👉 도커 구현체가 overlay2입니다.

 

2️⃣ overlay2의 기본 구성 요소 (아주 중요)

overlay2는 항상 이 3가지를 씁니다.

구성 요소 의미
lowerdir 읽기 전용 레이어들 (이미지 레이어)
upperdir 쓰기 레이어 (컨테이너 전용)
merged 최종적으로 보이는 가짜(?) 파일시스템

 

 

⚠️ merged는 실제 저장소가 아니라
lower + upper를 합쳐서 보여주는 뷰(view) 입니다.

 

3️⃣ 실제 디렉터리 구조 (진짜 중요)

/var/lib/docker/overlay2/
 ├── l/
 │   ├── ABC123 -> ../xyz/diff
 │   ├── DEF456 -> ../uvw/diff
 │
 ├── xyz/
 │   ├── diff/      ← lower layer 실제 파일
 │   ├── link
 │
 ├── container-id/
 │   ├── diff/      ← upperdir (쓰기 레이어)
 │   ├── merged/    ← 우리가 보는 파일시스템
 │   ├── work/

핵심만 정리하면

  • diff/ : 실제 파일 저장
  • merged/ : 컨테이너 안에서 보이는 경로
  • work/ : OverlayFS 내부 작업용 (신경 안 써도 됨)

4️⃣ 파일을 “읽을 때” overlay2는 어떻게 동작하나?

컨테이너에서:

cat /etc/os-release

overlay2의 동작 순서:

  1. upperdir(diff) 에 파일 있나?
  2. 없으면 lowerdir 들을 위에서부터 차례대로 탐색
  3. 가장 위 레이어의 파일을 사용

📌 즉,

 

“위에 있으면 위 걸 쓰고, 없으면 아래서 가져온다”

 

 

5️⃣ 파일을 “수정”하면 무슨 일이 벌어질까? (Copy-on-Write)

상황

  • /etc/nginx/nginx.conf
  • 이 파일은 이미지 레이어(lowerdir) 에 있음

컨테이너에서:

vi /etc/nginx/nginx.conf

overlay2의 실제 동작

  1. lowerdir 파일은 읽기 전용
  2. 수정 시도 감지
  3. 파일을 upperdir(diff) 로 복사
  4. 복사본을 수정
  5. 이후부터는 upperdir 파일만 사용

📌 이것이 Copy-on-Write (COW) 입니다.

 

❗ 이미지 레이어는 절대 변경되지 않습니다.

 

 

6️⃣ “삭제”는 어떻게 표현될까? (화이트아웃, 핵심)

rm /etc/nginx/nginx.conf

실제로 벌어지는 일

  • lowerdir의 파일 ❌ 삭제 안 됨
  • upperdir에 whiteout 파일 생성
.upperdir/
 ├── .wh.nginx.conf

이 의미는:

 

“이 파일은 아래 레이어에 있더라도
merged 뷰에서는 없는 것처럼 처리해라

 

📌 그래서:

  • 용량은 줄지 않고
  • 파일만 안 보이게 되는 겁니다.

 

7️⃣ 그래서 “레이어는 diff만 저장한다”는 말의 정확한 뜻

overlay2 관점에서 보면:

행위 upperdir에 기록되는 것
파일 생성 새 파일
파일 수정 수정된 전체 파일
파일 삭제 whiteout 파일

 

📌 절대 기록하지 않는 것

  • 파일시스템 전체
  • 안 바뀐 파일들

👉 이것이 diff입니다.

 

8️⃣ 왜 overlay2는 빠르고 효율적인가?

① 레이어 공유

  • lowerdir는 여러 컨테이너가 공유
  • 디스크 절약 극대화

② 캐시 친화적

  • 레이어가 불변(immutable)
  • 빌드 캐시 정확

③ 커널 네이티브

  • FUSE ❌
  • Linux VFS 레벨에서 처리 → 빠름

9️⃣ overlay2의 한계 (현실적인 단점)

항목 설명
대량 쓰기 upperdir 성능이 한계
DB 사용 권장 ❌ (volume 권장)
inode 증가 레이어 많으면 관리 부담

👉 그래서 DB, 로그, 상태 데이터는 volume 사용이 원칙입니다.

 

🔟 한 문장으로 다시 정리

overlay2는
“읽기는 아래에서, 쓰기는 위에서,
삭제는 표시만”
하는 방식으로
레이어 기반 이미지를 현실 파일시스템으로 만든 구현체입니다.

'Docker' 카테고리의 다른 글

Union File System & Overlay File System  (0) 2025.12.31
Spring Boot 앱의 JAR 파일 구조  (0) 2025.12.30
도커 이미지 레이어는 diff만 저장한다.  (0) 2025.12.30
Docker Layer  (0) 2025.12.30
COPY --from=build  (0) 2025.12.30