본문 바로가기
DevOps 관련/Docker

[Docker & NestJS] 다단계 도커를 이용한 이미지 크기 줄이고 이미지 생성

by minhyeok.lee 2023. 9. 5.
반응형

이미지 크기를 줄이는 방법: 다단계 도커를 활용하여 효율적으로 이미지를 만든 포스팅

https://www.tomray.dev/nestjs-docker-production

 

Ultimate Guide: NestJS Dockerfile For Production [2022]

Learn how to write a Dockerfile that creates a production optimized image using the NodeJS Alpine image and multistage builds.

www.tomray.dev

해당 내용을 프로젝트에 맞게 일부 수정한 후 새롭게 이미지를 빌드해보니 이미지 크기가 절반으로 줄어든다.

 

FROM node:18-alpine AS base
RUN apk add --no-cache curl \
    && curl -sL https://unpkg.com/@pnpm/self-installer | node
   
# INSTALL DEPENDENCIES FOR DEVELOPMENT (FOR NEST)
FROM base AS deps
WORKDIR /usr/src/app

COPY --chown=node:node package.json pnpm-lock.yaml ./
RUN pnpm install

USER node

# INSTALL DEPENDENCIES & BUILD FOR PRODUCTION
FROM base AS build
WORKDIR /usr/src/app

COPY --chown=node:node --from=deps /usr/src/app/node_modules ./node_modules
COPY --chown=node:node . .

ENV NODE_ENV production

RUN pnpm build
RUN pnpm prune --prod

RUN rm -rf ./.next/cache

USER node

# PRODUCTION IMAGE
FROM base AS production
WORKDIR /usr/src/app

COPY --chown=node:node --from=build /usr/src/app/node_modules ./node_modules
COPY --chown=node:node --from=build /usr/src/app/dist ./dist

EXPOSE 3001
CMD [ "node", "dist/main.js" ]

 

이후 아래 명령어로 도커 이미지를 생성한다.

$ docker build -t '[Dockerfile Name]' .
반응형

댓글