🥩
Node(NestJS) DockerImage軽量化!! 1.75GB-283MB
はじめに
NestJS*Dockerでの環境構築時にImageサイズが1.75GBもあって重いよなぁ。と思ったので軽量化してみました。
以下のワードを覚えておくとどうにかなりそうなのでメモ
- マルチステージビルド
- npm ci
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 /app/dist ./dist
COPY /app/node_modules ./node_modules
COPY /app/package.json ./package.json
EXPOSE 3000
CMD [ "npm", "run", "start:prod" ]
最後に
FROMで何となくよく使われてそうなイメージを使っていたりするのかもですが、そこから疑っていくとより良いDocker Lifeを送れそう。
ちなみにgcrのDockerImageも軽量だがビルドでエラーが出て使いにくかったためやめました。原因は一旦放置してます;;
まだデプロイして動かしていないため修正が入るかもですが、ただDockerを使うのではなくどうせ使うならもう少し上手く使えるようになりたいところ。
Discussion