Create a starter production Dockerfile for common languages and package managers.
Language and package-manager choices select a base image, dependency commands, workdir, copy steps, port, and command; compiled options can use builder and runtime stages. The result is Dockerfile text, not a built or scanned image.
Runtime: node Version: 20 Port: 3000 Multi stage: true Alpine: true Package manager: pnpm
FROM node:20-alpine AS builder WORKDIR /app RUN corepack enable COPY package.json pnpm-lock.yaml ./ RUN pnpm install --frozen-lockfile COPY . . RUN pnpm build FROM node:20-alpine AS runner WORKDIR /app ENV NODE_ENV=production RUN addgroup --system --gid 1001 nodejs && adduser --system --uid 1001 appuser COPY --from=builder --chown=appuser:nodejs /app/dist ./dist COPY --from=builder --chown=appuser:nodejs /app/node_modules ./node_modules COPY --from=builder --chown=appuser:nodejs /app/package.json ./ USER appuser EXPOSE 3000 CMD ["node", "dist/index.js"]
Web services, language repositories, and CI image builds start from Dockerfiles.