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

hoeminj님의 프로필 이미지

작성한 질문수

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

Docker Volume에 대하여

Volume 관련 질문입니다.

작성

·

263

0

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

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

답변 1

1

안녕하세요, 인프런 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
질문자

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

hoeminj님의 프로필 이미지

작성한 질문수

질문하기