본문 바로가기
Docker

바인드 마운트(Bind Mount)와 볼륨(Volumes)

by xogns93 2024. 12. 10.

1. 바인드 마운트 (Bind Mount)

바인드 마운트호스트 시스템의 특정 파일이나 디렉토리컨테이너연결하는 방식입니다. 바인드 마운트를 사용하면 호스트 시스템의 파일 시스템에 의존하게 됩니다.

특징:

  • 호스트 시스템과의 직접적인 연결: 바인드 마운트는 호스트 시스템의 디렉토리나 파일컨테이너에 직접 연결합니다.
  • 호스트 파일 시스템 의존: 바인드 마운트는 호스트의 파일 시스템에 의존하기 때문에, 호스트 시스템에서 변경된 내용이 컨테이너에 실시간으로 반영됩니다.
  • 사용 예:
    • 호스트 시스템의 개발 환경 파일을 컨테이너에서 사용하거나, 컨테이너 내에서 생성된 로그 파일을 호스트에서 직접 관리하려는 경우 유용합니다.
  • 예시:
    docker run -v /host/directory:/container/directory myimage
    위 명령에서 /host/directory는 호스트 시스템의 디렉토리이고, /container/directory는 컨테이너 내에서 바인드 마운트된 위치입니다.

장점:

  • 실시간 파일 시스템 연동: 파일이나 디렉토리가 호스트와 연결되어 있기 때문에, 호스트에서 파일을 수정하면 컨테이너에서도 즉시 반영됩니다.
  • 간단한 설정: 바인드 마운트는 간단히 호스트 시스템의 경로를 지정하는 방식으로 설정됩니다.

단점:

  • 호스트 시스템에 의존적: 바인드 마운트는 호스트 시스템에 의존하므로, 컨테이너의 이동성(portability)에 제한이 있을 수 있습니다.
  • 호스트 시스템 변경 시 영향을 받음: 호스트 시스템에서 변경된 내용이 의도치 않게 컨테이너에 영향을 미칠 수 있습니다.

2. 볼륨 (Volumes)

볼륨은 Docker가 관리하는 독립적인 데이터 저장소입니다. 볼륨은 Docker의 파일 시스템 외부에 저장되어 있으며, 호스트 시스템의 파일 시스템에 의존하지 않습니다.

특징:

  • Docker 관리: 볼륨은 Docker가 관리하며, 호스트 시스템의 파일 시스템에 의존하지 않습니다. 볼륨은 /var/lib/docker/volumes/ 디렉토리에 저장되지만, 직접적으로 호스트의 경로와 연결되지 않습니다.
  • 데이터의 독립성: 컨테이너가 삭제되어도 볼륨에 저장된 데이터는 영구적으로 유지됩니다.
  • 사용 예:
    • 컨테이너 간에 데이터를 공유하거나, 컨테이너가 삭제되고 재생성되더라도 데이터를 보존하고 싶을 때 유용합니다.
  • 예시:
    docker run -v myvolume:/container/directory myimage
    여기서 myvolume은 Docker가 관리하는 볼륨의 이름입니다.

장점:

  • 호스트 시스템 독립성: 볼륨은 호스트 시스템의 파일 시스템과 독립적이므로, 컨테이너의 이동성(portability)에 유리합니다.
  • 데이터 영속성: 컨테이너가 종료되거나 삭제되어도 데이터는 볼륨에 남아 있기 때문에 영구적으로 데이터를 저장할 수 있습니다.
  • 컨테이너 간 데이터 공유: 여러 컨테이너가 동일한 볼륨을 마운트하여 데이터를 공유할 수 있습니다.

단점:

  • 호스트와의 연동 어려움: 바인드 마운트와 달리 호스트 시스템의 파일 시스템과 직접 연결되지 않으므로, 호스트에서 직접 파일을 수정하기 어렵습니다.

바인드 마운트 vs 볼륨

바인드 마운트 볼륨
의존성 호스트 시스템의 파일 시스템에 의존 Docker가 관리하며 호스트 시스템과 독립
장점 호스트와의 직접적인 연동, 실시간 파일 변경 반영 데이터 영속성, 호스트 시스템 독립성, 컨테이너 간 데이터 공유
단점 호스트 시스템에 의존, 이동성 제한 호스트 시스템에서 파일 수정 불가능
사용 사례 개발 환경, 실시간 파일 변경 필요 데이터 영속성, 여러 컨테이너 간 데이터 공유, 호스트 시스템과 독립적인 데이터 관리

결론

  • 바인드 마운트호스트 시스템의 파일 시스템에 의존하며, 실시간 파일 공유가 필요하거나 개발 환경에서 유용합니다.
  • 볼륨독립적인 데이터 저장소로, Docker가 관리하며 데이터 영속성이동성을 제공합니다. 여러 컨테이너 간에 데이터를 공유하거나, 컨테이너가 삭제되더라도 데이터를 유지하려는 경우에 적합합니다.

따라서, 호스트 시스템에 의존하지 않으려면 볼륨을 사용하는 것이 더 적합합니다.

'Docker' 카테고리의 다른 글

Docker Compose 구성요소  (1) 2024.12.15
멀티스테이지 빌드(Multi-Stage Build)  (0) 2024.12.10
도커 인 액션 8장  (2) 2024.12.06
도커 인 액션 7장  (0) 2024.12.06
Dockerfile 명령어  (0) 2024.12.06