2016-08-16 4 views
1

js 파일의 축소 버전을 사용하여 프로덕션 도커 컨테이너를 빌드하려고합니다.docker-compose 빌드 프로세스 중에 webpack 빌드를 실행하십시오.

Dockerfile에 npm 패키지를 설치 한 후 webpack 컴파일을 작성하려고합니다.

RUN npm install -g n # upgrading the npm version 
RUN n stable 
ADD ./webpack/package.json /package.json 
RUN npm install --production 
RUN npm run build-production # <<< Fails here 

고정 표시기 빌드 프로세스는 (NODE_PATH가 설정)가 설치 패키지를 찾을 수 없다는 불평 NPM과 마지막 명령 RUN npm run build-production 동안 실패합니다.

그러나 내 ENTRYPOINT 스크립트에 npm run build-production 호출을 추가하면 올바르게 작동하고 예상대로 모든 것을 컴파일합니다. 그러나, 그것은 webpack을 실행하여 컨테이너를 시작하는 모든 것을 구현하는데, 이는 바람직하지 않습니다.

마지막 도커 빌드 단계에서 이전 단계에서 설치된 패키지를 찾을 수없는 이유는 무엇입니까? 하지만 엔트리 포인트 스크립트를 통해 왜 작동합니까?

Dockerfile의 도커 빌드에 webpack 빌드를 추가하는 가장 좋은 방법은 무엇입니까?

+0

정확한 오류 메시지를 포함시킬 수 있습니까? 'build-production'에 대한 의존성 중 하나가'devDependencies' 아래 나열되어 있기 때문에 가능하지 않을 수 있습니까? '--production' 플래그 때문에 설치되지 않았습니다? 런타임시 볼륨을 사용합니까? – dnephin

+0

@dnephin 의견을 보내 주셔서 감사합니다. 모든 패키지는'--production' 의존성에 포함됩니다. 나는 또한'--production'없이 같은 에러를 얻는다. 예, 볼륨을 사용하고 있습니다. 빌드하는 동안 액세스 할 수 있습니까? – neurix

+0

아니요, 빌드하는 동안 볼륨에 액세스 할 수 없습니다. – dnephin

답변

3

대신

RUN bash -l -c 'npm run build-production' 

를 사용하십시오 당신이

0

이 문제는 build-production가 설치되는되지 않는 devDependencies을 필요로 할 수 있습니다 도움이 될 것입니다

RUN npm run build-production # <<< Fails here 

.

생산 이미지를 작게 유지하는 가장 좋은 방법은 dobi과 같은 도구를 사용하는 것입니다. dev 컨테이너에서 빌드 작업을 실행 한 다음 모든 것을 하나의 명령으로 생산 이미지로 쉽게 패킹 할 수 있습니다.

다음은 작동 할 수있는 dobi.yaml의 예입니다.

meta: 
    project: some-project-name 

image=builder: 
    image: myproject-dev 
    context: dockerfiles/ 
    dockerfile: Dockerfile.build 

image=production: 
    image: user/prod-image-name 
    context: . 
    depends: [build] 

mount=source: 
    bind: . 
    path: /code 

run=build: 
    use: builder 
    mounts: [source] 
    command: "npm run build-production" 
    artifact: path/to/minified/assets 

실행 중일 때 dobi production을 실행하면 오래된 작업이 실행됩니다. 소스 파일이 변경되지 않으면 작업을 건너 뜁니다. depends: [build]은 빌드 단계가 항상 맨 처음 실행되도록합니다.