GoDasturchi
Compose Service Discovery

Compose Service Discovery

Compose'da servislarni topish

Oldingi darsda server konteyneri db konteyneriga oddiy db nomi orqali ulanishini ko'rgan edik. Bu tasodif emas — Docker Compose har bir servisga, uning nomiga mos, avtomatik DNS yozuvi beradi. Buni maktabdagi sinf jurnaliga o'xshating: har bir o'quvchining ismi bor, va ularni chaqirish uchun aniq manzilini (uy raqamini) bilish shart emas — shunchaki ismini aytish kifoya.

docker-compose.yml
services:
  api:
    build: .
    environment:
      - CACHE_HOST=cache
      - DB_HOST=database

  cache:
    image: redis:7

  database:
    image: postgres:16
    environment:
      - POSTGRES_PASSWORD=sekret
config.go
package main

import (
	"fmt"
	"os"
)

func main() {
	cacheHost := os.Getenv("CACHE_HOST") // "cache" - konteyner nomi, IP emas!
	dbHost := os.Getenv("DB_HOST")       // "database"
	fmt.Println(cacheHost, dbHost)
}

api servisi cache va database servislariga ularning nomlari orqali murojaat qiladi — IP-manzil emas, chunki konteynerlar qayta ishga tushganda IP-manzil o'zgarishi mumkin, lekin nom har doim bir xil qoladi. Docker Compose buning ortida o'zining ichki DNS serverini ishlatadi: cache nomiga so'rov kelganda, u avtomatik ravishda cache nomli konteynerning joriy IP-manzilini qaytaradi.

Bu — "Service Discovery Patterns" darsida (Microservices kursida) ko'radigan katta g'oyaning kichik, sodda ko'rinishi: "servislar bir-birini qanday topadi" degan muammoni hal qilishning eng sodda usuli. Katta, ko'p serverli tizimlarda buning uchun Kubernetes yoki maxsus service discovery vositalari ishlatiladi, lekin tamoyil bir xil: doimiy nomlar, o'zgaruvchan manzillar.

Key Takeaway

Key Takeaway:

Docker Compose har bir servisga o'z nomi bilan mos avtomatik DNS beradi — konteynerlar bir-biriga IP-manzil emas, doimiy nom orqali murojaat qiladi, bu esa konteynerlar qayta ishga tushganda ham ulanishni buzmaydi.

NEXT UP

Compose Best Practices

Compose Service Discovery

Compose'da servislarni topish

Oldingi darsda server konteyneri db konteyneriga oddiy db nomi orqali ulanishini ko'rgan edik. Bu tasodif emas — Docker Compose har bir servisga, uning nomiga mos, avtomatik DNS yozuvi beradi. Buni maktabdagi sinf jurnaliga o'xshating: har bir o'quvchining ismi bor, va ularni chaqirish uchun aniq manzilini (uy raqamini) bilish shart emas — shunchaki ismini aytish kifoya.

docker-compose.yml
services:
  api:
    build: .
    environment:
      - CACHE_HOST=cache
      - DB_HOST=database

  cache:
    image: redis:7

  database:
    image: postgres:16
    environment:
      - POSTGRES_PASSWORD=sekret
config.go
package main

import (
	"fmt"
	"os"
)

func main() {
	cacheHost := os.Getenv("CACHE_HOST") // "cache" - konteyner nomi, IP emas!
	dbHost := os.Getenv("DB_HOST")       // "database"
	fmt.Println(cacheHost, dbHost)
}

api servisi cache va database servislariga ularning nomlari orqali murojaat qiladi — IP-manzil emas, chunki konteynerlar qayta ishga tushganda IP-manzil o'zgarishi mumkin, lekin nom har doim bir xil qoladi. Docker Compose buning ortida o'zining ichki DNS serverini ishlatadi: cache nomiga so'rov kelganda, u avtomatik ravishda cache nomli konteynerning joriy IP-manzilini qaytaradi.

Bu — "Service Discovery Patterns" darsida (Microservices kursida) ko'radigan katta g'oyaning kichik, sodda ko'rinishi: "servislar bir-birini qanday topadi" degan muammoni hal qilishning eng sodda usuli. Katta, ko'p serverli tizimlarda buning uchun Kubernetes yoki maxsus service discovery vositalari ishlatiladi, lekin tamoyil bir xil: doimiy nomlar, o'zgaruvchan manzillar.

Key Takeaway

Key Takeaway:

Docker Compose har bir servisga o'z nomi bilan mos avtomatik DNS beradi — konteynerlar bir-biriga IP-manzil emas, doimiy nom orqali murojaat qiladi, bu esa konteynerlar qayta ishga tushganda ham ulanishni buzmaydi.

NEXT UP

Compose Best Practices