Docker 파일시스템과 Copy-on-Write (CoW)의 힘
Source: Dev.to

컨테이너 파일시스템 구조
실행 중인 컨테이너의 파일시스템은 두 가지 주요 부분으로 구성되며, union 파일시스템(예: Overlay2)을 사용해 서로 겹쳐집니다.
읽기 전용 이미지 레이어 (베이스)
- 운영체제 베이스, 애플리케이션 바이너리 및 의존성을 포함합니다.
- 동일한 이미지를 기반으로 만든 여러 컨테이너가 이 불변 레이어를 공유합니다.
읽기‑쓰기 컨테이너 레이어 (상단)
- 실행 중인 컨테이너에만 존재하는 얇은 최상위 레이어입니다.
- 컨테이너가 실행되는 동안 생성·삭제·수정되는 모든 데이터는 이 레이어에만 기록되며, 임시(ephemeral)합니다.
Copy‑on‑Write (CoW) 원리
컨테이너가 읽기 전용 레이어에 존재하는 파일을 수정하려고 할 때, Docker는 공유된 베이스 레이어를 절대 변경하지 않습니다. 대신 CoW 과정을 따릅니다:
| 동작 | CoW 원리 효과 |
|---|---|
| 파일 읽기 | 컨테이너는 공유된 읽기‑전용 레이어에서 파일을 직접 읽으며(빠름). |
| 파일 수정 또는 삭제 | Docker는 원본 읽기‑전용 레이어에 있는 파일을 상단 읽기‑쓰기 레이어로 복사한 뒤 복사본을 수정합니다. 원본은 다른 컨테이너를 위해 그대로 유지됩니다. |
CoW가 필수적인 이유
- 디스크 효율성 – 베이스 레이어가 공유되어 OS 파일 및 라이브러리의 중복 저장을 방지합니다.
- 속도와 불변성 – 읽기는 즉시 이루어지고, 원본 이미지는 불변성을 유지해 모든 컨테이너가 깨끗한 상태에서 시작됩니다.
- 빠른 부팅 시간 – 시작 시 전체 이미지 파일시스템을 복사하지 않고 얇은 쓰기 가능한 레이어만 생성합니다.
임시 데이터 이해하기
상단 쓰기 가능한 레이어에 기록된 변경 사항은 임시이며, 컨테이너가 존재하는 동안에만 유지됩니다. 컨테이너를 삭제하면 이 레이어가 사라집니다:
docker rm
쓰기 가능한 레이어와 그 안의 모든 데이터가 영원히 사라집니다.
컨테이너는 무상태(stateless)이며 폐기 가능한 설계이기 때문에, 재시작이나 삭제 후에도 유지되어야 하는 데이터(예: 데이터베이스 내용, 로그)는 Docker 볼륨에 저장해야 합니다.
다음 주제는?
우리는 이론적 기반을 다루었습니다: 왜(포스트 1), 무엇(이미지와 컨테이너), 어떻게(아키텍처와 런타임), 그리고 효율성(파일시스템과 CoW). 앞으로 Docker 볼륨을 이용한 데이터 영속성에 대한 전용 포스트를 기대해 주세요.