🥩

Node(NestJS) DockerImage軽量化!! 1.75GB-283MB

2023/05/03に公開

はじめに

NestJS*Dockerでの環境構築時にImageサイズが1.75GBもあって重いよなぁ。と思ったので軽量化してみました。

以下のワードを覚えておくとどうにかなりそうなのでメモ

Dockerfile

改善前: 1.75GB

Dockerfile
FROM node:18
ENV NODE_ENV development
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "run", "start:prod"]

改善後: 283MB

Dockerfile
FROM node:18.16.0-alpine3.17 AS dependency
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production

FROM node:18.16.0-alpine3.17 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
RUN npm i -g @nestjs/cli
COPY . .
RUN npm run build

FROM node:18.16.0-bullseye-slim AS runner
WORKDIR /app
ENV NODE_ENV production
COPY --from=builder /app/dist ./dist
COPY --from=dependency /app/node_modules ./node_modules
COPY --from=builder /app/package.json ./package.json

EXPOSE 3000
CMD [ "npm", "run", "start:prod" ]

最後に

FROMで何となくよく使われてそうなイメージを使っていたりするのかもですが、そこから疑っていくとより良いDocker Lifeを送れそう。
ちなみにgcrのDockerImageも軽量だがビルドでエラーが出て使いにくかったためやめました。原因は一旦放置してます;;
まだデプロイして動かしていないため修正が入るかもですが、ただDockerを使うのではなくどうせ使うならもう少し上手く使えるようになりたいところ。

Discussion