Docker Optimization Guide π
Image Optimization π¦
Multi-stage Builds
# Build stage
FROM node:18-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
# Production stage
FROM node:18-alpine
COPY --from=builder /app/dist ./dist
RUN npm ci --only=production
CMD ["node", "dist/main.js"]
Layer Optimization
# β
Combine commands
RUN apt-get update && \
apt-get install -y \
curl \
nginx \
postgresql-client && \
rm -rf /var/lib/apt/lists/*
# β
Use .dockerignore
node_modules
npm-debug.log
Dockerfile
.git
.env
Runtime Optimization β‘
Resource Limits
version: '3.8'
services:
app:
deploy:
resources:
limits:
cpus: '0.50'
memory: 512M
reservations:
memory: 256M
Container Settings
# Otimizar garbage collector
docker run -e "GOGC=100" app
# Tuning JVM
docker run \
-e "JAVA_OPTS=-XX:+UseG1GC -XX:MaxRAMPercentage=75" \
java-app
Storage Optimization πΎ
Volume Performance
# tmpfs para dados temporΓ‘rios
docker run \
--tmpfs /tmp:rw,noexec,nosuid,size=1g \
nginx
# Volume otimizado
docker volume create --driver local \
--opt type=ext4 \
--opt device=/dev/sda1 \
fast-storage
I/O Tuning
services:
db:
volumes:
- data:/var/lib/postgresql/data
blkio_config:
weight: 1000
device_read_bps:
- path: /dev/sda
rate: '100mb'
Network Optimization π
DNS Settings
# DNS otimizado
docker run \
--dns 8.8.8.8 \
--dns-search example.com \
nginx
Network Mode
# Host networking para performance
docker run --network host nginx
# Container networking otimizado
docker run \
--network-alias=fastnet \
--dns=8.8.8.8 \
nginx
Build Optimization ποΈ
BuildKit Features
# Habilitar BuildKit
export DOCKER_BUILDKIT=1
# Build paralelo
docker buildx build \
--platform linux/amd64,linux/arm64 \
--push .
Cache Strategies
# β
Otimizar cache
COPY package*.json ./
RUN npm ci
COPY . .
# Cache em registry
docker buildx build \
--cache-from type=registry,ref=user/app:cache \
--cache-to type=registry,ref=user/app:cache \
.
Memory Optimization π§
Memory Management
# Limites de memΓ³ria
docker run \
--memory="512m" \
--memory-swap="1g" \
--memory-reservation="256m" \
nginx
# OOM settings
docker run \
--oom-kill-disable \
--memory="1g" \
nginx
CPU Optimization π»
CPU Allocation
# CPU limits
docker run \
--cpus=".5" \
--cpu-shares=512 \
nginx
# CPU pinning
docker run \
--cpuset-cpus="0,1" \
nginx
Optimization Checklist β
Build Time
[x] Multi-stage builds
[x] Layer optimization
[x] .dockerignore
[x] BuildKit enabled
[x] Cache strategies
Runtime
[x] Resource limits
[x] Volume optimization
[x] Network tuning
[x] Memory management
[x] CPU allocation
Monitoring & Metrics π
Performance Metrics
# Container stats
docker stats --no-stream --format \
"table {{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}"
# I/O metrics
docker stats --format \
"table {{.Container}}\t{{.BlockIO}}\t{{.NetIO}}"
Best Practices Matrix π
Área | Otimização | Impacto |
---|---|---|
Build | Multi-stage | Redução de tamanho |
Runtime | Resource limits | Estabilidade |
Storage | Volume drivers | I/O Performance |
Network | Host networking | Latência reduzida |
Waifu Optimization Tips π«
Quick Reference π
Common Optimizations
# Build otimizado
DOCKER_BUILDKIT=1 docker build --no-cache .
# Runtime otimizado
docker run \
--cpus=2 \
--memory=2g \
--network host \
app
# Storage otimizado
docker volume create --driver local \
--opt type=tmpfs \
--opt device=tmpfs \
--opt o=size=1g \
fast-volume
16 abril 2025