인프런 커뮤니티 질문&답변

Kyunghwan Yang님의 프로필 이미지

작성한 질문수

따라하며 배우는 도커와 CI환경 [2023.11 업데이트]

Docker Volume에 대하여

-v 관련 질문

작성

·

265

0

똑같은 -v 인데 앞에 쓰인 것은 node_modules 는 참조하지 않기 위해 쓰고, 뒤의 -v 는 참조하기위해 쓴부분이 이해가 잘 안됩니다.ㅠㅠ

참조할 node_modules 가 없다는 것 자차제 굳이 안써줘도 되는 것 아닌가요?

그럼 만약 실수로 올린 node_modules 가 있을 경우엔 참조 하게 되는건가요?

아 혹시 /usr/src/app 은 컨테이너 경로라서 참조를 안하게 되는것이고.

$(pwd):/usr/src/app 은  local 경로라서 참조하는 것인가요?

답변 2

2

저도 배우는 입장이긴한데 제가 생각한걸 말씀드려볼게요ㅋㅋ..

컨테이너 빌드할 당시에 도커파일에 RUN npm install 을 실행해서 컨테이너 내부에 있는 /usr/src/app/node_modules에 의존성라이브러리들이 세팅되도록 작성해놨는데,

실제 컨테이너를 실행할 때, -v $(pwd):/usr/src/app 옵션만 주게되면, 애플리케이션이 컨테이너 내부에 있는 /usr/src/app/node_modules 디렉토리를 참조 안하고, host의 $(pwd)/node_modules 디렉토리를 찾으려고 하게될 것 같아요. 근데 host에서는 node_modules 디렉토리를 삭제했으니까 문제가 발생할 것 같아요.

그래서 강사님의 의도를 정리해보자면,,

이미지를 만들 때, 컨테이너 내부의 /usr/src/app/node_modules에 의존성들이 설치되도록 작성했으니까, 컨테이너를 실행할 때 -v $(pwd):/usr/src/app 옵션만 주게 되면 node_modules디렉토리도 host에 위치한 것으로 참조하려 할테니까 애플리케이션이 node_modules디렉토리를 못찾을거고(host에서 그 디렉토리 지웠으니까),

 그래서 node_modules디렉토리는 컨테이너 내부의 것(/usr/src/app/node_modules)을 사용하도록 마운트 제외옵션을 추가적으로 주신 것 같아요.

말이 좀 중구난방인 듯 한데ㅠㅠ

간단요약하자면, 컨테이너 내부의 /usr/src/app를 host의 현재 디렉토리 위치로 마운트 하되, /usr/src/app/node_modules 디렉토리만 빼고 마운트하라는 의도 같습니다ㅎㅎ

1

-v뒤에 :가 있고 없고에 따라서 차이가 있습니다. :가 없는 첫번째 -v의 경우 컨테이너가 바라보고 있는 볼륨의 node_modules를 참고하라는 뜻이고 두번때 -v인 '${PWD}:/usr/src/app'은 pwd 즉 현재 디렉토리를 컨테이너 볼륨아래 /usr/src/app경로에 마운트 하라라는 뜻같습니다.

오! 저도 의문이었는데 한방에 이해되었습니다 감사합니다 ㅎ