19. Create Dockerfile
Dockerfile
Dockerfile
DockerfileARG NODE_VERSION=22ARG PNPM_VERSION=9.4.0
FROM node:${NODE_VERSION}-alpine AS base
WORKDIR /usr/src/app
RUN --mount=type=cache,target=/root/.npm \ npm install -g pnpm@${PNPM_VERSION}
FROM base AS build
RUN --mount=type=bind,source=package.json,target=package.json \ --mount=type=bind,source=pnpm-lock.yaml,target=pnpm-lock.yaml \ --mount=type=cache,target=/root/.local/share/pnpm/store \ pnpm install --frozen-lockfile
COPY . .
RUN pnpm run prisma:generate && pnpm run build
FROM build AS deps
RUN pnpm prune --prod
FROM base AS finalWORKDIR /app
ENV NODE_ENV=production
COPY package.json .COPY --from=deps /usr/src/app/node_modules ./node_modulesCOPY --from=build /usr/src/app/dist ./distCOPY --from=build /usr/src/app/prisma ./prisma
WORKDIR /app/dist/srcEXPOSE 3000CMD ["index.js"]
dockerignore
.dockerignore
# Include any files or directories that you don't want to be copied to your# container here (e.g., local build artifacts, temporary files, etc.).## For more help, visit the .dockerignore file reference guide at# https://docs.docker.com/go/build-context-dockerignore/
**/.classpath**/.dockerignore**/.env**/.git**/.gitignore**/.project**/.settings**/.toolstarget**/.vs**/.vscode**/.next**/.cache**/*.*proj.user**/*.dbmdl**/*.jfm**/charts**/docker-compose***/compose.y*ml**/Dockerfile***/node_modules**/npm-debug.log**/obj**/secrets.dev.yaml**/values.dev.yaml**/build**/distLICENSEREADME.md