Next.jsをDockerコンテナ化してデプロイする際のDockerfile, docker-composeファイルを残してます。
前提
- ローカルの開発環境はDockerで動かさず、デプロイ時のみDockerコンテナを利用する
- Next.jsのexample with-dockerで使用されているstandalone機能が実験的機能であったため、standalone機能を使用しない方法を採用した(2022/07/18追記: 実験的機能からstandaloneが外れてました)
docker-compose.yaml
version: '3'
services:
next:
build:
context: .
container_name: next
volumes:
- .:/app
ports:
- 3000:3000
Dockerfile
FROM node:16-alpine AS builder
RUN apk add --no-cache libc6-compat # node:alpineで不足しがちな共有ライブラリを追加
WORKDIR /app
ENV NEXT_TELEMETRY_DISABLED 1 # 匿名での情報収集を拒否する設定
COPY . .
RUN yarn install --frozen-lockfile # npmなら, RUN npm ci
RUN yarn build # npmなら, RUN npm run build
FROM node:16-alpine as runner
ENV NODE_ENV production
ENV NEXT_TELEMETRY_DISABLED 1
COPY --from=builder /app/next.config.js next.config.js # 初期設定のままであれば不要
COPY --from=builder /app/.next .next
COPY --from=builder /app/.env .env # 必要なenvファイル
COPY --from=builder /app/public public
COPY --from=builder /app/node_modules node_modules
COPY --from=builder /app/package.json package.json
COPY --from=builder /app/yarn.lock yarn.lock # npmなら, package-lock.json
CMD ["yarn", "start"] # npmなら, npm run start