능글맞은 구렁이
Docker - Volumes 실습[바운드 마운트 생성] 본문
1. 바운드 마운트를 사용하는 이유는?
- 개발할 때 코드 실시간 반영
- 내 로컬 코드 수정
- 컨테이너 안에서도 바로 반영
- 서버 재빌드 없이 핫리로드 가능
- 데이터 영속성 확보
- 컨테이너는 기본적으로 휘발성이다.
- 하지만, 바인드 마운트를 쓰면 DB 데이터, 업로드 파일 등을 보존할 수 있다.
- 설정 파일 외부관리
- 컨테이너 이미지 수정없이 설정만 교체 가능하다.
- 로그 파일 수집
- 로그 모니터링 시스템과 연동 가능
3. 실습
FROM node:20-alpine
WORKDIR /app
COPY package.json .
RUN npm install
COPY . .
EXPOSE 80
CMD ["npm", "start"]
- 이미지 빌드 (docker build -t feedback-node:voluems .)
- docker run -d -p 3000:80 --rm --name feedback-app -v feedback:/app/feedback -v C:\workspace\DOCKER\data-volumes-01-starting-setup:/app -v /app/node_modules feedback-node:volumes
- -d : 백그라운드 실행
- -p 3000:80 : 포트 매핑 호스트머신포트(외부):컨테이너포트(내부)
- --rm : 컨테이너 종료 시 컨테이너 자동 삭제
- --name feedback-app : 컨테이너 명
- -v feedback:/app/feedback : 볼륨명:컨테이너경로
- -v C:\workspace\DOCKER\data-volumes-01-starting-setup:/app : 호스트경로:컨테이너경로
- -v /app/node_modules : 외부 라이브러리들이 실제로 저장되는 폴더를 별도의 볼륨에 분리
- feedback-node:volumes : 이미지명:태크
🤔 node_modules를 왜 별로의 볼륨으로 분리할까?
- 현재 docker를 테스트하고 있는 프로젝트가 node 프로젝트이다.
- node 프로젝트에서 node_modules는 실행에 필요한 외부 라이브러리들이 저장되는 필수 폴더이다.
- 컨테이너 실행 시 /app을 바인드 마운트하면 호스트 폴더가 해당 경로로 덮어써 이미지 내부의 node_modules가 보이지 않게 된다.
- 따라서, node_modules는 별도의 도커 볼륨으로 분리하여 바인드 마운트의 영향을 받지 않도록 보호한다.
🤔 바인드 마운트의 데이터를 지우려면?
- 바인드 마운트는 컨테이너 종료 및 제거 후에도 유지가 된다.
- 바인드 마운트의 데이터를 지우려면 실제로 호스트 머신에서 삭제해야한다.
🤔바운드 마운트를 하면 Dockerfile의 COPY는 없어도 되지 않을까?
결론부터 말하자면, 개발은 COPY ❌ 운영은 COPY ⭕
- 개발환경
- 호스트 코드가 /app을 전부 덮어씀
- 이미지에 복사된 코드가 필요없음
- 따라서, 개발환경에서는 COPY가 필요없음
- 운영환경
- docker run -v.. 는 개발 중에만 쓰이는 방식이다.
- 왜냐하면 코드 변경을 즉시 반영하고, 실시간 동기화가 목적이기 때문이다.
- 운영환경에서는 바인드 마운트를 사용하지 않는다. 즉, 호스트 코드 연결을 안한다.
- 따라서, 운영환경에선 반드시 필요하다.
| 구분 | 개발 환경 | 운영환경 |
| 바인드 마운트 | 사용 | 사용 안함 |
| 코드 실시간 반영 | ⭕ | ❌ |
| COPY 여부 | ❌ | ⭕ |
| 이미지 역할 | 베이스 | 완전한 실행 단위 |
'DevOps > Docker' 카테고리의 다른 글
| Docker - Volume (읽기전용) (0) | 2026.03.02 |
|---|---|
| Docker - Volume [ENV(환경변수), ARG(빌드 인수)] (0) | 2026.03.01 |
| Docker - Volumes 실습[ 익명 볼륨, 명명 볼륨 생성] (0) | 2026.02.24 |
| Docker - Volumes이란? (0) | 2026.01.18 |
| Docker - Docker Hub(image push&pull) (1) | 2024.02.06 |
Comments