기본 패턴
bash
# bind mount
docker run -v "$(pwd)":/app node:22-alpine
# named volume
docker run -v pgdata:/var/lib/postgresql/data postgres:16설명
- bind mount는 호스트의 특정 경로를 컨테이너 안에 직접 연결하는 방식입니다.
- volume은 Docker가 관리하는 별도 저장소를 마운트하는 방식입니다.
- 소스 코드를 바로 공유하며 개발할 때는 bind mount가 편하고, 데이터베이스처럼 컨테이너 수명과 분리된 영속 데이터는 volume이 더 적합합니다.
- bind mount는 호스트 디렉터리 구조에 강하게 묶이므로 환경 이식성이 떨어질 수 있습니다.
- volume은 백업과 재사용, 다중 컨테이너 공유, 호스트 의존성 감소 측면에서 더 안정적입니다.
짧은 예제
text
개발 서버:
- 소스 코드를 바로 반영하고 싶다
- bind mount: ./src -> /app/src
데이터베이스:
- 컨테이너를 지워도 데이터는 남아야 한다
- volume: pgdata -> /var/lib/postgresql/data빠른 정리
| 기준 | bind mount | volume |
|---|---|---|
| 원본 위치 | 호스트 파일 시스템 경로 | Docker가 관리하는 저장소 |
| 개발 편의성 | 높음 | 상대적으로 낮음 |
| 이식성 | 호스트 경로에 의존 | 더 안정적 |
| 영속 데이터 | 가능하지만 관리가 번거로움 | 일반적으로 더 적합 |
| 대표 사용처 | 소스 코드, 설정 파일 | DB 데이터, 앱 영속 데이터 |
주의할 점
bind mount는 호스트 파일을 컨테이너가 직접 건드릴 수 있게 하므로 편하지만 위험도도 큽니다. 특히 운영 환경에서는 경로 의존성과 쓰기 권한 범위를 함께 따져 보는 편이 좋습니다.
참고 링크
2 sources