📦 Optimized Dockerfiles = Better Images
Large images are slow. Dockerfile best practices create small, fast, secure images.
❌ Unoptimized
FROM ubuntu:latest RUN apt-get update RUN apt-get install -y python3 RUN apt-get install -y python3-pip COPY . . RUN pip install -r requirements.txt CMD python3 app.py
✅ Optimized
FROM python:3.11-slim WORKDIR /app COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt COPY . . EXPOSE 8000 CMD ["python3", "app.py"]
📝 Optimization Techniques
# Use specific image versions
FROM node:18-alpine # Not node:latest
# Copy dependencies first (layer caching)
COPY package*.json ./
RUN npm ci --only=production
# Copy source after dependencies
COPY . .
# Combine RUN commands (reduce layers)
RUN apt-get update && apt-get install -y \
package1 \
package2 \
&& rm -rf /var/lib/apt/lists/*
# Use .dockerignore
node_modules
.git
.env
*.log
# Multi-stage builds
FROM node:18 AS builder
# Build stage
FROM nginx:alpine
# Runtime stage
COPY --from=builder /app/dist /usr/share/nginx/html
# Non-root user
RUN adduser -D appuser
USER appuser
# Health check
HEALTHCHECK --interval=30s --timeout=3s \
CMD curl -f http://localhost/ || exit 1
✅ Optimization Checklist
- ✓ Use specific, minimal base images
- ✓ Copy dependencies first
- ✓ Use multi-stage builds
- ✓ Run as non-root user
- ✓ Add health checks
“Optimized Dockerfiles create small, fast images. Essential for production.”
