능글맞은 구렁이

Docker - Volumes이란? 본문

DevOps/Docker

Docker - Volumes이란?

보라색츄르 2026. 1. 18. 21:37

1. 볼륨을 사용하는 이유는?

결론을 먼저 말하자면 컨테이너는 쉽게 사라지지만, 데이터는 살아남아야 하기 때문에 사용한다.

 

도커 컨테이너는 기본적으로 일회용에 가깝다. 

(컨테이너 삭제 시 내부 파일 삭제됨, 이미지 빌드 시 기존 데이터 날아감, 컨테이너 교체 시 데이터 날아감)

따라서, DB데이터, 업로드 파일 등이 컨테이너 안에 있으면 데이터가 날아가는 대참사가 일어난다.

그러므로, 컨테이너 밖에 데이터를 두는 방법이 필요하다.

 

정리하면, 도커 볼륨은 컨테이너 수명과 무관하게 데이터를 안전하게 유지하고,

운영 환경에서 예측 가능하게 관리하기 위해 사용한다.


2. 도커 볼륨이란?

도커 볼륨(Volume)이란
컨테이너 내부의 특정 경로를 호스트 머신의 실제 파일 시스템에 복사 없이 연결(mount) 하는 방식이다.

이 연결은 단순한 파일 복사가 아니라
같은 데이터 경로를 공유하는 구조이기 때문에,

  • 컨테이너가 삭제되어도 데이터는 유지되고
  • 여러 컨테이너가 하나의 데이터를 동시에 사용할 수 있다.

즉, 컨테이너는 데이터의 “소유자”가 아니라
외부 데이터를 바라보는 실행 환경에 가깝다.


3. 볼륨의 실체는 어디에 있을까?

호스트 머신의 폴더

볼륨의 실체는 항상 호스트 머신의 파일 시스템에 존재한다.

  • 컨테이너 자체는 디스크를 직접 가지지 않는다
  • 컨테이너 내부에 있는 것처럼 보이는 디렉토리는 실제로는 호스트 머신의 폴더를 가리키고 있다

컨테이너 입장에서는 단순한 디렉토리이지만, 실제 데이터는 컨테이너 바깥에 존재한다.


4. 도커가 인식하는 호스트 머신의 폴더

도커에서 호스트 폴더를 연결하는 방식은 크게 두 가지다.

 

1. Volume

  • 도커가 직접 관리하는 호스트 머신의 폴더
  • 실제 경로는 도커 내부에서 관리됨
  • 사용자는 위치를 몰라도 사용 가능
  • 이식성과 안정성이 높음
  • 익명의 볼륨은 재사용하기가 불편하고 docker run을 실행할 때 마다 익명의 볼륨이 계속생성이 되기 때문에 디스크 낭비가 심하다. 따라서, 실무에서는 거의 명명 볼륨을 사용한다.
  • 익명볼륨, 명명볼륨
    • 익명 볼륨(Anonymous Volume)
      • 특징 
        • 사용자가 이름을 정하지 않고 Docker가 랜덤 이름을 자동 생성 함
        • 컨테이너에 종속됨 따라서, 컨테이너가 제거되면 같이 제거됨
        • 재사용하기 불편 
        • 관리가 어려움
        • 다른 컨테이너와 공유하기 어려움
      • 언제 쓸까?
        • 특정 폴더가 바인드 마운트에 의해 덮어쓰이지 않도록 보호할 때
        • Dockerfile의 VOLUME 명령어와 함께 사용
        • 임시 데이터 처리
        • 컨테이너 write layer 부담 감소 -> 약간의 성능 
        • 핵심! 데이터 공유용이 아니라, 특정 경로를 보호하거나 격리하는 용도
    • 명명 볼륨(Named Volume)
      • 특징 
        • 사용자가 직접 이름 지정
        • 컨테이너가 삭제되도 살아 있으며 재사용 가능
        • 여러 컨테이너에서 공유 가능
        • 특정 컨테이너에 종속되지 않음 
        • 관리하기 쉬움
      • 언제 쓸까?
        • 컨테이너 제거 이후에도 데이터를 유지해야 할 때
        • 여러 컨테이너 간 데이터 공유할 때
        • DB 데이터 저장
        • 핵심! 지속성 + 컨테이너 간 데이터 공유

 

2.  Bind Mount

  • 특징
    • 사용자가 직접 지정한 호스트 머신의 폴더 따라서, 이름이 아니라 호스트의 실제 경로
    • 개발 환경에서 소스 코드 공유 등에 자주 사용
    • 호스트 OS 구조에 의존적
    • 여러 컨테이너에서 사용 가능 
    • 컨테이너를 삭제해도 데이터 유지
    • 도커 명령으로 삭제 불가
  • 언제 쓸까?
    • 개발 중 소스코드 실시간 반영
    • 호스트 파일 직접 접근 필요할 때
    • 핵심! 호스트와 컨테이너를 직접 연결
구분 익명 볼륨 명명된 볼륨 바인드 마운트
이름 존재 X O X(경로 사용)
컨테이너 삭제 시 같이 삭제 유지 유지
여러 컨테이너 공유 거의 안함 가능 가능
삭제 방법 컨테이너 삭제 docker volume rm 호스트에서 직접 삭제
주 사용 목적 경로 보호 데이터 지속성 개발/ 직접 접근

 

 


5. 복사가 아니라 “연결 / 경로 공유”

도커 볼륨의 가장 중요한 특징은 데이터를 복사하지 않는다는 점이다.

  • 컨테이너에서 파일을 수정하면
  • 즉시 호스트 머신에도 반영되고
  • 반대로 호스트에서 변경해도 컨테이너에서 그대로 보인다

즉, 두 공간이 서로 다른 파일을 갖는 것이 아니라 하나의 파일 시스템 경로를 함께 바라보고 있는 구조다.


6. 볼륨을 통한 데이터 보관의 의미

이 구조 때문에 다음과 같은 특징이 생긴다.

  • 컨테이너 삭제 → 데이터는 유지
  • 컨테이너 재생성 → 기존 데이터 그대로 사용
  • 여러 컨테이너 → 동일 데이터 공유 가능

그래서 도커 볼륨은 DB 데이터, 로그, 업로드 파일 등 컨테이너 생명주기와 분리되어야 하는 데이터를 다루는 핵심 메커니즘이다.

 

Comments