STEP 1
Pastikan aplikasi Next.js sobat sudah berjalan pada localhost. Pada langkah ini, saya asumsikan sobat sudah berhasil membuat aplikasi Next.js pada local device sobat dan berfungsi dengan normal.

STEP 2
Buat file bernama Dockerfile pada root aplikasi Next.js sobat dengan isi filenya sebagai berikut.
FROM oven/bun:alpine AS base
# Install dependencies only when needed
FROM base AS deps
WORKDIR /app
# Install dependencies based on the preferred package manager
COPY package.json bun.lockb ./
RUN bun install -frozen-lockfile
# Rebuild the source code only when needed
FROM base AS builder
WORKDIR /app
COPY -from=deps /app/node_modules ./node_modules
COPY . .
# Next.js collects completely anonymous telemetry data about general usage.
ENV NEXT_TELEMETRY_DISABLED=1
RUN bun run build
# Production image, copy all the files and run next
FROM base AS runner
WORKDIR /app
ENV NODE_ENV=production
# Next.js collects completely anonymous telemetry data about general usage.
ENV NEXT_TELEMETRY_DISABLED=1
RUN addgroup -system -gid 1001 nodejs
RUN adduser -system -uid 1001 nextjs
COPY -from=builder /app/public ./public
# Set the correct permission for prerender cache
RUN mkdir .next
RUN chown nextjs:bun .next
# Automatically leverage output traces to reduce image size
# https://nextjs.org/docs/advanced-features/output-file-tracing
COPY -from=builder -chown=nextjs:bun /app/.next/standalone ./
COPY -from=builder -chown=nextjs:bun /app/.next/static ./.next/static
USER nextjs
EXPOSE 3000
ENV PORT=3000
# server.js is created by next build from the standalone output
ENV HOSTNAME=”0.0.0.0″
CMD [”bun”, “server.js”]

STEP 3
Edit file next.config.mjs, dan tambahkan script berikut
output: "standalone",
Hasil akhir next.config.mjs akan menjadi seperti berikut
/** @type {import('next').NextConfig} */
const nextConfig = {
output: "standalone",
};
export default nextConfig;

STEP 4
Tambahkan file .dockerignore pada root folder Next.js sobat dengan isi sebagai berikut
Dockerfile
.dockerignore
node_modules
npm-debug.log
README.md
.next
.git

STEP 5
Build Next.js sobat menjadi docker image dengan cara menjalankan command berikut pada terminal dengan posisi folder root Next.js sobat
# Ubah nama-image sesuai dengan nama yang sobat inginkan
docker build -t nama-image .

STEP 6
Setelah proses build selesai, pastikan image sudah berhasil dibuat dengan cara menjalankan command berikut
docker images

STEP 7
Selanjutnya sobat bisa jalankan Next.js pada docker sobat dengan cara running comand berikut
# ubah aplikasi-nextjs menjadi nama container sesuai keinginan sobat
# ubah port 3002 dengan port sesuai keinginan sobat
# ubah nama-image sesuai dengan nama image pada step sebelumnya
docker run --name aplikasi-nextjs -p 3002:3000 -d nama-image

STEP 8
Pastikan kembali container sudah berjalan dengan run command berikut
docker ps

Atau sobat bisa langsung coba akses pada browser sobat dengan alamat localhost:3002 (Sesuaikan port sobat saat step run container)


