Docker telah mengubah cara kita membangun, mengirim, dan menjalankan aplikasi. Containerization memastikan bahwa aplikasi berjalan dengan cara yang sama di setiap environment — dari development laptop hingga production server. Ini panduan praktis untuk memulai dan mengoptimalkan penggunaan Docker.
📦 Apa Itu Docker?
Docker adalah platform containerization yang memungkinkan Anda mengemas aplikasi beserta semua dependenciesnya ke dalam satu unit portable yang disebut container.
Perbedaan kunci dengan Virtual Machine:
- Container — Lightweight, berbagi OS kernel, startup dalam detik
- VM — Full OS per instance, resource intensive, startup dalam menit
🐳 Docker Basics
Dockerfile
Blueprint untuk membuat Docker image:
# Multi-stage build untuk Node.js app
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
RUN npm run build
FROM node:20-alpine AS runner
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
EXPOSE 3000
CMD ["node", "dist/server.js"]
Docker Compose
Orkestrasi multiple containers:
version: '3.8'
services:
app:
build: .
ports:
- "3000:3000"
environment:
- DATABASE_URL=postgresql://user:pass@db:5432/mydb
depends_on:
- db
- redis
db:
image: postgres:16-alpine
volumes:
- pgdata:/var/lib/postgresql/data
environment:
- POSTGRES_DB=mydb
- POSTGRES_USER=user
- POSTGRES_PASSWORD=pass
redis:
image: redis:7-alpine
volumes:
pgdata:
🔧 Best Practices
1. Image Optimization
- Gunakan alpine base images (ukuran lebih kecil)
- Multi-stage builds — Pisahkan build dan runtime
- Layer caching — Urutkan COPY commands dari yang jarang berubah ke sering berubah
.dockerignore— Exclude node_modules, .git, logs
2. Security
- Jangan jalankan container sebagai root
- Scan images untuk vulnerabilities (Trivy, Snyk)
- Pin specific versions, hindari
latesttag - Gunakan read-only filesystem jika memungkinkan
3. Networking
- Gunakan Docker networks untuk isolasi antar services
- Jangan expose port yang tidak diperlukan
- Gunakan service names sebagai hostname antar container
🚀 Production Deployment
Untuk production, pertimbangkan:
- Docker Swarm — Simple orchestration built-in Docker
- Kubernetes — Full-featured orchestration untuk skala besar
- AWS ECS / Google Cloud Run — Managed container services
💡 Tips Praktis
docker system prune— Bersihkan unused images dan containersdocker stats— Real-time resource usage monitoringdocker logs -f— Follow container logs- Health checks — Definisikan di Dockerfile atau Compose
- Volume mounts — Untuk persistent data dan development hot-reload

