작성
·
275
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경로에 마운트 하라라는 뜻같습니다.
오! 저도 의문이었는데 한방에 이해되었습니다 감사합니다 ㅎ