docker-compose
- Go kursu
- İleri seviye
- Ders 50/68
- 4 dk
docker-compose ile çoklu servis öğrenirsin.
docker-compose
Compose, birden çok konteyneri tek YAML dosyasıyla tanımlar ve birlikte başlatır. Go servisi ve veritabanı:
services:
api:
build: .
ports: ["8080:8080"]
environment:
DATABASE_URL: postgres://app:gizli@db:5432/app?sslmode=disable
depends_on: [db]
db:
image: postgres:16
environment:
POSTGRES_USER: app
POSTGRES_PASSWORD: gizlidocker compose up ikisini aynı ağda başlatır; servis veritabanına db adıyla ulaşır.
depends_on ve hazır olma
depends_on yalnızca başlatma sırasını belirler; veritabanının bağlantı kabul etmeye hazır olduğunu garanti etmez. Ya healthcheck + condition: service_healthy kullanılır ya da Go tarafında Ping yeniden denenir:
for i := 0; i < 10; i++ {
if err = db.Ping(); err == nil {
break
}
time.Sleep(time.Second)
}Uygulama Yeniden deneme
retry(n int, f func() error) error yaz: f'yi en çok n kez dene, başarılı olursa nil döndür, olmazsa son hatayı döndür. Üçüncü denemede başarılı olan bir fonksiyonla dene ve deneme sayısını yazdır.
Başlangıç kodu
package main
import (
"errors"
"fmt"
)
func main() {
// buraya yaz
}Örnek çözüm
package main
import (
"errors"
"fmt"
)
func retry(n int, f func() error) error {
var err error
for i := 0; i < n; i++ {
if err = f(); err == nil {
return nil
}
}
return err
}
func main() {
deneme := 0
err := retry(5, func() error {
deneme++
if deneme < 3 {
return errors.New("hazır değil")
}
return nil
})
fmt.Println(deneme, err)
}Beklenen çıktı
3 <nil>
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 api konteyneri veritabanına hangi adresle bağlanır?
- localhost:5432
- 127.0.0.1:5432
- postgres.local:5432
- db:5432 Doğru cevap
Açıklama: Compose servis adlarını ağ içinde DNS adı yapar; konteyner içinde localhost konteynerin kendisidir.
2 Port eşleme
services:
api:
build: .
____: ["8080:8080"]
services:
api:
build: .
ports: ["8080:8080"]
Açıklama: ports, ana makinedeki portu konteynerin portuna yönlendirir.
3 Compose anahtarları
| Kavram | Anlamı |
|---|---|
build |
Dockerfile'dan imaj |
image |
Hazır imaj |
environment |
Ortam değişkenleri |
depends_on |
Başlatma sırası |