Memahami dua teknologi yang menjadi fondasi data center modern: virtualisasi mesin dengan KVM/Proxmox dan container dengan Docker, beserta pertimbangan kapan memakai yang mana

Di episode 6 kita mengelola storage; sekarang kita naik satu level dan membahas cara workload modern dijalankan. Tidak ada data center di 2026 yang menjalankan satu aplikasi per mesin fisik. Semua servernya menggunakan virtual machine (VM) dan container — dua teknologi yang memaksimalkan pemanfaatan hardware, mengisolasi workload, dan mempermudah provisioning.
Mengapa episode ini penting? Karena keputusan "VM atau container?" adalah salah satu keputusan arsitektur paling sering dihadapi System Engineer. Episode ini membekali kalian memahami keduanya, kapan memakai yang mana, dan bagaimana mengelolanya di produksi.
VM dijalankan oleh hypervisor — lapisan yang membagi sumber daya fisik menjadi beberapa mesin virtual. Ada dua jenis:
| Jenis | Contoh | Karakteristik |
|---|---|---|
| Type 1 (bare-metal) | KVM, Proxmox VE, ESXi | Langsung di hardware, performa penuh, standar data center |
| Type 2 (hosted) | VirtualBox, VMware Workstation | Berjalan di atas OS, untuk lab/desktop |
KVM (Kernel-based Virtual Machine) adalah hypervisor open source yang terintegrasi ke kernel Linux. Kalian mengelola VM lewat virsh atau virt-manager:
virsh list --all
virsh start webserver
virsh shutdown webserver
virsh vol-list --pool defaultProxmox VE membungkus KVM dengan platform manajemen lengkap: antarmuka web, clustering, snapshot, backup, dan storage terintegrasi. Ini pilihan favorit untuk homelab dan data center kecil-menengah. Alur kerja intinya:
qm create 100 --name web01 --memory 2048 --cores 2 \
--net0 virtio,bridge=vmbr0 --scsi0 local-lvm:20
qm set 100 --ide2 local:iso/ubuntu-24.04.iso,media=cdrom
qm set 100 --boot order=ide2
qm start 100Keuntungan utama VM: isolasi kernel penuh. Setiap VM punya OS sendiri, kernel sendiri, dan bisa menjalankan workload yang tidak cocok untuk container (Windows, aplikasi lama, kebutuhan kernel khusus).
Berbeda dengan VM yang memvirtualisasi hardware, container memvirtualisasi OS. Semua container berbagi kernel host, tetapi setiap container punya filesystem, proses, dan namespace-nya sendiri. Bayangkan VM sebagai rumah-rumah terpisah di satu lahan; container sebagai apartemen dalam satu gedung — lebih ringan, lebih cepat lahir, tapi tetap terisolasi satu sama lain.
| Aspek | VM | Container |
|---|---|---|
| Isolasi | Kernel terpisah | Shared kernel + namespace |
| Boot | Menit | Detik |
| Ukuran image | GB-an | MB-an |
| Overhead | Tinggi | Rendah |
| Cocok | Beban berat, OS berbeda | Aplikasi microservices |
docker run -d --name web -p 8080:80 nginx:alpine
docker ps
docker exec -it web bash
docker logs webDocker memakai image (template read-only) dan container (instance yang berjalan). Image di-desain berlapis (layers) sehingga download dan build menjadi efisien:
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --omit=dev
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]docker build -t app-web .
docker run -d --restart unless-stopped -p 3000:3000 app-webNote
--restart unless-stopped adalah padanan Restart=on-failure di systemd — container akan hidup kembali otomatis setelah crash atau reboot host. Untuk produksi nyata, pertimbangkan --restart on-failure:5 atau kebijakan restart yang lebih eksplisit.
Docker bukan satu-satunya runtime. Ekosistem modern memiliki beberapa opsi:
| Runtime | Karakteristik |
|---|---|
| Docker | Paling populer, mudah dipakai, lengkap tooling-nya |
| containerd | Runtime inti (yang dipakai Docker), ringan, untuk Kubernetes |
| Podman | Daemonless, rootless, kompatibel CLI Docker |
| LXC/LXD | System container, lebih mirip VM ringan |
Untuk operasi production, System Engineer sering memakai containerd + Kubernetes (episode 15). Untuk episode ini, kuasai Docker dulu — konsepnya sama, transferable.
Tidak ada jawaban tunggal; berikut panduan praktis:
Skenario: siapkan satu VM (melalui KVM/Proxmox), lalu jalankan container di dalamnya.
# 1. Di hypervisor: buat & mulai VM web01 (via virsh/qm)
# 2. Di dalam VM: install Docker
sudo apt update
sudo apt install -y docker.io docker-compose-plugin
# 3. Jalankan aplikasi + database via compose
mkdir -p /srv/app && cd /srv/app
cat > docker-compose.yml <<'EOF'
services:
web:
image: nginx:alpine
ports: ["80:80"]
db:
image: postgres:16
environment:
POSTGRES_PASSWORD: secret
volumes: ["pgdata:/var/lib/postgresql/data"]
volumes:
pgdata:
EOF
docker compose up -d
docker compose ps-p 0.0.0.0:80:80) tanpa pertimbangan firewall.latest di produksi — versi tidak bisa diprediksi; pin ke tag spesifik.Inti yang harus dibawa pulang:
--restart untuk ketahanan, volume untuk data.Di episode 8 selanjutnya kita masuk ke jantung produktivitas System Engineer: scripting & automation — Bash/Python, cron, dan otomasi task berulang. Sampai jumpa di episode 8!