Docker containerization best practices — writing lean Dockerfiles, multi-stage builds, image security, and docker-compose patterns for local development.
Docker containerization best practices — writing lean Dockerfiles, multi-stage builds, image security, and docker-compose patterns for local development.
Apply these Docker practices when containerizing applications:
Use multi-stage builds to keep production images small:
# Stage 1: Build
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
# Stage 2: Runtime
FROM node:20-alpine AS runtime
WORKDIR /app
COPY --from=builder /app/node_modules ./node_modules
COPY . .
USER node
EXPOSE 3000
CMD ["node", "server.js"]
Layer caching — order instructions from least to most frequently changing:
apt-get, apk add)package.json, requirements.txt)Always pin base image versions:
# Bad
FROM node:latest
# Good
FROM node:20.11.1-alpine3.19
USER node / USER nobody before CMD--read-only flagdocker scout cves <image> or trivy image <image> before pushingAlways create a .dockerignore to exclude unnecessary files:
.git
.env*
node_modules
dist
*.log
*.md
coverage
.DS_Store