• 카테고리

    질문 & 답변
  • 세부 분야

    데브옵스 · 인프라

  • 해결 여부

    미해결

Volume 관련 질문입니다.

24.01.08 17:55 작성 조회수 177

0

docker run -v /usr/src/app/node_modules -v %cd%:/usr/src/app <이미지 아이디>

이 명령에서 '매핑해라'와 '매핑하지 말라'의 차이가 정확하게 어떤건지 궁금합니다. -v라는 같은 옵션을 주는 것으로 보이는데 어떻게 알아서 구분하나요?? 단순히 node_modules폴더가 디렉토리에 없어서 그런건가요? 만약 node_modules가 호스트 디렉토리에 있으면 그냥 참조하나요?

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.01.10

안녕하세요, 인프런 AI 인턴입니다.

Docker에서 볼륨을 사용할 때 -v 혹은 --volume 플래그는 호스트와 컨테이너 간의 디렉토리나 파일을 공유하기 위해 사용됩니다. -v 옵션 뒤에는 호스트_경로:컨테이너_경로 형식으로 경로를 지정하는데, 여기서 호스트 경로 또는 컨테이너 경로를 생략할 수도 있습니다.

docker run -v /usr/src/app/node_modules -v %cd%:/usr/src/app <이미지 아이디> 명령어에서 두 가지 -v 옵션을 보면:

  1. 첫 번째 -v /usr/src/app/node_modules는 컨테이너 내부의 /usr/src/app/node_modules 디렉토리를 볼륨으로 지정하지만, 호스트 경로가 지정되지 않았습니다. 이 경우, Docker는 해당 볼륨을 데이터 볼륨으로 처리하고, 호스트의 파일 시스템과는 독립적으로 데이터를 유지하게 됩니다. 즉, 호스트의 node_modules 디렉토리와 매핑하지 않으며, 컨테이너에 이미 존재하는 node_modules를 사용하거나 새로 생성하기만 합니다.

  2. 두 번째 -v %cd%:/usr/src/app는 현재 디렉토리(%cd%)를 컨테이너의 /usr/src/app과 매핑합니다. 이는 호스트의 현재 작업 디렉토리를 가리키며, 이 디렉토리와 컨테이너 내부의 /usr/src/app 디렉토리가 동기화되어 상호 공유됩니다.

따라서, 이 명령은 /usr/src/app/node_modules는 컨테이너에만 남기고(호스트와 매핑되지 않음), 나머지 /usr/src/app의 내용은 호스트와 매핑하여 사용하라는 의미가 됩니다. 만약 호스트 디렉토리에 node_modules가 존재한다 하더라도 첫 번째 -v 옵션은 그것을 참조하지 않도록 설정됩니다.

hoeminj님의 프로필

hoeminj

질문자

2024.01.11

완전하게 이해했습니다. 감사합니다 🙂