CodeBlanks Logo Icon CodeBlanks

scratch imaj

  • Go kursu
  • İleri seviye
  • Ders 49/68
  • 4 dk

scratch tabanlı minimal imajı öğrenirsin.

scratch imaj

scratch tamamen boş bir taban imajdır: kabuk, paket yöneticisi, hatta /etc bile yoktur. Statik derlenmiş bir Go ikilisi için yeterlidir ve imaj neredeyse ikilinin boyutu kadardır.

FROM scratch
COPY --from=builder /out/app /app
COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
ENTRYPOINT ["/app"]

HTTPS isteği yapacaksan CA sertifikalarını da kopyalamalısın.

distroless ve saat dilimi

gcr.io/distroless/static scratch'e çok yakındır ama CA sertifikaları, /etc/passwd ve root olmayan bir kullanıcı içerir. Saat dilimi verisi gerekiyorsa Go'ya gömülebilir:

import _ "time/tzdata"  // ~450 KB saat dilimi verisi ikiliye eklenir

Böylece time.LoadLocation("Europe/Istanbul") boş imajda da çalışır.

Uygulama Gömülü saat dilimi

_ "time/tzdata" içe aktar. time.LoadLocation("Europe/Istanbul") ile konumu yükle; hata yoksa konumun String() değerini yazdır.

Başlangıç kodu

main.go
package main

import (
    "fmt"
    "time"
)

func main() {
    // buraya yaz
}

Örnek çözüm

main.go
package main

import (
    "fmt"
    "time"
    _ "time/tzdata"
)

func main() {
    loc, err := time.LoadLocation("Europe/Istanbul")
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(loc.String())
}

Beklenen çıktı

Europe/Istanbul

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 scratch tabanlı konteynerde <code>docker exec -it app sh</code> neden çalışmaz?

  • İmajda kabuk (sh) yoktur Doğru cevap
  • Port kapalıdır
  • Go ikilisi engeller
  • Kullanıcı root değildir

Açıklama: scratch yalnızca senin kopyaladığın dosyaları içerir; bu saldırı yüzeyini küçültür ama hata ayıklamayı zorlaştırır.

2 Boş taban

Soru
FROM ____
COPY --from=builder /out/app /app
Cevap
FROM scratch
COPY --from=builder /out/app /app

Açıklama: scratch Docker'ın özel boş imajıdır; içinde hiçbir dosya yoktur.

3 Taban imajlar

Kavram Anlamı
golang Derleyici dahil, büyük
alpine Küçük, kabuklu
distroless Kabuksuz, sertifikalı
scratch Tamamen boş

İleri seviye bölümündeki tüm dersler