2016-08-10 2 views
0

내 랩톱에 node_modules을 가질 수있는 경우 컨테이너에 로컬로 응용 프로그램을 개발하는 올바른 방법은 무엇입니까 file system. 현재로컬 NodeJS 개발 용 Docker

나는 Dockerfile

COPY package.json /app/ 
RUN npm install 
COPY . /app/ 

settings 다음 한 그리고 나는 용기에 npm 명령을 실행할 수있어이 경우 docker-compose

volumes: 
    - "/app/node_modules" 

을 다음과 package.json의 변화 내 로컬 소스 트리에 반영됩니다. 어느 것이 좋니. 하지만 한 가지는 누락되었습니다. 로컬에 node_modules 폴더가 없기 때문에 내 IDE에서이 파일을 볼 수 없음을 의미합니다.

어떻게 든 고칠 수 있습니까?

+0

왜 로컬로 로컬로 개발하지 않았는지 이유를 부인하고 그것을 dockerize? – Craicerjack

+0

해당 구성을 사용하면 컨테이너 내부의 package.json에 대한 변경 사항이 호스트에 반영되지 않습니다. 볼륨은'docker rm -v'에서 살아남지 못할 컨테이너 볼륨입니다. 아마 당신은 호스트 볼륨을 사용하려고합니까? – BMitch

+0

@BMitch 다행스럽게도 다행스럽게도 컨테이너에서 컨테이너에서 내 변경 내용을 쉽게 볼 수 있습니다. – user1016265

답변

1

당신은 컨테이너에 모든 로컬 환경을 복사 할 수 있습니다 :

COPY ./package.json /app/package.json 
WORKDIR /app/ 
RUN npm install 
COPY ./src/ /app/src/ 
CMD ["npm","run","start"] 

이 접근 방식은 말 그대로 이미지로 해당 지역의 환경을 복사합니다. 소스를 변경할 때마다 이미지를 다시 작성하고 컨테이너를 다시 시작해야합니다.

프로젝트 폴더를 컨테이너의 볼륨으로 마운트하는 것이 좋습니다. 모든 종속성이 있으며 소스/종속성을 변경할 때마다 컨테이너를 다시 시작해야합니다 (또는 컨테이너 내부의 감독자를 사용할 수도 있습니다) :

VOLUME /app/ 
WORKDIR /app/ 
CMD ["npm","run","start"] 

컨테이너를 실행하는 경우 - 컨테이너에 프로젝트 디렉토리를 연결하는 기억

그리고 docker-compose.yml 파일

version: '2' 

services: 
    app: 
    build: . 
    image: app 
    volumes: [".:/app/"] 


편집 (나는 당신의 Node.js를 응용 프로그램에 대한 Dockerfile이 소스 node_modulesdocker-compose.yml과 동일한 디렉토리에있는 것으로 가정) : 위의 게시 된 솔루션은 지역 발전을 위해 좋다.

복사 node_modules 지역 및 컨테이너에 모든 소스 : 당신이 dockerize 및 응용 프로그램을 배포 할 경우 두 가지 방법이 있습니다

COPY ./node_modules /app/ 
COPY ./src /app/ 
COPY ./package.json /app/ 
WORKDIR /app/ 
CMD ["npm","run","start"] 

또는 내 대답의 상단에서 템플릿을 사용하는 (빌드 중에 모든 node_modules를 설치합니다 - package.json이 변경되면이 빌드가 더 느립니다).

+0

그것은 작동하지 않습니다,'node_modules' 폴더는 그 위에 로컬 폴더를 마운트하기 때문에 숨겨져 있습니다. 샘플 익스프레스 또는 다른 앱으로 github 레포를 만들 수 있다면 좋을 것입니다. 감사. – user1016265

+0

@ user1016265 여기 있습니다 : https://github.com/jan-osch/expressing_docker :) –

+0

어떻게 실행시킬 수 있는지 말씀해 주시겠습니까? Dockerfile에'npm install'이 없으므로 컨테이너를 설치 한 후에 어떻게 든 설치했음을 의미합니다. – user1016265