2014-12-24 2 views
12

나는 도커 개발 환경을 계획 중이며 npm install을 캐시 된 레이어로 실행하는 것이 좋습니다.Docker 및 node_modules - 레이어 또는 볼륨에 배치 하시겠습니까?

나는 ways to optimize dockerfiles to avoid rebuilding node_modules unless package.json changes이 있다는 것을 알고 있지만, package.json도 변경 될 때마다 node_modules을 완전히 다시 작성하고 싶지는 않습니다. 신선한 npm install은 우리에게 5 분 이상 걸리며, package.json으로의 변경은 비교적 자주 발생합니다. 사람이 끌어 오기 요청을 검토하고 분기를 자주 전환하는 경우 매일 5 분 0 분 npm installs의 분노를 겪어야 할 수 있습니다.

node_modules을 볼륨에 설치하여 빌드간에 지속되도록하고 package.json으로 약간 변경해도 전체 종속성 트리가 다시 작성되지는 않습니까?

답변

8

예. node_modules을 반복해서 다시 작성하지 마십시오. 데이터 컨테이너에 고정시키고 읽기 전용으로 마운트하면됩니다. 이제 중앙 프로세스를 node_modules으로 재구성 할 수 있습니다.

모든 노드가 동일한 노드 모듈을 사용하도록 강제 할 수 있기 때문에 추가로 이점을 얻을 수 있습니다. 실제로 프로덕션에 넣으려는 것과 동일한 것을 실제로 테스트하고 싶다면이 작업이 중요합니다. (! 안된) 등이

뭔가 : 지금까지

docker build -t my/module-container - <<END_DOCKERFILE 
FROM busybox 
RUN mkdir -p /usr/local/node 
VOLUME /usr/local/node 
END_DOCKERFILE 

docker run --name=module-container my/module-container 

docker run --rm --volumes-from=module-container \ 
    -v package.json:/usr/local/node/package.json \ 
    /bin/bash -c "cd /usr/local/node; npm install" 

는 데이터 컨테이너 module-container/usr/local/node/node_modulespackage.json에 의해 지정된 모듈을 포함합니다. --volume-from=module-container을 사용하여 이제 생산 용기에 장착 할 수 있어야합니다.

+0

나는 이것을 수행하는 방법을 찾으려고합니다. 이 설정 방법을 보여줄 가이드가 있습니까? 이것을 보여주기 위해 설정 파일을 작성할 수 있습니까? – Scotty

+0

위의 답변을 업데이트했습니다. – mzedeler