Docker Swarm: Orkestrasi Container Secara Native

Dalam pengelolaan aplikasi berbasis container, kita membutuhkan orkestrasi untuk menjalankan container dalam skala besar secara terdistribusi, memastikan load balancing, high availability, dan scaling secara otomatis. Salah satu tool orkestrasi yang disediakan native oleh Docker adalah Docker Swarm.

Docker Swarm adalah mode orkestrasi container yang terintegrasi dalam Docker Engine, memungkinkan kamu mengelola cluster host Docker sebagai satu kesatuan sistem untuk menjalankan container dalam skala besar.

Fitur Utama:

Native Docker: Tidak perlu menginstal tool tambahan.
Load Balancing: Secara otomatis mendistribusikan traffic ke container yang aktif.
Scaling: Mudah menambah/mengurangi jumlah container.
High Availability: Jika satu node mati, service tetap berjalan di node lain.
Rolling Update: Update aplikasi secara bertahap tanpa downtime signifikan.

Struktur Docker Swarm

Swarm memiliki dua jenis node:

  • Manager Node: Mengatur cluster, melakukan scheduling, dan pengelolaan state.
  • Worker Node: Menjalankan container yang dijadwalkan oleh manager.

Membuat Swarm Cluster

1️⃣ Inisialisasi Swarm

Pada node pertama:

docker swarm init --advertise-addr <IP_MANAGER>

Perintah ini akan mengembalikan token untuk menambahkan worker dan manager node ke swarm.

2️⃣ Menambahkan Worker Node

Di server worker, jalankan:

docker swarm join --token <TOKEN_WORKER> <IP_MANAGER>:2377

Untuk menambahkan manager node:

docker swarm join --token <TOKEN_MANAGER> <IP_MANAGER>:2377

3️⃣ Melihat Node Swarm

Di manager node:

docker node ls

Kamu akan melihat semua node yang tergabung dalam cluster swarm.


Membuat dan Mengelola Service di Swarm

Berbeda dengan docker run, di Swarm kita menggunakan service untuk menjalankan container.

Membuat Service

docker service create --name webserver -p 80:80 nginx

Perintah ini akan membuat service webserver menggunakan image nginx, diekspos pada port 80.

Melihat Service

docker service ls

Melihat Detail Task Service

docker service ps webserver

Melakukan Scaling Service

Untuk melakukan horizontal scaling container:

docker service scale webserver=5

Swarm akan secara otomatis mendistribusikan 5 container nginx ke semua node di cluster.


Update Service Secara Rolling Update

Docker Swarm mendukung rolling update agar update container tidak mematikan semua container sekaligus:

docker service update --image nginx:1.25 webserver

Swarm akan menarik image baru dan memperbarui container satu per satu secara bertahap.


Menghapus Service

Untuk menghentikan dan menghapus service:

docker service rm webserver

Kapan Menggunakan Docker Swarm?

Docker Swarm cocok untuk:
✅ Pengelolaan container dalam skala menengah.
✅ Ingin orkestrasi native Docker tanpa kompleksitas Kubernetes.
✅ Butuh load balancing dan auto-recovery dengan setup yang mudah.
✅ Lab belajar orkestrasi sebelum berpindah ke Kubernetes.

Namun, jika kamu membutuhkan ekosistem ekosistem yang lebih luas (service mesh, custom resource, auto-scaling kompleks), Kubernetes mungkin lebih tepat.