Dockerfile snippets for popular frameworks and tools

bun
React 19.2.3Next.js 16.1.6

    FROM oven/bun:1.1-alpine AS deps
    WORKDIR /app

    RUN bun install --frozen-lockfile

    FROM oven/bun:1.1-alpine AS builder
    WORKDIR /app

    COPY --from=deps /app/node_modules ./node_modules
    COPY . .

    ENV NEXT_TELEMETRY_DISABLED 1

    RUN bun run build

    FROM oven/bun:1.1-alpine AS runner
    WORKDIR /app

    ENV NODE_ENV production
    ENV NEXT_TELEMETRY_DISABLED 1

    RUN addgroup --system --gid 1001 nodejs
    RUN adduser --system --uid 1001 nextjs

    COPY --from=builder /app/public ./public
    COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
    COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static

    USER nextjs

    EXPOSE 3000

    ENV PORT 3000

    ENV HOSTNAME "0.0.0.0"

    CMD ["bun", "server.js"]
    
bun
VueNuxt 4.4.2

    FROM oven/bun:alpine AS build
    WORKDIR /app

    COPY package.json bun.lock ./
    RUN bun install --frozen-lockfile --ignore-scripts

    COPY . .

    ENV NITRO_PRESET=bun
    RUN bun --bun run build

    FROM oven/bun:alpine AS production
    WORKDIR /app

    COPY --from=build /app/.output /app

    ENV HOST=0.0.0.0
    ENV PORT=3000
    EXPOSE 3000/tcp
    ENTRYPOINT [ "bun", "--bun", "run", "/app/server/index.mjs" ]
    
bun
React 19.2.0Vite 7.3.1

    FROM oven/bun:1.1-alpine AS build

    WORKDIR /app

    COPY package.json bun.lock ./

    RUN bun install

    COPY . .

    RUN bun run build

    FROM nginx:stable-alpine

    COPY --from=build /app/dist /usr/share/nginx/html

    EXPOSE 80

    CMD ["nginx", "-g", "daemon off;"]
    
pnpm
VueNuxt 3.14

    FROM node:20-alpine AS base
    WORKDIR /app

    ENV PNPM_HOME="/pnpm"
    ENV PATH="$PNPM_HOME:$PATH"
    RUN corepack prepare pnpm@10.0.0 --activate
    RUN corepack enable

    FROM base AS devdeps
    COPY ./package.json ./pnpm-lock.yaml ./
    RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --frozen-lockfile

    RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install -D oxc-parser

    FROM devdeps AS build
    COPY . .
    RUN pnpm build

    FROM base AS deps
    COPY ./package.json ./pnpm-lock.yaml ./
    RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --frozen-lockfile --production

    FROM deps AS deploy
    COPY --from=build /app/.output ./

    EXPOSE 3000
    CMD node ./server/index.mjs
    
bun
Elysia

    FROM oven/bun AS build

    WORKDIR /app

    # Cache packages installation
    COPY package.json package.json
    COPY bun.lock bun.lock

    RUN bun install

    COPY ./src ./src

    ENV NODE_ENV=production

    RUN bun build         --compile         --minify-whitespace         --minify-syntax         --outfile server         src/index.ts

    FROM gcr.io/distroless/base

    WORKDIR /app

    COPY --from=build /app/server server

    ENV NODE_ENV=production

    CMD ["./server"]

    EXPOSE 3000
    
bun
ElysiaPrisma

    FROM oven/bun:alpine AS build
    WORKDIR /app

    COPY package.json package.json
    COPY bun.lock bun.lock

    RUN bun install

    COPY ./prisma ./prisma
    COPY ./src ./src
    COPY prisma.config.ts prisma.config.ts
    ENV NODE_ENV=production

    FROM oven/bun:alpine
    WORKDIR /app
    COPY --from=build /app /app
    ENV NODE_ENV=production
    EXPOSE 3000

    CMD ["sh", "-c", "bun prisma:deploy && bun src/index.ts"]
    
Copied!