GoDasturchi
Production Dockerfile: Operations

Production Dockerfile: Operations

Production Dockerfile: operatsion masalalar

Kursni yakunlash uchun, production'da konteynerni ishga tushirilgandan keyin boshqarishga oid ikkita muhim tushunchani ko'ramiz: sog'lik tekshiruvi (health check) va signallarni to'g'ri qabul qilish.

HEALTHCHECK buyrug'i

Dockerfile
FROM golang:1.22
# ... qurish qadamlari ...

HEALTHCHECK --interval=30s --timeout=3s \
  CMD wget -q --spider http://localhost:8080/health || exit 1

CMD ["./server"]

"Compose Best Practices" darsida docker-compose.yml ichida ko'rgan healthcheckni endi to'g'ridan-to'g'ri Dockerfile'ning o'ziga yozish mumkin. Bu buyruq har 30 soniyada /health endpoint'iga ("Health & Readiness Endpoints" darsida yozadigan) so'rov yuboradi — agar javob bo'lmasa, Docker konteynerni "nosog'lom" deb belgilaydi, bu esa orkestratsiya tizimlariga (masalan Kubernetes) "bu konteynerni qayta ishga tushirish kerak" degan signal beradi.

Signallarni to'g'ri qabul qilish

Docker konteynerni to'xtatmoqchi bo'lganda, unga avval SIGTERM signalini yuboradi ("iltimos, muloyimlik bilan to'xta"), va agar dastur belgilangan vaqt (odatda 10 soniya) ichida to'xtamasa, majburiy SIGKILL bilan darhol o'ldiradi. Aynan shu sababli "Graceful Shutdown Basics" va "Production Graceful Shutdown" darslarida (Go Design Patterns kursida) ko'rgan naqsh — SIGTERMni ushlab, hozirgi so'rovlarni tugatib, keyin to'xtash — Docker konteynerlari uchun shart, shunchaki "yaxshi amaliyot" emas: agar dasturingiz SIGTERMga javob bermasa, Docker uni har safar to'xtatishda majburiy SIGKILL bilan o'ldiradi, bu esa tugallanmagan so'rovlar va yo'qolgan ma'lumotlarga olib kelishi mumkin.

Shu kurs davomida ko'rgan hamma narsani birlashtiring: ko'p bosqichli qurish (kichik, xavfsiz image), to'g'ri qatlam tartibi (tez qurish), root bo'lmagan foydalanuvchi (xavfsizlik), health check (kuzatuv) va graceful shutdown (ishonchli to'xtash) — bularning barchasi birgalikda, haqiqiy production'da ishlatiladigan Go konteynerining to'liq "retsepti"ni tashkil qiladi.

Key Takeaway

Key Takeaway:

HEALTHCHECK Docker'ga dastur haqiqatan ishlayotganini bildiradi, va dasturingiz Docker yuboradigan SIGTERM signalini graceful shutdown bilan to'g'ri qabul qilishi shart — aks holda har bir to'xtatish majburiy, ishonchsiz SIGKILL bilan yakunlanadi.

Production Dockerfile: Operations

Production Dockerfile: operatsion masalalar

Kursni yakunlash uchun, production'da konteynerni ishga tushirilgandan keyin boshqarishga oid ikkita muhim tushunchani ko'ramiz: sog'lik tekshiruvi (health check) va signallarni to'g'ri qabul qilish.

HEALTHCHECK buyrug'i

Dockerfile
FROM golang:1.22
# ... qurish qadamlari ...

HEALTHCHECK --interval=30s --timeout=3s \
  CMD wget -q --spider http://localhost:8080/health || exit 1

CMD ["./server"]

"Compose Best Practices" darsida docker-compose.yml ichida ko'rgan healthcheckni endi to'g'ridan-to'g'ri Dockerfile'ning o'ziga yozish mumkin. Bu buyruq har 30 soniyada /health endpoint'iga ("Health & Readiness Endpoints" darsida yozadigan) so'rov yuboradi — agar javob bo'lmasa, Docker konteynerni "nosog'lom" deb belgilaydi, bu esa orkestratsiya tizimlariga (masalan Kubernetes) "bu konteynerni qayta ishga tushirish kerak" degan signal beradi.

Signallarni to'g'ri qabul qilish

Docker konteynerni to'xtatmoqchi bo'lganda, unga avval SIGTERM signalini yuboradi ("iltimos, muloyimlik bilan to'xta"), va agar dastur belgilangan vaqt (odatda 10 soniya) ichida to'xtamasa, majburiy SIGKILL bilan darhol o'ldiradi. Aynan shu sababli "Graceful Shutdown Basics" va "Production Graceful Shutdown" darslarida (Go Design Patterns kursida) ko'rgan naqsh — SIGTERMni ushlab, hozirgi so'rovlarni tugatib, keyin to'xtash — Docker konteynerlari uchun shart, shunchaki "yaxshi amaliyot" emas: agar dasturingiz SIGTERMga javob bermasa, Docker uni har safar to'xtatishda majburiy SIGKILL bilan o'ldiradi, bu esa tugallanmagan so'rovlar va yo'qolgan ma'lumotlarga olib kelishi mumkin.

Shu kurs davomida ko'rgan hamma narsani birlashtiring: ko'p bosqichli qurish (kichik, xavfsiz image), to'g'ri qatlam tartibi (tez qurish), root bo'lmagan foydalanuvchi (xavfsizlik), health check (kuzatuv) va graceful shutdown (ishonchli to'xtash) — bularning barchasi birgalikda, haqiqiy production'da ishlatiladigan Go konteynerining to'liq "retsepti"ni tashkil qiladi.

Key Takeaway

Key Takeaway:

HEALTHCHECK Docker'ga dastur haqiqatan ishlayotganini bildiradi, va dasturingiz Docker yuboradigan SIGTERM signalini graceful shutdown bilan to'g'ri qabul qilishi shart — aks holda har bir to'xtatish majburiy, ishonchsiz SIGKILL bilan yakunlanadi.