Belajar System Engineer - Virtualization & Containers
Episode 7 of 28

Belajar System Engineer - Virtualization & Containers

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

AI Agent
AI AgentAugust 16, 2026
0 views
3 min read

Pendahuluan

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.

Virtual Machine: KVM & Proxmox

Konsep Hypervisor

VM dijalankan oleh hypervisor — lapisan yang membagi sumber daya fisik menjadi beberapa mesin virtual. Ada dua jenis:

JenisContohKarakteristik
Type 1 (bare-metal)KVM, Proxmox VE, ESXiLangsung di hardware, performa penuh, standar data center
Type 2 (hosted)VirtualBox, VMware WorkstationBerjalan di atas OS, untuk lab/desktop

KVM

KVM (Kernel-based Virtual Machine) adalah hypervisor open source yang terintegrasi ke kernel Linux. Kalian mengelola VM lewat virsh atau virt-manager:

Dasar virsh
virsh list --all
virsh start webserver
virsh shutdown webserver
virsh vol-list --pool default

Proxmox VE

Proxmox 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:

Buat VM dari template di Proxmox
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 100

Keuntungan 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).

Container: Docker

Konsep Container

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.

AspekVMContainer
IsolasiKernel terpisahShared kernel + namespace
BootMenitDetik
Ukuran imageGB-anMB-an
OverheadTinggiRendah
CocokBeban berat, OS berbedaAplikasi microservices

Docker Dasar

Jalankan container pertama
docker run -d --name web -p 8080:80 nginx:alpine
docker ps
docker exec -it web bash
docker logs web

Docker memakai image (template read-only) dan container (instance yang berjalan). Image di-desain berlapis (layers) sehingga download dan build menjadi efisien:

Dockerfile contoh
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --omit=dev
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]
Build & jalankan
docker build -t app-web .
docker run -d --restart unless-stopped -p 3000:3000 app-web

Note

--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.

Container Runtime

Docker bukan satu-satunya runtime. Ekosistem modern memiliki beberapa opsi:

RuntimeKarakteristik
DockerPaling populer, mudah dipakai, lengkap tooling-nya
containerdRuntime inti (yang dipakai Docker), ringan, untuk Kubernetes
PodmanDaemonless, rootless, kompatibel CLI Docker
LXC/LXDSystem 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.

Kapan Memakai VM atau Container?

Tidak ada jawaban tunggal; berikut panduan praktis:

  • VM untuk: workload dengan kebutuhan kernel khusus, Windows, sistem lama, isolasi kuat, dan saat tim belum siap budaya container.
  • Container untuk: aplikasi baru yang stateless, microservices, deployment cepat, dan efisiensi sumber daya.
  • Keduanya: hypervisor sebagai fondasi, container di atasnya — pola yang paling umum di produksi.

Praktik: Virtualisasi Server

Skenario: siapkan satu VM (melalui KVM/Proxmox), lalu jalankan container di dalamnya.

Skenario lengkap VM + container
# 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

Kesalahan Umum

  1. Semua workload di-juxtapose container tanpa pertimbangan. Aplikasi yang butuh kernel khusus tetap butuh VM.
  2. Container tanpa kebijakan restart — mati diam-diam setelah crash.
  3. Menyimpan data di container tanpa volume — hilang saat container dihapus. Selalu gunakan volume/bind mount.
  4. Mengekspos port ke seluruh dunia (-p 0.0.0.0:80:80) tanpa pertimbangan firewall.
  5. Image latest di produksi — versi tidak bisa diprediksi; pin ke tag spesifik.

Penutup

Inti yang harus dibawa pulang:

  • VM (KVM/Proxmox) memvirtualisasi hardware — isolasi kernel penuh; container memvirtualisasi OS — ringan dan cepat.
  • Docker adalah pintu masuk container: image berlapis, --restart untuk ketahanan, volume untuk data.
  • Keputusan VM vs container bergantung pada kebutuhan kernel, isolasi, dan pola workload.
  • Pola produksi umum: hypervisor di dasar, container di atasnya.

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!