Prinsip Utama Containerization
Containerization adalah metode virtualisasi tingkat sistem operasi yang membungkus kode aplikasi beserta dependensinya ke dalam satu unit standar (container). Praktik terbaik berfokus pada minimalisasi ukuran image, keamanan runtime, dan orkestrasi yang efisien untuk memastikan aplikasi berjalan konsisten di lingkungan pengembangan hingga produksi.
1. Optimasi Image Docker
Gunakan base image yang minimalis seperti alpine atau distroless untuk mengurangi permukaan serangan (attack surface) dan mempercepat waktu deployment. Hindari penggunaan tag latest dalam produksi; gunakan versi spesifik (misal: node:20.11.0-alpine) untuk menjamin stabilitas.
# Contoh Dockerfile efisien
FROM node:20.11.0-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
FROM node:20.11.0-alpine
WORKDIR /app
COPY --from=builder /app/dist ./dist
USER node
CMD ["node", "dist/main.js"]2. Keamanan dan Isolasi
Jangan pernah menjalankan proses container sebagai root. Gunakan instruksi USER di dalam Dockerfile untuk membatasi hak akses. Selain itu, terapkan prinsip least privilege pada runtime Kubernetes dengan menggunakan SecurityContext.
| Aspek | Praktik Buruk | Praktik Terbaik |
|---|---|---|
| User | Running as root | Running as non-root user |
| Image Tag | latest | Semantic Versioning (SemVer) |
| Layer | Banyak layer RUN | Multi-stage build |
| Secrets | Hardcoded di ENV | Kubernetes Secrets/Vault |
3. Strategi Orkestrasi
Dalam lingkungan Kubernetes, pastikan setiap container memiliki batasan sumber daya (Resource Quotas) yang jelas. Tanpa requests dan limits, satu container yang mengalami kebocoran memori dapat menjatuhkan seluruh node dalam cluster.
4. Observability dan Logging
Container bersifat ephemeral (sementara). Jangan menyimpan log di dalam container. Gunakan standar stdout dan stderr agar log dapat dikumpulkan oleh sistem eksternal seperti ELK Stack (Elasticsearch, Logstash, Kibana) atau Prometheus/Grafana untuk metrik performa.
Tips Troubleshooting Lapangan
- Gunakan
docker system prunesecara berkala untuk membersihkan dangling images dan volume yang tidak terpakai. - Terapkan
.dockerignoreuntuk mencegah file sensitif seperti.gitatau.envmasuk ke dalam image. - Gunakan
read-only root filesystemuntuk meningkatkan keamanan container di lingkungan produksi.