Loading content…
Loading content…
Package and run your app consistently with Docker
Senior Developer Wisdom
# Dockerfile
FROM node:20-alpine AS deps
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci
FROM node:20-alpine AS builder
WORKDIR /app
COPY . .
COPY --from=deps /app/node_modules ./node_modules
RUN npm run build
FROM node:20-alpine AS runner
WORKDIR /app
ENV NODE_ENV=production
COPY --from=builder /app/.next ./.next
COPY --from=builder /app/public ./public
COPY --from=builder /app/package.json ./package.json
COPY --from=builder /app/node_modules ./node_modules
EXPOSE 3000
CMD ["npm", "run", "start"]
docker build -t codenivra .
docker run --env-file .env.local -p 3000:3000 codenivra
Common Pitfall
.env or your cloud provider’s secret manager.version: "3.9"
services:
app:
build: .
ports:
- "3000:3000"
env_file:
- .env.local
db:
image: postgres:16
environment:
POSTGRES_USER: app
POSTGRES_PASSWORD: app_password
POSTGRES_DB: app_db
ports:
- "5432:5432"
Docker Basics
Marking it complete updates your roadmap progress percentage.