[DOCKER] [NODE]: 필요할 때만 node_modules를 재구축하는 방법!

소개:



코드를 변경할 때마다 새로운 종속성을 구현했다는 의미는 아닙니다. 프로젝트에 새 패키지를 삽입하지 않았다면 node_modules 폴더를 다시 빌드할 이유가 전혀 없습니다.

Docker를 실행하는 Node 애플리케이션의 개발 및 디버깅 시간이 크게 줄어들기 때문에 효율성을 어떻게 업그레이드할 수 있는지 알아보겠습니다.

노드 Dockerfile이 일반적으로 구현되는 방식:



일반적으로 볼 수 있는 이Dockerfile를 빠르게 살펴보겠습니다. 이는 잘못 구현되었습니다.

FROM node:16

# Create app directory
WORKDIR /usr/src/app

# Copy source
COPY . .

# Install dependencies
RUN npm install

# Run server
EXPOSE 8080
CMD [ "node", "server.js" ]


여기서 전체 효율성 문제는 COPY . .에 있습니다.

이것은 나쁘다. 이렇게 하면 .의 파일을 변경할 때마다 모듈 폴더를 계속해서 빌드해야 합니다...

수정:



대신 먼저 package.jsonpackage-lock.json 파일(종속성을 제어함)을 작업 디렉토리에 복사한 다음 설치해야 합니다.

이제 Dockerfile을 다음과 같이 업데이트하겠습니다.

# Copy package.json and package-lock.json
COPY package*.json ./

# Install dependencies
RUN npm install


그래야만 나머지 파일을 복사할 수 있습니다.

COPY . .


따라서 고정 Dockerfile 버전은 다음과 같습니다.

FROM node:16

# Create app directory
WORKDIR /usr/src/app

# Copy package.json and package-lock.json
COPY package*.json ./

# Install dependencies
RUN npm install

# Copy source
COPY . .

# Run server
EXPOSE 8080
CMD [ "node", "server.js" ]


설명:



Docker 캐시 레이어에 관한 모든 것입니다.

각 Docker 이미지는 일련의 레이어로 구성됩니다.
Dockerfile의 명령은 항상 새 레이어를 생성합니다.

모든 것을 하나의 레이어 안에 유지하는 대신 다른 부분에서 분리해야 합니다.

Docker는 재구축 시 기존 캐시 레이어를 사용하려고 하기 때문입니다.

그것은 간단한 설명입니다.
official documentation에서 자세한 내용을 읽을 수 있습니다.

결론:



이제 package.json 파일이 변경될 때마다 npm install가 다시 실행됩니다. 그렇지 않으면 단순히 건너뜁니다.

로그에서 이 동작을 확인할 수 있습니다. ---> Using cache 가 다시 빌드되지 않음을 나타내는 node_modules 를 찾으십시오.

이 게시물이 마음에 드셨나요? ;디



그렇다면 저를 팔로우하거나 이 게시물을 즐겨찾기에 추가해 주세요!

좋은 웹페이지 즐겨찾기