0Pricing
Go Academy · Ders

Go için Çok Aşamalı Docker Derlemeleri

scratch/alpine son imajıyla derleyici aşaması

Go için Çok Aşamalı Docker Derlemeleri, CoddyKit'te ücretsiz bir Go Academy dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Go Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Go Academy kursu toplamda 4 dersten oluşur.

Neden çok aşamalı derleme

Go kodunu derleyen tek aşamalı bir derleme, tam Go araç zincirini içeren büyük bir imaj üretir. Çok aşamalı derlemeler bir aşamada derleme yapar ve yalnızca ikiliyi en küçük son imaja kopyalar.

Temel çok aşamalı Dockerfile

Derleme aşaması ikiliyi derler; son aşama bunu en küçük temel imaja kopyalar:

FROM golang:1.22-alpine AS build
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 GOOS=linux go build -ldflags="-s -w" -o myapp ./cmd/server

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

FROM scratch

FROM scratch imajı hiçbir şey içermez; kabuk ve OS kitaplıkları yoktur. Go ikilisi statik olarak bağlanmalı (CGO_ENABLED=0) ve gereken tüm dosyaları açıkça içermelidir.

FROM distroless

Google'ın distroless imajları, kabuk olmadan en az düzeyde OS kitaplıkları (CA sertifikaları, saat dilimi verileri) sağlar; libc veya TLS sertifikalarına ihtiyaç duyan ikililer için scratch'ten daha güvenlidir.

FROM gcr.io/distroless/static-debian12
COPY --from=build /app/myapp /
ENTRYPOINT ["/myapp"]

Kabuk için FROM alpine

Hata ayıklama için kabuğa ihtiyacınız varsa veya ikili CGO kullanıyorsa son temel olarak Alpine kullanın. Alpine yaklaşık 5 MB ekler; ancak kabuk ve paket yöneticisi içerir.

go.mod için katman önbelleğe alma

Önce go.mod ve go.sum dosyalarını kopyalayın, kaynak kodunu kopyalamadan önce go mod download komutunu çalıştırın. Bu katman, bağımlılıklar değişene kadar önbelleğe alınır ve yeniden derlemeleri hızlandırır.

COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN go build ...

-ldflags="-s -w"

-s sembol tablosunu, -w ise DWARF hata ayıklama bilgilerini kaldırır. Birlikte, çalışma zamanını etkilemeden ikili boyutunu %30-50 azaltırlar.

Derleme bağımsız değişkenleri

Derleme sırasında sürüm bilgisi eklemek için ARG kullanın:

ARG VERSION=dev
RUN go build -ldflags="-X main.version=${VERSION}" -o myapp .

root olmayan kullanıcı

Güvenlik için ikiliyi root olmayan bir kullanıcı olarak çalıştırın. Bir temel imaja kullanıcı ekleyin veya distroless'ın nonroot etiketini kullanın:

FROM gcr.io/distroless/static-debian12:nonroot

Son imaj boyutu

scratch'ten oluşturulan tipik bir Go ikilisi 5-20 MB boyutundadır. Alpine yaklaşık 5 MB ekler. Tam bir golang imajı yaklaşık 800 MB'tır. Çok aşamalı derlemeler saldırı yüzeyini ve imaj çekme süresini önemli ölçüde azaltır.

.dockerignore

Dosyaları derleme bağlamının dışında bırakmak için bir .dockerignore ekleyin: vendor/, .git/, *.test, *.prof. Bu, Docker derlemesini hızlandırır ve hassas dosyaların dahil edilmesini önler.

.git
vendor
*.test
*.prof
.env

Hızlı Kontrol

Bir FROM scratch Docker imajı için Go ikilisi derlenirken CGO_ENABLED=0 neden ayarlanmalıdır?

Özet: Çok Aşamalı Docker Derlemeleri

Temel noktalar:

  • Derleme aşaması: golang imajı; son aşama: scratch/distroless/alpine
  • Statik ikili için CGO_ENABLED=0 (scratch için gereklidir)
  • Katman önbelleğe alma için önce go.mod dosyasını kopyalayın; daha küçük ikili için -ldflags="-s -w" kullanın
  • .git, vendor ve sınama dosyalarını dışlamak için .dockerignore kullanın

Sıkça Sorulan Sorular

“Go için Çok Aşamalı Docker Derlemeleri” dersi ücretsiz mi?

Evet — “Go için Çok Aşamalı Docker Derlemeleri” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Go Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Go Academy kursu toplamda 4 dersten oluşur.

“Go için Çok Aşamalı Docker Derlemeleri” dersinde ne öğreneceğim?

scratch/alpine son imajıyla derleyici aşaması Go Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Go Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Go Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.

“Go için Çok Aşamalı Docker Derlemeleri” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Go Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Go Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Go için Çok Aşamalı Docker Derlemeleri
  2. Ortam Yapılandırması ve Gizli Bilgiler
  3. Yerel Geliştirme için Docker Compose
  4. Sağlık Denetimleri ve Üretim Ayarları
← Go Academy Sayfasına Dön