Docker & Containerization: Panduan Praktis

Docker & Containerization: Panduan Praktis

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 latest tag
  • 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 containers
  • docker stats โ€” Real-time resource usage monitoring
  • docker logs -f โ€” Follow container logs
  • Health checks โ€” Definisikan di Dockerfile atau Compose
  • Volume mounts โ€” Untuk persistent data dan development hot-reload