Multi-Stage Builds
Ko'p bosqichli qurish
Uy qurishni tasavvur qiling: qurilish paytida kranlar, asboblar, quruvchilarning o'zi kerak — lekin uy tayyor bo'lgach, bularning birortasi ham uyning ICHIDA qolmaydi, faqat tayyor devorlar va tomi qoladi. Ko'p bosqichli qurish (multi-stage build) — Docker image'lariga aynan shu tamoyilni qo'llaydi: qurish uchun kerakli "og'ir asboblar"ni yakuniy image'dan olib tashlaydi.
# 1-BOSQICH: qurish (og'ir, Go kompilyatori bilan, ~800MB)
FROM golang:1.22 AS builder
WORKDIR /app
COPY go.mod ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 go build -o server .
# 2-BOSQICH: yakuniy image (juda kichik, ~5MB)
FROM scratch
COPY --from=builder /app/server /server
CMD ["/server"]Birinchi bosqich (AS builder deb nomlangan) — to'liq Go muhitida (kompilyator, barcha vositalar bilan) dasturni kompilyatsiya qiladi. Bu bosqich katta (bir necha yuz megabayt), lekin bu muhim emas, chunki u yakuniy image'ga kirmaydi! Ikkinchi bosqich FROM scratch bilan boshlanadi — bu "mutlaqo bo'sh" image, hech qanday operatsion tizim, hech qanday keraksiz fayl yo'q. COPY --from=builder esa faqat birinchi bosqichdan bitta narsani — tayyor, kompilyatsiya qilingan server faylini — ko'chirib oladi.
Natija: yakuniy image atigi bir necha megabayt (Go'ning o'zi bitta yagona, hech narsaga bog'liq bo'lmagan binary fayl yaratishi — buni "Packages & Organization" kursida ko'rgan edingiz — aynan shu texnikani mumkin qiladi). Kichikroq image — tezroq yuklanadi, kamroq xavfsizlik zaifligiga ega bo'ladi (kompilyator, qurish vositalari kabi keraksiz narsalar yo'qligi sababli), va serverlarda kamroq joy egallaydi. Bu — production Go loyihalarida deyarli har doim ishlatiladigan standart amaliyot.
Key Takeaway
Key Takeaway:
Ko'p bosqichli qurish (FROM ... AS builder + COPY --from=builder) qurish uchun kerakli og'ir vositalarni yakuniy image'dan chiqarib tashlab, uni bir necha megabaytgacha kichraytiradi.
NEXT UP
Environment Variables