바인드 마운트

wangjh789·2022년 8월 24일
0

docker

목록 보기
11/25

데이터 저장소에는 도커가 관리하는 볼륨 말고도 호스트 머신 유저가 관리하는 바인드 마운트가 존재한다.
바인드 마운트는 영구적이고 편집 가능한 데이터에 적합하다. (볼륨과의 차이점)

폴더를 컨테이너에 마운트할 때 도커가 액세스 할 수 있는 폴더여야 한다. (도커 환경설정 file sharing탭)

docker run -d -p 3000:80 -v feedback:/api/feedback -v "<바인드할 디렉토리의 절대경로>:/app" feedback
하지만 에러가 발생한다.. 왜 그럴까?
이미지를 생성할 때 /app 디렉토리가 만들어지고 그곳에 npm install을 수행한다.
컨테이너를 시작하면 볼륨이나 바인드 마운트에서 파일을 찾는다.
그렇기 때문에 컨테이너 내의 /app 를 <바인드할 디렉토리>로 덮어써 버리기 때문에 node_modules 폴더가 사라진다.

볼륨과 바인드 마운트는 컨테이너에 마운트할 수 있다.
즉, 컨테이너 내의 특정 폴더가 호스트 머신의 폴더에 마운트되거나 연결된다.
(도커는 호스트 머신의 로컬파일을 덮어쓰지 않는다.)

이럴 경우 익명 볼륨으로 해결할 수 있다.
docker run -d -p 3000:80 -v feedback:/api/feedback -v "<바인드할 디렉토리의 절대경로>:/app" -v /app/node_modules feedback
도커는 항상 컨테이너를 설정하는 모든 볼륨을 평가하며, 충돌이 발생하는 경우 더 구체적인 디렉토리를 우선시한다.
위 커멘드에선 바인드 마운트로 /app 디렉토리를 마운트했지만 익명 볼륨은 /app/node_modules을 마운트한다. 서로 충돌이 발생했기 때문에 바인드 마운트는 node_modules를 제외한 /app 디렉토리로 지정된다.
따라서 node_modules가 사라지지 않는다.

익명 볼륨은 -v /app/node_modules 로도 설정가능하다. (VOLUME [""]으로만 되는 줄)
컨테이너에 이미 존재하는 특정 데이터를 잠그는데 유용하다.

이제 html은 이미지를 다시 빌드하지 않아도 로컬 머신에서 수정하면 컨테이너에 반영이 된다.
하지만 node 웹 서버는 그렇지 않다. (nodemon을 사용)
nodemon을 사용하면 도커파일을 npm 을 사용하도록 수정해야 한다.

마운트 덕에 도커가 컨테이너 read-write 레이어 내부의 모든 데이터를 관리할 필요가 없어졌다.
그 대신 특정데이터를 호스트 머신 파일 시스템에 아웃소싱할 수 있어서 성능과 효율성이 증대된다.

profile
기록

0개의 댓글