Advertisement

Menerapkan Service Discovery di Docker Swarm – Biar Container Gak Kesasar!

 

“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 nama db, 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!

Post a Comment

0 Comments