Asosiy kontentga o‘tish
Innovialabs

Docker konteynerini Google Cloud Run’da qanday joylashtirish mumkin

Amaliyot3 daq

Qisqacha

PORT o‘zgaruvchisidagi portni tinglaydigan obraz yig‘ing, uni Artifact Registry’ga yuklang va gcloud run deploy buyrug‘ini bajaring — Cloud Run konteynerlarni o‘zi ishga tushiradi, HTTPS manzil beradi va noldan masshtablaydi, siz esa asosan so‘rovlarni qayta ishlash vaqti uchun to‘laysiz.

Qisqa javob: bu qanday ishlaydi

Cloud Run — Google Cloud’ning konteynerlar uchun serverless platformasi. Siz unga Docker obrazini berasiz, u esa uni ishga tushiradi, HTTPS manzil beradi, yuklamaga qarab nusxalarni ko‘paytiradi va so‘rovlar bo‘lmaganda ularni nolgacha o‘chiradi.

Koddan ishlaydigan xizmatgacha bo‘lgan yo‘l:

  1. Ilova PORT o‘zgaruvchisidagi portni tinglaydigan Dockerfile.
  2. Obrazni yig‘ish va Artifact Registry’ga yuklash.
  3. gcloud run deploy buyrug‘i.
  4. O‘zgaruvchilar, sirlar, masshtablash va domenni sozlash.

1-qadam. Dockerfile tayyorlang

Asosiy talab — ilova 0.0.0.0 manzilida PORT muhit o‘zgaruvchisidagi portni tinglashi kerak (Cloud Run standart holatda 8080 beradi). Node.js uchun misol:

FROM node:20-slim
WORKDIR /app
COPY package*.json ./
RUN npm ci --omit=dev
COPY . .
ENV NODE_ENV=production
CMD ["node", "server.js"]

Maslahatlar:

  • obrazni ixcham saqlang — bu sovuq startni tezlashtiradi;
  • holatni lokal diskda saqlamang: konteynerning fayl tizimi vaqtinchalik, nusxalar esa bir nechta bo‘lishi mumkin;
  • loglarni stdout va stderr’ga yozing — ular avtomatik ravishda Cloud Logging’ga tushadi.

2-qadam. Obrazni yig‘ing va Artifact Registry’ga yuklang

Kerakli API’larni yoqing va repozitoriy yarating:

gcloud services enable run.googleapis.com artifactregistry.googleapis.com secretmanager.googleapis.com

gcloud artifacts repositories create apps \
  --repository-format=docker --location=europe-west1

gcloud auth configure-docker europe-west1-docker.pkg.dev

Obrazni yig‘ing va yuboring:

docker build --platform linux/amd64 \
  -t europe-west1-docker.pkg.dev/PROJECT_ID/apps/api:v1 .
docker push europe-west1-docker.pkg.dev/PROJECT_ID/apps/api:v1

ARM protsessorli Mac’da yig‘ayotgan bo‘lsangiz, --platform linux/amd64 bayrog‘i muhim. Lokal Docker bo‘lmasa, obrazni bulutda gcloud builds submit --tag <obraz manzili> buyrug‘i bilan yig‘ish mumkin.

3-qadam. Xizmatni joylashtiring

gcloud run deploy api \
  --image=europe-west1-docker.pkg.dev/PROJECT_ID/apps/api:v1 \
  --region=europe-west1 \
  --allow-unauthenticated

Deploydan so‘ng buyruq https://api-....run.app ko‘rinishidagi manzilni chiqaradi. --allow-unauthenticated bayrog‘i xizmatni ochiq qiladi; ichki API’lar uchun uni ko‘rsatmang va kirishni IAM orqali sozlang.

Har bir deploy yangi reviziya yaratadi. Trafikni reviziyalar o‘rtasida taqsimlash va oldingisiga tezda qaytish mumkin.

4-qadam. Muhit o‘zgaruvchilari va sirlar

Oddiy sozlamalarni o‘zgaruvchi sifatida bering:

gcloud run services update api --region=europe-west1 \
  --set-env-vars=APP_ENV=production,LOG_LEVEL=info

Parollar va kalitlarni o‘zgaruvchilar yoki obrazda emas, Secret Manager’da saqlang:

printf 'super-secret' | gcloud secrets create db-password --data-file=-

gcloud run services update api --region=europe-west1 \
  --set-secrets=DB_PASSWORD=db-password:latest

Cloud Run nomidan ishlaydigan servis akkauntiga shu sir uchun Secret Manager Secret Accessor roli kerak.

5-qadam. Concurrency va min instances

  • Concurrency — bitta nusxa bir vaqtda nechta so‘rovni qayta ishlashi. Standart qiymat — 80. Yengil asinxron API’lar uchun uni qoldirish mumkin, og‘ir vazifalar yoki bir oqimli ilovalar uchun esa kamaytiring.
  • Min instances — doim ishlab turadigan nusxalar soni. 1 va undan yuqori qiymat sovuq startni yo‘qotadi, lekin bunday nusxalar bo‘sh turganda ham to‘lanadi.
  • Max instances — kutilmagan hisob va ma’lumotlar bazasining ortiqcha yuklanishidan himoya qiladigan yuqori chegara.
gcloud run services update api --region=europe-west1 \
  --concurrency=40 --min-instances=1 --max-instances=10

6-qadam. O‘z domeningiz

Domenni ulash variantlari:

  • Cloud Run’dagi domain mapping — eng oddiy yo‘l: domen egaligini tasdiqlaysiz, DNS yozuvlarini qo‘shasiz, sertifikat avtomatik chiqariladi. Bu funksiya hamma regionlarda mavjud emas va cheklovlarga ega, shuning uchun hujjatlarni tekshiring.
  • Serverless NEG bilan global Application Load Balancer — prodakshn uchun tavsiya etilgan variant: istalgan regionda ishlaydi, CDN va Cloud Armor’ni qo‘llab-quvvatlaydi.
  • Cloud Run’ga yo‘naltiruvchi Firebase Hosting — frontend ham o‘sha yerda bo‘lsa qulay.

To‘lov qanday tuzilgan

vCPU, xotira va so‘rovlar soni uchun, shuningdek chiquvchi trafik, obrazlarni saqlash va sirlar uchun to‘lanadi. Oylik bepul limit mavjud.

Ikki xil tariflash rejimi:

  • So‘rovlar bo‘yicha — CPU faqat so‘rov qayta ishlanayotgan vaqtda ajratiladi. So‘rovlar bo‘lmasa va min instances nolga teng bo‘lsa, deyarli hech narsa to‘lamaysiz.
  • Nusxalar bo‘yicha — CPU doim ajratilgan, nusxaning butun ishlash vaqti to‘lanadi. So‘rovlar orasida fonda ishlash kerak bo‘lganda zarur.

Xarajatlarni nazorat qilish uchun max instances qiymatini belgilang, ogohlantirishli byudjet sozlang va sovuq start maqbul bo‘lgan joyda min instances ishlatmang.

Ko‘p beriladigan savollar

WebSocket qo‘llab-quvvatlanadi, lekin ulanish so‘rov taymauti bilan cheklangan. Uzoq fon vazifalari uchun HTTP so‘rovsiz ishga tushib, oxirigacha bajariladigan Cloud Run jobs mosroq.

Bunda yordam beramiz

O‘zingiz shug‘ullanmasdan natija olishni istasangiz — biz har kuni shu bilan shug‘ullanamiz.

Loyihani muhokama qilish

Yana o‘qing

G‘oya yoki vazifangiz bormi? Bizga aytib bering

Ish kuni davomida javob beramiz va yechim taklif qilamiz. Konsultatsiya bepul.