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.
services:
api:
build: .
environment:
- CACHE_HOST=cache
- DB_HOST=database
cache:
image: redis:7
database:
image: postgres:16
environment:
- POSTGRES_PASSWORD=sekretpackage 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