Docker 파일시스템과 Copy-on-Write (CoW)의 힘

발행: (2025년 12월 8일 오후 12:03 GMT+9)
4 min read
원문: Dev.to

Source: Dev.to

Docker 파일시스템 및 Copy-on-Write (CoW) 기능을 위한 커버 이미지

컨테이너 파일시스템 구조

실행 중인 컨테이너의 파일시스템은 두 가지 주요 부분으로 구성되며, union 파일시스템(예: Overlay2)을 사용해 서로 겹쳐집니다.

읽기 전용 이미지 레이어 (베이스)

  • 운영체제 베이스, 애플리케이션 바이너리 및 의존성을 포함합니다.
  • 동일한 이미지를 기반으로 만든 여러 컨테이너가 이 불변 레이어를 공유합니다.

읽기‑쓰기 컨테이너 레이어 (상단)

  • 실행 중인 컨테이너에만 존재하는 얇은 최상위 레이어입니다.
  • 컨테이너가 실행되는 동안 생성·삭제·수정되는 모든 데이터는 이 레이어에만 기록되며, 임시(ephemeral)합니다.

Copy‑on‑Write (CoW) 원리

컨테이너가 읽기 전용 레이어에 존재하는 파일을 수정하려고 할 때, Docker는 공유된 베이스 레이어를 절대 변경하지 않습니다. 대신 CoW 과정을 따릅니다:

동작CoW 원리 효과
파일 읽기컨테이너는 공유된 읽기‑전용 레이어에서 파일을 직접 읽으며(빠름).
파일 수정 또는 삭제Docker는 원본 읽기‑전용 레이어에 있는 파일을 상단 읽기‑쓰기 레이어로 복사한 뒤 복사본을 수정합니다. 원본은 다른 컨테이너를 위해 그대로 유지됩니다.

CoW가 필수적인 이유

  • 디스크 효율성 – 베이스 레이어가 공유되어 OS 파일 및 라이브러리의 중복 저장을 방지합니다.
  • 속도와 불변성 – 읽기는 즉시 이루어지고, 원본 이미지는 불변성을 유지해 모든 컨테이너가 깨끗한 상태에서 시작됩니다.
  • 빠른 부팅 시간 – 시작 시 전체 이미지 파일시스템을 복사하지 않고 얇은 쓰기 가능한 레이어만 생성합니다.

임시 데이터 이해하기

상단 쓰기 가능한 레이어에 기록된 변경 사항은 임시이며, 컨테이너가 존재하는 동안에만 유지됩니다. 컨테이너를 삭제하면 이 레이어가 사라집니다:

docker rm 

쓰기 가능한 레이어와 그 안의 모든 데이터가 영원히 사라집니다.

컨테이너는 무상태(stateless)이며 폐기 가능한 설계이기 때문에, 재시작이나 삭제 후에도 유지되어야 하는 데이터(예: 데이터베이스 내용, 로그)는 Docker 볼륨에 저장해야 합니다.

다음 주제는?

우리는 이론적 기반을 다루었습니다: 왜(포스트 1), 무엇(이미지와 컨테이너), 어떻게(아키텍처와 런타임), 그리고 효율성(파일시스템과 CoW). 앞으로 Docker 볼륨을 이용한 데이터 영속성에 대한 전용 포스트를 기대해 주세요.

Back to Blog

관련 글

더 보기 »

왜 GitFlow는 인프라에서 실패하는가

TL;DR GitFlow의 장기 운영 피처 또는 환경 브랜치를 Terraform에 적용하면 상태 드리프트와 취약한 파이프라인이 자주 발생합니다. 애플리케이션 코드와 달리 Infra...