노드 Docker 이미지 크기를 10배 줄이는 방법
크기가 중요한 이유
최적화를 시작합시다
다음은 VueJS 애플리케이션을 사용하여 빌드한 demo application입니다.
다음은 초기 Dockerfile입니다.
FROM node:10
WORKDIR /app
COPY . /app
EXPOSE 8080
RUN npm install http-server -g
RUN npm install && npm run build
CMD http-server ./dist
이 이미지의 크기는 다음과 같습니다.
1.34GB입니다! 이런!
단계별 최적화를 시작하겠습니다.
1) 다단계 Docker 빌드 사용
다단계 빌드를 사용하면 단일 Dockerfile에서 여러 중간 이미지를 사용하여 Docker 이미지를 쉽게 최적화할 수 있습니다. 그것에 대해 자세히 읽어보십시오here. 다단계 빌드를 사용하여 빌드 이미지에 모든 종속성을 설치하고 더 간결한 런타임 이미지에 복사할 수 있습니다.
FROM node:10 AS BUILD_IMAGE
WORKDIR /app
COPY . /app
EXPOSE 8080
RUN npm install && npm run build
FROM node:10
WORKDIR /app
# copy from build image
COPY --from=BUILD_IMAGE /app/dist ./dist
COPY --from=BUILD_IMAGE /app/node_modules ./node_modules
RUN npm i -g http-server
CMD http-server ./dist
이제 이 이미지의 크기는 1.24GB입니다.
2) 개발 종속성 제거 및 노드 정리 도구 사용
node-prune은 node_modules 폴더에서 불필요한 파일을 제거하기 위한 오픈 소스 도구입니다. Npm 패키지의 테스트 파일, 마크다운 파일, 타이핑 파일 및 *.map 파일은 일반적으로 프로덕션 환경에서 전혀 필요하지 않으며 대부분의 개발자는 프로덕션 패키지에서 제거하지 않습니다. node-prune을 사용하면 안전하게 제거할 수 있습니다.
이를 사용하여 개발 종속성을 제거할 수 있습니다.
npm prune --production
이러한 변경을 수행한 후
Dockerfile
는 다음과 같습니다.FROM node:10 AS BUILD_IMAGE
RUN curl -sfL https://install.goreleaser.com/github.com/tj/node-prune.sh | bash -s -- -b /usr/local/bin
WORKDIR /app
COPY . /app
EXPOSE 8080
RUN npm install && npm run build
# remove development dependencies
RUN npm prune --production
# run node prune
RUN /usr/local/bin/node-prune
FROM node:10
WORKDIR /app
# copy from build image
COPY --from=BUILD_IMAGE /app/dist ./dist
COPY --from=BUILD_IMAGE /app/node_modules ./node_modules
RUN npm i -g http-server
CMD http-server ./dist
이를 사용하여 전체 크기를 1.09GB로 줄였습니다.
3) 더 작은 최종 기본 이미지 선택
노드 애플리케이션을 도킹할 때 선택할 수 있는 항목base images이 많이 있습니다.
여기서는 알파인 이미지를 사용합니다. alpine은 최소한의 패키지를 포함하지만 노드 애플리케이션을 실행하기에 충분한 린(lean) 도커 이미지입니다.
FROM node:10 AS BUILD_IMAGE
RUN curl -sfL https://install.goreleaser.com/github.com/tj/node-prune.sh | bash -s -- -b /usr/local/bin
WORKDIR /app
COPY . /app
EXPOSE 8080
RUN npm install && npm run build
# remove development dependencies
RUN npm prune --production
# run node prune
RUN /usr/local/bin/node-prune
FROM node:10-alpine
WORKDIR /app
# copy from build image
COPY --from=BUILD_IMAGE /app/dist ./dist
COPY --from=BUILD_IMAGE /app/node_modules ./node_modules
RUN npm i -g http-server
CMD http-server ./dist
이것을 사용하면
Dockerfile
이미지 크기가 157MB
로 떨어집니다.\o/결론
이 3가지 간단한 단계를 적용하여 도커 이미지 크기를 10배 줄였습니다.
건배!
Reference
이 문제에 관하여(노드 Docker 이미지 크기를 10배 줄이는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/itsopensource/how-to-reduce-node-docker-image-size-by-10x-1h81텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)