maeng0830
뇌 채우기 운동
maeng0830
전체 방문자
오늘
어제
  • maeng0830-note (91)
    • 자바 (3)
    • 스프링 (39)
      • Core (21)
      • DB (16)
      • Security (2)
      • Test (0)
    • 자료구조 & 알고리즘 (19)
      • 자료구조 (12)
      • 알고리즘 (7)
    • 다른 개발 도구들 (10)
      • Git&Github (1)
      • Redis (3)
      • Docker (6)
    • 프로젝트 (9)
      • Album (9)
    • CS (10)
      • 운영체제 (5)
      • 데이터베이스 (5)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • JPA
  • JPQL
  • 자료구조
  • spring security
  • 트랜잭션
  • docker

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
maeng0830

뇌 채우기 운동

다른 개발 도구들/Docker

도커 볼륨 & 바인드 마운트(Docker Volume & Bind Mount)

2025. 12. 21. 18:34

도커 컨테이너는 기본적으로 휘발성 구조를 가진다. 즉, 컨테이너가 삭제되면 내부 데이터도 함께 사라진다.

하지만 컨테이너 실행 후 생성되는 데이터 중 영속성을 유지해야하는 데이터가 존재할 수도 있다.

이러한 데이터를 영속적으로 저장하기 위해 도커는 볼륨과 바인드 마운트라는 기능을 제공한다.

 

두 방식 모두 데이터를 호스트 머신에 저장한다.

하지만 관리 주체, 경로 지정 방식, 운영 목적에서 차이를 보인다.

도커 볼륨(Docker Volume)

도커 볼륨은 컨테이너 데이터를 안전하게 보관하기 위한 컨테이너 외부의 저장 공간이다.

볼륨에 컨테이너 데이터가 실제로 저장되는 원리

도커 볼륨은 도커 엔진이 직접 관리하며, 호스트 머신의 다음 경로에 저장된다.

/var/lib/docker/volumes/<볼륨명>/_data/

컨테이너 내부의 특정 디렉토리를 이 볼륨에 마운트하면, 컨테이너 내부의 특정 디렉토리에 데이터가 저장되는 것 처럼 보이지만, 실제로는 도커 볼륨 디렉토리에 데이터가 저장된다.

볼륨과 컨테이너의 관계

볼륨을 이해할 때 중요한 포인트는 볼륨이 특정 컨테이너에 종속되지 않는다는 것이다.

  • 컨테이너를 삭제해도 볼륨은 삭제되지 않는다.
  • 컨테이너를 다시 만들어도 기존 볼륨에 다시 연결할 수 있다.
  • 여러 컨테이너를 하나의 볼륨에 연결할 수 있다.

컨테이너는 볼륨을 사용만 할 뿐이며, 볼륨의 생명주기에 전혀 영향을 미치지 않는다.

예시 명령어

# 볼륨 생성
docker volume create myvol

# 컨테이너 실행 시 볼륨 마운트
docker run -v myvol:/app/data myimage

# 볼륨 상세 정보 확인
docker volume inspect myvol

# 볼륨 내부 데이터 확인
docker run --rm -v myvol:/data alpine ls /data

바인드 마운트(Bind Mount)

바인트 마운트는 호스트 머신에 이미 존재하는 실제 디렉토리를 컨테이너 내부 디렉토리에 연결하는 방식이다.

/home/user/data  →  /app/data

예시 명령어

# 호스트의 /home/user/data 디렉토리를 컨테이너의 /app/data 와 연결
docker run -v /home/user/data:/app/data myimage

# 변경 내용 확인
echo "test" > /home/user/data/sample.txt
docker exec -it <container> cat /app/data/sample.txt

볼륨과 바인드 마운트의 차이

도커 볼륨은 도커 엔진이 관리하는 컨테이너 외부의 데이터 저장소이다.

바인드 마운트는 호스트 머신의 디렉토리를 컨테이너에 그대로 연결하는 방식이다.

 

즉, 도커 볼륨을 사용할 경우 컨테이너는 호스트 머신으로부터 독립적이지만, 바인드 마운트를 사용할 경우 호스트 머신에 종속된다.

 

한 가지 집고 넘어갈 점은 도커 볼륨을 사용할 경우, 컨테이너가 호스트 머신으로부터 독립적이라는 것은 물리적 종속이 아닌 논리적/운영적 종속 관점에서 그런 것이다.

물리적 종속(Physical Dependency)

물리적 종속은 데이터 또는 디렉토리가 어떤 물리적 디스크에 저장되는 가를 기준으로 종속 여부를 판단한다.

물리적 종속을 기준으로 보면 볼륨을 사용할 때도, 바인드 마운트를 사용할 때도 컨테이너는 호스트 머신에 종속된다.

논리적/운영적 종속(Logical/Operational Dependency)

논리적 종속은 컨테이너의 실행, 배포/운영, 경로/권한/보안의 책임 측면에서 종속 여부를 판단한다.

논리적 종속을 기준으로 보면 컨테이너는 볼륨을 사용할 경우 호스트 머신으로부터 독립적이고, 바인드 마운트를 사용할 경우 호스트 머신에게 종속적이다.

 

바인드 마운트가 호스트 머신에 종속적인 이유는 호스트 머신의 특정 디렉토리를 직접 마운트하기 때문이다.

아래와 같은 이유로 컨테이너는 호스트의 디렉토리에 종속된다.

  • 컨테이너가 실행되려면 호스트 머신에 해당 디렉토리가 실제로 존재해야한다.
  • 호스트 머신의 디렉토리에 대한 권한, 소유자 등을 고려해야한다.
  • 호스트 머신의 디렉토리 구조가 변경될 경우 컨테이너 실행에 영향을 미친다.
  • 배포 설정 파일에 호스트 머신의 디렉토리가 그대로 작성된다.

 

도커 볼륨이 호스트 머신에 독립적인 이유는 호스트 머신의 디렉토리가 아닌, 볼륨 이름을 마운트하기 때문이다.

아래와 같은 이유들로 인해 볼륨은 호스트 머신의 디스크에 데이터를 저장하기는 하지만, 컨테이너는 호스트의 디렉토리 구조를 전제하지 않아도 된다.

  • 배포 설정 파일에 호스트 머신의 디렉토리가 작성되지 않는다.
  • 실제 마운트 경로는 도커의 구현 디테일로 숨겨져 있으며, 볼륨 이름을 통해 마운트를 하면 된다.
  • 도커 엔진을 통해 볼륨, 디렉토리를 관리할 수 있다.
    '다른 개발 도구들/Docker' 카테고리의 다른 글
    • 도커 네트워크(Docker Network)
    • 도커 이미지 빌드(Docker Image Build)
    • 도커 이미지 레지스트리(Docker Image Registry)
    • 도커 이미지(Docker Image)와 도커 컨테이너(Docker Container)
    maeng0830
    maeng0830

    티스토리툴바