Docker Image Optimization
Small and secure Docker images enable faster deployment and reduced attack surface.
Base Image Selection
# BAD - Full OS image (800MB+)
FROM ubuntu:22.04
GOOD - Minimal image (5MB)
FROM alpine:3.18
BEST - Distroless (security)
FROM gcr.io/distroless/static-debian12
Multi-stage Build
FROM node:18-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
RUN npm run build
FROM node:18-alpine
WORKDIR /app
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
USER appuser
COPY --from=builder --chown=appuser:appgroup /app/dist ./dist
COPY --from=builder --chown=appuser:appgroup /app/node_modules ./node_modules
EXPOSE 3000
CMD ["node", "dist/index.js"]
Security Best Practices
# Non-root user
USER 1000:1000
Read-only filesystem
docker run --read-only --tmpfs /tmp myapp
Security scanning
trivy image myimage:latest
Conclusion
Optimized images can achieve up to 80% size reduction and reduce security risks.