GoDasturchi
Production Dockerfile: Optimization

Production Dockerfile: Optimization

Production Dockerfile: optimallashtirish

Xavfsizlikdan tashqari, production Dockerfile tezlik va hajm bo'yicha ham optimallashtirilishi kerak. Buni chamadon yig'ishga o'xshating: sayohatga sayoz ketayotganda faqat kerakli narsalarni olasiz, hamma narsani emas — bu ham yengilroq, ham tezroq tekshiruvdan o'tadi.

1. .dockerignore fayli

.dockerignore
.git
*.md
*_test.go
node_modules/
.env

.gitignorega o'xshab, .dockerignoreCOPY . . chaqirilganda e'tiborsiz qoldiriladigan fayllarni belgilaydi. Test fayllari, hujjatlar, .git tarixi — bularning barchasi yakuniy image uchun keraksiz, faqat qurish vaqtini sekinlashtiradi va image hajmini kattalashtiradi.

2. Kompilyatsiya bayroqlari bilan hajmni kichraytirish

Dockerfile
RUN CGO_ENABLED=0 GOOS=linux go build -ldflags="-s -w" -o server .

CGO_ENABLED=0 — Go dasturini C kutubxonalariga bog'lanmagan holda kompilyatsiya qiladi, bu esa uni scratch kabi "bo'sh" image'larda ishlatish imkonini beradi. -ldflags="-s -w" — kompilyatsiya qilingan fayldan debug ma'lumotini olib tashlaydi, bu binary hajmini sezilarli (ba'zan 30% gacha) kichraytiradi — production'da debug ma'lumoti odatda kerak emas.

3. Qurish keshini CI/CD'da ham ishlatish

"Understanding Docker Layer Caching" darsida ko'rgan qatlam keshlash g'oyasi faqat sizning shaxsiy kompyuteringizda emas, avtomatlashtirilgan qurish tizimlarida (CI/CD, masalan GitHub Actions) ham ishlaydi — agar to'g'ri sozlansa. Bu build vaqtini daqiqalardan soniyalargacha qisqartirishi mumkin, ayniqsa katta jamoalarda kunlik o'nlab marta qurilganda.

Key Takeaway

Key Takeaway:

.dockerignore keraksiz fayllarni chiqarib tashlaydi, CGO_ENABLED=0 va -ldflags="-s -w" binary hajmini kichraytiradi, qatlam keshi esa CI/CD'da ham ishlatilganda qurish vaqtini sezilarli qisqartiradi.

NEXT UP

Production Dockerfile: Operations

Production Dockerfile: Optimization

Production Dockerfile: optimallashtirish

Xavfsizlikdan tashqari, production Dockerfile tezlik va hajm bo'yicha ham optimallashtirilishi kerak. Buni chamadon yig'ishga o'xshating: sayohatga sayoz ketayotganda faqat kerakli narsalarni olasiz, hamma narsani emas — bu ham yengilroq, ham tezroq tekshiruvdan o'tadi.

1. .dockerignore fayli

.dockerignore
.git
*.md
*_test.go
node_modules/
.env

.gitignorega o'xshab, .dockerignoreCOPY . . chaqirilganda e'tiborsiz qoldiriladigan fayllarni belgilaydi. Test fayllari, hujjatlar, .git tarixi — bularning barchasi yakuniy image uchun keraksiz, faqat qurish vaqtini sekinlashtiradi va image hajmini kattalashtiradi.

2. Kompilyatsiya bayroqlari bilan hajmni kichraytirish

Dockerfile
RUN CGO_ENABLED=0 GOOS=linux go build -ldflags="-s -w" -o server .

CGO_ENABLED=0 — Go dasturini C kutubxonalariga bog'lanmagan holda kompilyatsiya qiladi, bu esa uni scratch kabi "bo'sh" image'larda ishlatish imkonini beradi. -ldflags="-s -w" — kompilyatsiya qilingan fayldan debug ma'lumotini olib tashlaydi, bu binary hajmini sezilarli (ba'zan 30% gacha) kichraytiradi — production'da debug ma'lumoti odatda kerak emas.

3. Qurish keshini CI/CD'da ham ishlatish

"Understanding Docker Layer Caching" darsida ko'rgan qatlam keshlash g'oyasi faqat sizning shaxsiy kompyuteringizda emas, avtomatlashtirilgan qurish tizimlarida (CI/CD, masalan GitHub Actions) ham ishlaydi — agar to'g'ri sozlansa. Bu build vaqtini daqiqalardan soniyalargacha qisqartirishi mumkin, ayniqsa katta jamoalarda kunlik o'nlab marta qurilganda.

Key Takeaway

Key Takeaway:

.dockerignore keraksiz fayllarni chiqarib tashlaydi, CGO_ENABLED=0 va -ldflags="-s -w" binary hajmini kichraytiradi, qatlam keshi esa CI/CD'da ham ishlatilganda qurish vaqtini sezilarli qisqartiradi.

NEXT UP

Production Dockerfile: Operations