Oh My Algorithm
Concept Guide영속성 · 마운트

볼륨과 데이터 (Volumes)

컨테이너의 쓰기 레이어는 컨테이너와 수명을 같이 합니다. 그래서 컨테이너를 지우면 그 안에 쌓인 데이터도 함께 사라집니다. 볼륨은 호스트 쪽 저장소를 컨테이너 경로에 얹어 데이터를 컨테이너 바깥에 두는 장치이고, 덕분에 컨테이너를 갈아치워도 데이터베이스 파일은 그대로 남습니다.

01볼륨과 데이터 (Volumes)

볼륨 없이 · 쓰기 레이어에 쌓기

볼륨 없이 데이터베이스를 띄우면, 쌓이는 데이터는 전부 컨테이너의 쓰기 레이어로 들어갑니다.

테이블을 만들고 행을 넣는 동안 파일은 계속 쓰기 레이어에 쌓입니다. 컨테이너가 살아 있는 동안은 아무 문제가 없습니다.

그런데 쓰기 레이어의 수명은 컨테이너의 수명입니다. 호스트에는 아무것도 남지 않습니다.

docker rm 하는 순간 쓰기 레이어가 함께 삭제됩니다. 이미지 버전을 올리려고 컨테이너를 갈아치우기만 해도 데이터가 통째로 사라집니다.

Hostdb:1Writable layerdata.db
1 / 4

볼륨 마운트 · 컨테이너 바깥에 두기

볼륨은 호스트 쪽 저장소를 컨테이너 안의 경로에 얹습니다. 데이터가 사는 곳이 컨테이너 바깥으로 옮겨집니다.

그 경로에 대한 읽기·쓰기는 쓰기 레이어를 건너뛰고 곧장 호스트 저장소로 갑니다.

named volume 은 Docker 가 위치를 관리합니다. 경로를 신경 쓸 필요가 없어 이식성이 좋고 운영에 주로 씁니다.

bind mount 는 호스트 경로를 직접 지정합니다. 개발 중 소스 폴더를 얹어 두면 코드를 고치자마자 컨테이너에 반영됩니다.

이제 컨테이너를 rm 해도 볼륨은 그대로 남습니다. 새 버전 이미지로 컨테이너만 갈아 끼우면 데이터는 이어집니다.

Hostdb:1db-datadata.db/var/lib/db
1 / 5

정리

컨테이너는 언제든 버릴 수 있는 것으로 두고, 지켜야 할 상태는 볼륨으로 뺍니다. 볼륨은 명시적으로 지우기 전까지 사라지지 않습니다.

02 쉽게 이해하기

For Everyone
🔑핵심 동작

컨테이너가 쓴 파일은 쓰기 레이어에 쌓이고 그 수명은 컨테이너까지입니다. 볼륨은 데이터를 호스트 저장소에 두고 경로만 얹으므로 컨테이너를 지워도 남습니다.

💡쉽게 말하면

쓰기 레이어에 저장한 것은 컨테이너를 rm 하는 순간 사라집니다.

볼륨을 마운트하면 그 경로에 대한 읽기·쓰기가 컨테이너 레이어를 건너뛰고 호스트 저장소로 직접 갑니다.

Docker 가 관리하는 named volume 은 이식성이 좋고, 호스트 경로를 직접 지정하는 bind mount 는 개발 중 소스 코드를 실시간 반영할 때 편합니다.

📍어디에 쓰나
  • 데이터베이스 데이터 보존
  • 컨테이너 교체·업그레이드 시 상태 유지
  • 개발 중 소스 실시간 반영(bind mount)
  • 컨테이너 간 데이터 공유

03 자주 묻는 질문

FAQ
볼륨과 데이터 (Volumes)란 무엇인가요?+

컨테이너의 쓰기 레이어는 컨테이너와 수명을 같이 합니다. 그래서 컨테이너를 지우면 그 안에 쌓인 데이터도 함께 사라집니다. 볼륨은 호스트 쪽 저장소를 컨테이너 경로에 얹어 데이터를 컨테이너 바깥에 두는 장치이고, 덕분에 컨테이너를 갈아치워도 데이터베이스 파일은 그대로 남습니다.

볼륨과 데이터 (Volumes)은(는) 어디에 사용하나요?+

데이터베이스 데이터 보존, 컨테이너 교체·업그레이드 시 상태 유지, 개발 중 소스 실시간 반영(bind mount), 컨테이너 간 데이터 공유

볼륨과 데이터 (Volumes)를 쉽게 비유하면?+

컨테이너가 쓴 파일은 쓰기 레이어에 쌓이고 그 수명은 컨테이너까지입니다. 볼륨은 데이터를 호스트 저장소에 두고 경로만 얹으므로 컨테이너를 지워도 남습니다.