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




