“Kalau hidup ada service discovery, pasti kita gak bakal nyasar pas nyari warung makan malam-malam.”
Dalam Docker Swarm, service discovery itu penting banget!
Bayangin kalau container-container dalam swarm gak bisa saling kenal.
Container database bingung cari backend!
Backend bingung cari frontend!
Frontend malah ngobrol sama container yang gak ada hubungannya!
Solusi? Gunakan service discovery di Docker Swarm!
1. Apa Itu Service Discovery di Docker Swarm?
Service discovery di Docker Swarm adalah mekanisme otomatis yang memungkinkan container menemukan dan berkomunikasi satu sama lain menggunakan nama layanan, tanpa harus tahu alamat IP.
Contoh Kasus:
- Container backend bisa menghubungi database cukup dengan nama db, bukan IP-nya!
- Kalau container mati dan dibuat ulang, layanan lain tetap bisa menemukannya!
- Beban kerja lebih fleksibel, karena container bisa berpindah-pindah tanpa gangguan komunikasi!
2. Membuat Jaringan di Docker Swarm
Supaya service discovery bisa jalan, kita perlu jaringan overlay.
Apa itu overlay network?
Overlay network adalah jaringan virtual yang memungkinkan container di berbagai node bisa berkomunikasi seolah-olah ada di jaringan yang sama!
Buat jaringan overlay:
docker network create --driver overlay my_network
Penjelasan:
--driver overlay
→ Membuat jaringan overlay untuk Swarm.my_network
→ Nama jaringannya (bisa kamu ganti sesuai selera).
3. Deploy Layanan dengan Service Discovery
Sekarang kita deploy database dan backend yang bisa saling berkomunikasi!
Langkah 1: Deploy Database Service
docker service create --name db --network my_network -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=mydb mysql:latest
Penjelasan:
--name db
→ Nama layanan database kita.--network my_network
→ Menghubungkan database ke jaringan overlay.-e MYSQL_ROOT_PASSWORD=root
→ Mengatur password MySQL.-e MYSQL_DATABASE=mydb
→ Membuat database default.mysql:latest
→ Menggunakan image MySQL terbaru.
Sekarang layanan db
bisa diakses di dalam Swarm dengan nama db
, bukan IP!
Langkah 2: Deploy Backend Service
Sekarang, deploy backend yang terhubung ke database!
docker service create --name backend --network my_network -e DB_HOST=db -e DB_USER=root -e DB_PASS=root my-backend:latest
Penjelasan:
--name backend
→ Nama layanan backend kita.--network my_network
→ Backend bergabung dengan jaringan overlay yang sama.-e DB_HOST=db
→ Backend bisa mengakses database cukup dengan namadb
, bukan IP-nya!my-backend:latest
→ Image backend yang kita gunakan.
Sekarang backend bisa langsung ngobrol dengan database tanpa ribet!
Langkah 3: Cek Service Discovery di Docker Swarm
Untuk memastikan service discovery berjalan, kita bisa masuk ke container backend dan mencoba ping database!
1️ Cek container backend yang berjalan:
docker service ps backend
2️ Masuk ke salah satu container backend:
docker exec -it <CONTAINER_ID> sh
3️ Ping database dengan nama db
:
ping db
Jika service discovery berfungsi, seharusnya kita melihat output seperti ini:
PING db (10.0.0.5): 56 data bytes
64 bytes from 10.0.0.5: icmp_seq=1 ttl=64 time=0.021 ms
Selamat! Container backend bisa menemukan database tanpa perlu tahu alamat IP!
4. Apa yang Terjadi di Balik Layar?
Docker Swarm menggunakan DNS internal untuk service discovery.
Artinya, setiap layanan yang kita buat otomatis mendapat entri DNS.
Misalnya:
- Backend bisa mengakses database hanya dengan
db:3306
. - Frontend bisa mengakses backend hanya dengan
backend:5000
.
Gak perlu ribet update IP lagi, semuanya otomatis!
5. Bonus: Menggunakan Docker Compose untuk Service Discovery
Kalau kamu lebih suka pakai Docker Compose, ini contoh file docker-compose.yml
untuk deploy layanan dengan service discovery!
version: '3.8'
services:
db:
image: mysql:latest
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: mydb
networks:
- my_network
backend:
image: my-backend:latest
environment:
DB_HOST: db
DB_USER: root
DB_PASS: root
depends_on:
- db
networks:
- my_network
networks:
my_network:
driver: overlay
Jalankan dengan:
docker stack deploy -c docker-compose.yml my_app
Mudah kan? Semua layanan langsung bisa saling komunikasi tanpa repot setting IP!
Kesimpulan: Service Discovery Itu Wajib!
Gak perlu hardcode IP!
Layanan bisa berpindah-pindah tanpa kehilangan komunikasi!
Scaling jadi lebih fleksibel!
Lebih gampang di-deploy!
Sekarang kamu sudah jago service discovery di Docker Swarm!
Next Step:
- Coba deploy aplikasi real dengan database, backend, dan frontend!
- Eksperimen dengan service discovery dan load balancing di Swarm!
0 Comments