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 eklenirBö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
package main
import (
"fmt"
"time"
)
func main() {
// buraya yaz
}Örnek çözüm
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
FROM ____
COPY --from=builder /out/app /app
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ş |