ETC

Docker Image 사이즈 줄이기 (멀티 스테이지 빌드)

hjkang 2024. 3. 22. 14:52

 

Nuxt3로 개발한 프로젝트를 빌드하니 이미지 사이즈가 1.5GB가 되었다.

 

Nginx로만 빌드하면 이미지 사이즈가 200MB 이지만,

난 SSR을 사용해야하기 때문에 Node로 말아주는 작업이 필요하였고, 그 결과 이미지 사이즈가 1.5GB가 되었다.

 

사이즈가 너무 크면 빌드할 때 문제가 될 수 있으니 이미지 사이즈를 줄여보자!

 

 

1. Node 버전 변경

node:18 버전 -> node:18-alpine으로 변경

 

Dockerfile

// Before
FROM node:18

// After
FROM node:18-alpine

 

 

2. .dockerignore 추가

Docker에서 제외되어도 되는 폴더, 파일 제외

 

.dockerignore

node_modules
.nuxt
.git
dist

 

 

3. Docker 멀티 스테이지 빌드

 

Dockerfile

FROM node:18-alpine as build

#ARG PORT=80

WORKDIR /app

COPY package.json /app

RUN npm install

COPY . /app

RUN npm run build
RUN npm prune

FROM node:18-alpine as prod

WORKDIR /app

COPY --from=build /app/.output /app/.output

#EXPOSE 80
#ENV PORT=80

CMD ["node", ".output/server/index.mjs"]