작성
·
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
옵션을 보면:
첫 번째 -v /usr/src/app/node_modules
는 컨테이너 내부의 /usr/src/app/node_modules
디렉토리를 볼륨으로 지정하지만, 호스트 경로가 지정되지 않았습니다. 이 경우, Docker는 해당 볼륨을 데이터 볼륨으로 처리하고, 호스트의 파일 시스템과는 독립적으로 데이터를 유지하게 됩니다. 즉, 호스트의 node_modules
디렉토리와 매핑하지 않으며, 컨테이너에 이미 존재하는 node_modules
를 사용하거나 새로 생성하기만 합니다.
두 번째 -v %cd%:/usr/src/app
는 현재 디렉토리(%cd%
)를 컨테이너의 /usr/src/app
과 매핑합니다. 이는 호스트의 현재 작업 디렉토리를 가리키며, 이 디렉토리와 컨테이너 내부의 /usr/src/app
디렉토리가 동기화되어 상호 공유됩니다.
따라서, 이 명령은 /usr/src/app/node_modules
는 컨테이너에만 남기고(호스트와 매핑되지 않음), 나머지 /usr/src/app
의 내용은 호스트와 매핑하여 사용하라는 의미가 됩니다. 만약 호스트 디렉토리에 node_modules
가 존재한다 하더라도 첫 번째 -v
옵션은 그것을 참조하지 않도록 설정됩니다.
완전하게 이해했습니다. 감사합니다 🙂