개요
Docker로 개발할 때 가장 큰 고민 중 하나는 코드 변경사항을 빠르게 확인하는 것입니다. 변경할 때마다 이미지를 다시 빌드하고 컨테이너를 재시작하는 것은 매우 비효율적입니다.
이런 문제를 해결해주는 것이 바로 바인드 마운트(Bind Mount) 입니다.
바인드 마운트란❓
바인드 마운트(Bind Mount)는 Docker에서 호스트 파일 시스템의 특정 디렉토리를 컨테이너 내부 디렉토리에 연결(마운트)하는 방법입니다. 이를 통해 호스트와 컨테이너가 데이터를 실시간으로 공유할 수 있습니다.
- 소스 코드가 컨테이너에 실시간으로 반영됨
이미지 재빌드없이 변경사항 즉시 확인 가능- 영구적이고 편집 가능한 데이터 관리 가능
바인드 마운트 vs 명명된 볼륨
바인드 마운트와 볼륨은 비슷해 보이지만 중요한 차이가 있습니다:
1. 명명된 볼륨
- 영구 데이터 저장 가능
- Docker가 관리하는 파일시스템에 저장됨
- 호스트 머신의
저장 위치를 알 수 없음 직접 편집 불가능- Docker Area 내부에서 관리됨
2. 바인드 마운트
- 호스트 머신의 특정 경로와 직접 연결
- 저장 위치를 정확히 알 수 있음
- 실시간 편집 가능
- Docker Area 외부의 파일시스템과 연결
- 개발 중 소스 코드 변경 사항 즉시 반영에 유용
바인드 마운트 사용법
기본 문법
docker run -v [호스트_경로]:[컨테이너_경로] [이미지명]
여기서 주의할 점:
- 호스트 경로는 반드시 절대 경로여야 함
- 프로젝트 폴더의 실제 경로를 지정해야 함
- 컨테이너 내부의 타겟 경로 지정 필요
실제 사용
ocker run -d -p 3000:80 --rm --name feedback-app \ -v feedback:/app/feedback \ -v /Users/zinu/Desktop/Udemy/data-volumes/:/app \ feedback-node:volumes
- -d: 백그라운드 실행
- -p 3000:80: 포트 매핑
- --rm: 컨테이너 종료 시 자동 삭제
- --name feedback-app: 컨테이너 이름
- -v feedback: /app/feedback: 명명된 볼륨
- -v /Users/.../data-volumes/:/app: 바인드 마운트
- feedback-node:volumes: 이미지명:태그
위 명령어는 feedback 볼륨의 데이터를 컨테이너 안에서 /app/feedback 경로를 통해 읽고 쓸 수 있도록 연결(마운트)하는 것입니다.
즉, data-volumes 폴더 전체를 컨테이너의 /app 디렉토리에 연결하여 실시간으로 파일을 공유하고 수정할 수 있게 됩니다.
Docker 접근 권한 설정
바인드 마운트를 사용하기 전에 Docker의 파일 시스템 접근 권한을 확인해야 합니다.
- Docker Desktop → Settings → Resources → File sharing
- 공유하려는 프로젝트 폴더가 접근 가능한 경로인지 확인
- 접근 권한이 없다면 '+' 버튼으로 추가
data-volumes% pwd
/Users/zinu/Desktop/Docker/data-volumes
필자의 경우 프로젝트가 Users 디렉토리 하위에 존재하기 때문에 도커가 자동으로 액세스할 수 있습니다. 이는 File sharing-Resource 메뉴에 Users 디렉토리가 기본적으로 리스팅되어 있기 때문입니다.
만약 공유하려는 프로젝트가 "Resources"에 지정된 폴더의 하위 폴더가 아니라면, File sharing 메뉴 하단의 '+' 버튼을 클릭하여 공유 가능 리소스로 추가해야 합니다.
바인드 마운트 사용해보기 : HTML 파일 수정
<section>
<h2>Your Feedback!!!!!!!</h2>
컨테이너를 볼륨과 마운트하여 시작하고, 위와 같이 HTML 파일을 수정하고 브라우저를 새로고침 해보겠습니다.
위와 같이 이미지를 다시 빌드하지 않아도 변경사항이 즉시 반영되는 것을 확인할 수 있습니다.
바인드 마운트의 장점
1. 개발 생산성 향상
- 코드 변경 시 즉시 반영
- 빌드 과정 생략으로 시간 절약
2. 리소스 효율성
- 불필요한 이미지 빌드 감소
- 디스크 공간 절약
3. 편리한 개발 환경
- 로컬 개발 도구로 직접 코드 수정
- 실시간 디버깅 가능
'DevOps > Docker' 카테고리의 다른 글
[Docker] Docker 컨테이너 데이터 관리: 익명 볼륨 vs 명명된 볼륨 (0) | 2025.01.06 |
---|---|
[Docker] 컨테이너의 파일시스템 이해하기: 데이터는 어디에 저장될까❓ (0) | 2025.01.05 |
[Docker] Docker에서 컨테이너와 이미지 식별을 위한 이름 및 태그 활용 알아보기 (0) | 2024.12.30 |
[Docker] Docker cp로 컨테이너 ↔ 로컬 간 파일 복사하기 (0) | 2024.12.29 |
[Docker] Docker 컨테이너의 실행 모드: Attach vs Detach (0) | 2024.12.26 |