Union File System & Overlay File System
2025. 12. 31. 11:35ㆍDocker
유니온 파일 시스템(Union File System)은 “개념/원리”이고, overlay2는 그 원리를 리눅스에서 실제로 구현한 “구현체(드라이버)”입니다.
1️⃣ 유니온 파일 시스템(Union File System)이란? (개념)


유니온 파일 시스템은 여러 개의 레이어를
마치 하나의 파일 시스템처럼 겹쳐서 보여주는 기술적 개념입니다.
핵심 아이디어
- 여러 레이어를 위에서 아래로 쌓음
- 위 레이어가 아래 레이어를 덮어씀(override)
- 읽기 시: 위 → 아래 순서로 탐색
- 쓰기 시: 특정 레이어에만 기록
예시 (개념적)
Layer 3 (컨테이너 writable layer)
Layer 2 (app image)
Layer 1 (base image: ubuntu)
-----------------------------
→ 하나의 파일 시스템처럼 보임
👉 이 “레이어 합치기” 개념 자체가 유니온 파일 시스템입니다.
2️⃣ overlay / overlay2란? (리눅스 구현체)



OverlayFS
- 리눅스 커널에 포함된 유니온 파일 시스템 구현
- 실제 커널 모듈 이름:
overlay
overlay2
- Docker가 OverlayFS를 기반으로 만든 스토리지 드라이버
- Docker에서 현재 디폴트값 (사실상 표준)
즉,
| 구분 | 의미 |
|---|---|
| 유니온 파일 시스템 | 개념 (이론) |
| OverlayFS | 리눅스 커널 구현 |
| overlay2 | Docker용 구현 + 최적화 |
3️⃣ overlay2의 실제 구조 (중요)
overlay2는 딱 4가지 구성 요소로 동작합니다.
lowerdir : 읽기 전용 이미지 레이어들 (여러 개)
upperdir : 컨테이너의 쓰기 레이어 (하나)
workdir : 커널 내부 작업용
merged : 최종적으로 보이는 파일 시스템
구조 예시
/var/lib/docker/overlay2/
├─ lowerdir (ubuntu, openjdk, app layer 등)
├─ upperdir (컨테이너 변경 사항)
├─ workdir
└─ merged ← 컨테이너 내부에서 보이는 /
컨테이너 안에서 /etc/passwd를 보면
→ 사실은 merged 디렉터리를 보고 있는 것입니다.
4️⃣ 읽기/쓰기 동작 방식 (핵심 메커니즘)
📖 파일 읽기
- upperdir에 있으면 → 그 파일 사용
- 없으면 → lowerdir들을 순서대로 탐색
✍️ 파일 쓰기 (Copy-on-Write)
- lowerdir 파일을 직접 수정 ❌
- 대신:
- lowerdir 파일을 upperdir로 복사
- upperdir에서 수정
(lowerdir) /etc/nginx/nginx.conf
↓ (copy-up)
(upperdir) /etc/nginx/nginx.conf (수정됨)
👉 이게 컨테이너가 가벼운 이유입니다.
5️⃣ Docker 이미지 레이어와의 연결




Dockerfile의 각 명령은 하나의 레이어가 됩니다.
FROM ubuntu:22.04 # layer 1
RUN apt install -y openjdk # layer 2
COPY app.jar /app.jar # layer 3
- 이 레이어들 → overlay2의 lowerdir
- 컨테이너 실행 시 생성되는 변경 사항 → upperdir
6️⃣ 왜 overlay2가 컨테이너에 최적인가?
✅ 장점
- 빠름 (커널 네이티브)
- 레이어 공유 가능 (이미지 캐시 효율 ↑)
- 디스크 사용량 최소화
- 단순한 구조
❌ 한계
- 파일 수가 많으면 copy-up 비용 증가
- inode 변경이 잦은 워크로드(DB 등)에 불리
- 그래서 DB는 volume 권장
7️⃣ 관계 정리
유니온 파일 시스템
↓ (개념)
OverlayFS
↓ (리눅스 커널 구현)
overlay2
↓ (Docker 스토리지 드라이버)
컨테이너 이미지 & 레이어
🎯 핵심 한 줄 정리
overlay2는 “유니온 파일 시스템 개념을 리눅스 커널의 OverlayFS로 구현하고, Docker 컨테이너 이미지 레이어 관리에 최적화한 결과물”입니다.
'Docker' 카테고리의 다른 글
| 디폴트 브릿지 vs 사용자 정의 브릿지 (0) | 2025.12.31 |
|---|---|
| Docker Network (0) | 2025.12.31 |
| Spring Boot 앱의 JAR 파일 구조 (0) | 2025.12.30 |
| overlay2 (1) | 2025.12.30 |
| 도커 이미지 레이어는 diff만 저장한다. (0) | 2025.12.30 |