local-sqs의 pre-alpha 버전을 배포했는데, 생각외로 이미지 사이즈가 너무 컸다. 무려 391.6MB였다..!
제공하는 기능에 비해 너무 큰 사이즈다. (나라도 안 쓸듯) 도커 이미지 사이즈를 줄여야한다.
크게 두 가지가 존재한다.
나는 두 가지를 다 적용해봤다!
원래 node:16
을 사용했는데, node:16-alpine
으로 변경했다.
alpine은 정말 필요한 기능만 남긴 경량화 linux가 설치된 컨테이너이다. 알파인 리눅스 이미지의 용량은 5MB밖에 안 된다!
# before
FROM node:16
# after
FROM node:16-alpine
정말로 실행에 필요한 파일들만 이미지에 포함되도록하면 된다!
이를 위해 먼저 .dockerignore
를 설정해줬다.
.github
coverage
dist
node_modules
*eslint*
*git*
*prettier*
jest*
nodemon.json
*.md
npm-debug.log
두 번째로는 이미지 생성시 정말로 실행에 필요한 패키지들만 포함되도록 Dockerfile 빌드를 두 단계로 나눴다.
FROM node:16-alpine as development
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install --only=development
COPY . .
RUN npm run build
FROM node:16-alpine as production
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install --only=production
COPY . .
COPY --from=development /usr/src/app/dist ./dist
ARG PORT=4413
ENV PORT=${PORT}
ARG IP="0.0.0.0"
ENV IP=${IP}
LABEL authors="greatSumini@gmail.com"
CMD [ "node", "dist/main" ]
production
단계에서 실행에 필요한 패키지만 설치하고, 빌드 결과물은 development
단계에서 가져다 실행만 한다.
392MB에서 43MB로 최적화 성공했다 🥳