Solved
Dockerのマルチステージビルドでイメージサイズを減らす方法
Taro · 6/27/2026 · 54 views
Node.jsアプリのDockerイメージが1GB近くになってしまいます。ビルドツールなどは本番では不要なはずなのですが、どう減らせばいいですか?
Taro · 6/27/2026 · 54 views
Node.jsアプリのDockerイメージが1GB近くになってしまいます。ビルドツールなどは本番では不要なはずなのですが、どう減らせばいいですか?
マルチステージビルドを使うのが定番の解決策です。ビルド用のステージと、実行用の最終的なステージを分けて、必要なファイルだけを最終イメージにコピーする書き方です。
FROM node:20 AS builder WORKDIR /app COPY package*.json ./ RUN npm ci COPY . . RUN npm run build
FROM node:20-alpine WORKDIR /app COPY --from=builder /app/package*.json ./ RUN npm ci --omit=dev COPY --from=builder /app/dist ./dist CMD ["node", "dist/server.js"]
こうすると、TypeScriptのコンパイラやdevDependencies、ソースコードそのものなど、ビルド時にしか使わないものは最終イメージに含まれなくなります。加えて、ベースイメージをnode:20ではなくnode:20-alpine(Alpine Linuxベースの軽量版)にするだけでも数百MB単位でサイズが減ることが多いです。
.dockerignoreファイルでnode_modulesや.gitなどを除外しておくのも忘れずに。ビルドコンテキストが小さくなりビルド自体も速くなります。
✓ This question has been solved