Docker konteynerini Google Cloud Run’da qanday joylashtirish mumkin
Amaliyot3 daqInnovialabs tahririyati
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:
- Ilova
PORTo‘zgaruvchisidagi portni tinglaydigan Dockerfile. - Obrazni yig‘ish va Artifact Registry’ga yuklash.
gcloud run deploybuyrug‘i.- 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.
1va 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.