Go

Docker & Containerization

Dockerfile, multi-stage build, image optimizasyonu, docker-compose, container orkestrasyonu

20 mülakat soruları·
Senior
1

Bir Go uygulaması için multi-stage build kullanmanın temel nedeni nedir?

Cevap

Multi-stage build, derleme ortamını son image'dan ayırır. Build aşaması tam Go SDK'sını (birkaç yüz MB) içerirken, son image yalnızca derlenmiş binary'yi içerir. Bu, image boyutunu önemli ölçüde azaltır (~800MB'den birkaç MB'ye) ve üretimde gereksiz build araçlarını ortadan kaldırarak saldırı yüzeyini en aza indirir.

2

Üretimdeki bir Go uygulaması için boyutu ve saldırı yüzeyini en aza indirmek için hangi base image önerilir?

Cevap

scratch image, işletim sistemi içermeyen boş bir image'dır. Go, libc veya diğer sistem bağımlılıklarına ihtiyaç duymayan statik binary'lere derlendiği için scratch kullanılabilir. Bu, mümkün olan en küçük image'ları (birkaç MB) üretir ve istismar edilebilir herhangi bir araç veya shell olmadığı için en iyi güvenliği sağlar. Distroless ve alpine geçerli ancak daha az optimal alternatiflerdir.

3

scratch image ile uyumlu bir binary oluşturmak için hangi Go derleme flag'leri gereklidir?

Cevap

CGO_ENABLED=0, cgo'yu devre dışı bırakarak Go'yu net ve os/user gibi paketler için saf Go uygulamalarını kullanmaya zorlar. Bu olmadan binary, libc'ye dinamik bağımlılıklara sahip olurdu. GOOS ve GOARCH hedef platformu belirtir. Bu flag'lerin birleşimi, harici bağımlılığı olmayan tamamen statik bir binary üretir ve scratch için idealdir.

4

Bir Go uygulaması build edilirken Docker layer önbelleğe alma nasıl optimize edilir?

5

scratch ile karşılaştırıldığında Go için Google Distroless image'larını kullanmanın avantajı nedir?

+17 mülakat soruları

Bir sonraki mülakatın için Go'de uzmanlaş

Tüm sorulara, flashcards'a, teknik testlere, code review alıştırmalarına ve mülakat simülatörlerine eriş.

Ücretsiz başla