"The Why and How" - Perkenalan & Filosofi Docker Swarm
5 min read

1. Kenapa Docker Swarm Tercipta? (The "Why")
Dulu, Docker hanya bisa berjalan di satu komputer. Jika trafik membludak atau server mati, selesailah riwayat aplikasi kita. Docker Swarm diciptakan sebagai jawaban atas kerumitan orkestrasi kontainer.
Swarm vs Kubernetes: Sebuah Perbandingan Jujur
Jika kita bandingkan keduanya, perbedaannya sangat mencolok:
Kubernetes (K8s): Ibarat sebuah kota metropolitan yang canggih. Anda punya polisi (monitoring), pemadam kebakaran (auto-healing), dan sistem transportasi yang sangat rumit. Tapi, Anda butuh tim ahli untuk mengurus administrasinya setiap hari.
Docker Swarm: Ibarat sebuah perumahan yang tertata rapi. Semua fitur penting sudah ada (Load Balancing, Scaling, High Availability) tanpa perlu pusing dengan konfigurasi yang berlembar-lembar. Jika kita sudah mengerti Docker Compose, kita sudah 90% mengerti Swarm.
2. Teknologi di Docker Swarm: Bagaimana Mereka Saling Bicara?
Mungkin kita bertanya, "Bagaimana server-server ini bisa kompak?" Ada dua teknologi utama yang menjadi "nyawa" di balik Docker Swarm:
A. Raft Consensus Algorithm
Bayangkan para Manager sedang duduk di meja bundar. Agar kluster tetap stabil, mereka harus punya satu pemimpin (Leader). Raft adalah protokol yang mereka gunakan untuk melakukan "voting". Jika Leader pingsan, Manager yang lain akan langsung berdiskusi dan memilih pemimpin baru dalam hitungan milidetik agar sistem tidak lumpuh.
B. Gossip Protocol
Seperti namanya (Gosip), ini adalah cara para Worker menyebarkan informasi. Mereka saling membisikkan status kesehatan satu sama lain secara cepat. Jadi, jika ada satu kontainer yang mati di pojok sana, kabar tersebut akan menyebar secepat kilat ke seluruh kluster sehingga Manager bisa segera mengambil tindakan.

C. Overlay Network & VXLAN
Secara fisik, server kita mungkin terpisah-pisah, namun Swarm menggunakan teknologi VXLAN untuk menciptakan Overlay Network.
Analoginya: Seperti membangun terowongan rahasia di bawah tanah yang menghubungkan gedung-gedung berbeda.
Kontainer di Server A bisa mengobrol dengan kontainer di Server B seolah-olah mereka berada di dalam satu kabel yang sama, tanpa Anda perlu repot mengatur IP publik atau rute jaringan yang rumit.
D. Ingress Routing Mesh & Internal DNS
Inilah teknologi yang membuat pengelolaan trafik menjadi sangat mudah:
Ingress Mesh: Membuat Anda bisa mengakses aplikasi melalui IP server mana pun di dalam kluster. Jika aplikasi ada di Server B tapi Anda mengakses IP Server A, Swarm akan otomatis meneruskannya ke tempat yang benar.
Service Discovery (Internal DNS): Anda tidak perlu menghafal IP kontainer yang sering berubah. Cukup panggil nama layanannya (misal:
http://backend), dan DNS internal Swarm akan mencarikan kontainer mana yang sedang aktif dan sehat untuk Anda.
3. Glosarium Docker Swarm:
Agar tidak bingung, mari kita pelajari bahasa "keren" Docker Swarm:
Manager Node: "Otak" dari kluster. Ia yang menerima perintah Anda dan membagi tugas ke server lain.
Worker Node: "Buruh" pelaksana. Tugasnya hanya menjalankan kontainer aplikasi Anda tanpa ikut campur urusan administrasi.

Service: Definisi dari aplikasi kita. Misal: "Saya mau menjalankan backend dengan 3 replika". Definisi inilah yang disebut Service.
Task: Unit terkecil dalam Swarm. Jika Service minta 3 replika, maka akan ada 3 Task yang berjalan.
Ingress Mesh: Fitur sakti yang membuat kita bisa mengakses aplikasi dari IP server mana saja di dalam kluster, dan trafiknya akan otomatis diarahkan ke server yang benar.
4. Perintah Docker Swarm
Berikut adalah daftar perintah Docker Swarm wajib bagi kita ketahui:
1. Pengelolaan Kluster (Node Management)
Digunakan untuk mengatur server-server (Manager & Worker) yang tergabung dalam kluster.
docker swarm init --advertise-addr <IP>: Inisialisasi Manager pertama.docker swarm join-token worker: Menampilkan perintah/token agar server lain bisa bergabung sebagai Worker.docker swarm join-token manager: Menampilkan perintah/token agar server lain bisa bergabung sebagai Manager baru.docker node ls: Melihat daftar semua server di kluster beserta statusnya (Leader, Reachable, atau Ready).docker node update --availability drain <NODE_ID>: Menghentikan kontainer di node tertentu (berguna saat mau maintenance server tanpa mematikan layanan).docker node rm <NODE_ID>: Menghapus node dari kluster (pastikan node sudah down atau sudah di-drain).
2. Pengelolaan Stack (High-Level Deployment)
Ini adalah cara kita men-deploy aplikasi secara utuh menggunakan file docker-stack.yml.
%%[jagohosting2-mdrdani]
docker stack deploy -c <FILE.yaml> <NAMA_STACK>: Deploy atau update aplikasi ke kluster.docker stack ls: Melihat daftar semua aplikasi (stack) yang sedang berjalan.docker stack services <NAMA_STACK>: Melihat status service di dalam stack (jumlah replika yang jalan vs diminta).docker stack ps <NAMA_STACK>: Melihat secara detail kontainer mana jalan di server mana.docker stack rm <NAMA_STACK>: Menghapus seluruh stack (mematikan semua layanan terkait).
3. Pengelolaan Service (Granular Control)
Digunakan jika kita ingin mengatur satu layanan spesifik tanpa menyentuh seluruh stack.
docker service ls: Melihat semua layanan yang berjalan di seluruh kluster.docker service ps <NAMA_SERVICE>: Cek status spesifik satu layanan (misalgodocapi_backend).docker service logs -f <NAMA_SERVICE>: Melihat log aplikasi secara real-time dari seluruh node sekaligus.docker service scale <NAMA_SERVICE>=<JUMLAH>: Menambah atau mengurangi jumlah kontainer secara instan tanpa edit file YAML.docker service update --image <IMAGE:TAG> <NAMA_SERVICE>: Mengupdate versi aplikasi (image) secara manual.docker service inspect --pretty <NAMA_SERVICE>: Melihat detail konfigurasi layanan (port, environment, dll) dalam format yang mudah dibaca.
4. Troubleshooting & Pemeliharaan
Perintah penyelamat saat aplikasi kita mulai bertingkah aneh.
docker system df: Melihat penggunaan disk (penting karena Docker sering menyisakan image sampah).docker system prune -a: Menghapus container, network, dan image yang tidak terpakai (gunakan dengan hati-hati!).docker network ls: Melihat daftar network, cari yang bertipeoverlayuntuk komunikasi antar server.docker stats: Memantau penggunaan CPU dan RAM kontainer di server lokal secara real-time.
Kesimpulan
Docker Swarm adalah pilihan paling "waras" untuk tim kecil yang ingin mengejar target High Availability tanpa harus pusing dengan kurva belajar Kubernetes yang curam. Ia ringan, cepat, dan sudah ada di dalam instalasi Docker kita.
Di artikel berikutnya, kita akan langsung praktek membangun kluster pertama. Siapkan minimal dua server (Manager & Worker) dan mari kita mulai petualangan ini!
%%[nihbuatjajan2-mdrdani]
