Apa itu Docker Swarm?
Ketika aplikasi mulai melayani banyak pengguna, menjalankan container di satu server fisik (single host) memiliki risiko kegagalan tunggal (Single Point of Failure). Jika server tersebut mati, seluruh layanan akan lumpuh.
Docker Swarm adalah platform orkestrasi kontainer bawaan (native clustering) dari Docker engine. Swarm mengubah kumpulan beberapa mesin Docker (disebut Node) menjadi satu sistem virtual terpadu dengan kemampuan:
- High Availability (HA): Menjaga aplikasi tetap aktif meskipun ada server yang mati mendadak.
- Load Balancing Terdistribusi (Ingress Routing Mesh): Meneruskan traffic jaringan ke container yang tepat di seluruh node.
- Self-Healing: Jika container di suatu node mati atau node tersebut offline, Swarm otomatis membuat container pengganti di node lain yang sehat.
- Skalabilitas Mudah: Menambah atau mengurangi jumlah replika container hanya dengan satu baris perintah.
Arsitektur Swarm: Manager vs Worker
Kluster Swarm terdiri dari dua jenis peran node:
- Manager Node: Mengelola status kluster, menjalankan protokol konsensus Raft, menjadwalkan (scheduling) penempatan container, dan melayani API Swarm. Disarankan memiliki jumlah ganjil (1, 3, atau 5 node) untuk toleransi kegagalan quorum.
- Worker Node: Bertugas murni mengeksekusi container/tugas (tasks) yang dialokasikan oleh Manager node.
1. Memulai Kluster (init, join, & token)
Inisialisasi Manager Utama (docker swarm init)
Jalankan perintah ini di server pertama yang ingin kamu jadikan Swarm Manager:
Parameter --advertise-addr menentukan IP antarmuka jaringan yang digunakan manager untuk berkomunikasi dengan node-node lain.
Mendapatkan Token Bergabung (docker swarm join-token)
Jika kamu lupa perintah join atau ingin menambahkan node baru di masa mendatang, jalankan ini di Manager:
Menggabungkan Server Lain ke Kluster (docker swarm join)
Buka terminal di server lain yang ingin digabungkan, lalu tempelkan perintah token yang didapatkan:
Memeriksa Status Semua Node
Jalankan di node Manager:
2. Deploy Aplikasi (docker stack deploy)
Di Docker Swarm, kita tidak menggunakan docker run biasa, melainkan mendefinisikan arsitektur sistem di dalam file docker-compose.yml dengan blok konfigurasi khusus deploy:
Contoh berkas stack-app.yml:
Melakukan Deployment Stack:
3. Manajemen Layanan (docker service)
Jika kamu ingin menjalankan atau memodifikasi satu service mandiri tanpa stack YAML:
4. Skalabilitas Instan (docker service scale)
Kamu bisa menaikkan (scale up) atau menurunkan (scale down) jumlah replika container secara seketika tanpa downtime:
Swarm secara otomatis mencari node yang paling longgar sumber dayanya untuk menempatkan replika-replika baru tersebut.
5. Rolling Update (Upgrade Tanpa Waktu Henti)
Untuk memperbarui versi image aplikasi ke versi baru:
Swarm akan mengupdate kontainer secara bertahap (rolling update) sesuai aturan parallelism dan delay sehingga website tetap online selama pembaruan.
6. Rollback (Kembali ke Kondisi Stabil Sebelumnya)
Jika saat melakukan update aplikasi ditemukan kegagalan (crash/bug baru), kamu dapat langsung mengembalikan status service ke konfigurasi dan versi image sebelumnya:
Jika parameter failure_action: rollback dipasang di file compose, Swarm bahkan akan melakukan rollback secara otomatis jika healthcheck container baru gagal.
7. Pemeliharaan Node & Migrasi Container (node drain)
Ketika satu server worker hendak dimatikan untuk perbaikan perangkat keras, upgrade OS host, atau maintenance:
Apa yang terjadi saat Drain (Migrasi)?
Swarm akan secara elegan mematikan semua container yang sedang berjalan di worker-node-02 dan segera memigrasikan/menjalankannya di node lain yang berstatus active.
Setelah selesai maintenance, kembalikan node agar dapat menerima tugas kembali:
8. Meninggalkan & Membubarkan Swarm (swarm leave)
Keluar dari Kluster (Dijalankan di Worker Node)
Jika server worker hendak dipensiunkan dari kluster:
Menghapus Node dari Daftar Manager
Setelah worker meninggalkan kluster, manager dapat membersihkan catatannya:
Membubarkan Swarm (Dijalankan di Manager Terakhir)
Jika kluster ingin dihentikan sepenuhnya:
Last modified on October 26, 2026