בדף הזה מוסבר איך לפרוס שירותים ב-Cloud Run באמצעות קובץ שמבוסס על מפרט Compose.
אפשר לפרוס ל-Cloud Run באמצעות קובץ Compose בדרכים הבאות:
שימוש ב-Compose לפריסה ב-Cloud Run הוא אידיאלי לפיתוח, ומפשט את המעבר מהסביבה המקומית לסביבת ענן. הוא מאפשר לכם לשמור על פורמט הגדרה עקבי גם לאפליקציות המקומיות וגם לאפליקציות שפרסתם.
לניהול סביבות ייצור בסביבת תשתית כקוד (IaC), מומלץ להשתמש ב-Terraform.
מגבלות
- פריסת Compose פורסת שירות יחיד של Cloud Run עם כמה קונטיינרים.
- הפריסה של Compose מתרגמת רק קבוצת משנה של תכונות נתמכות של Cloud Run.
- שירותים שנוצרו באמצעות Compose מוגדרים כברירת מחדל למקסימום של מופע אחד.
- הפריסה של Cloud Run Compose מפשטת את הפריסה, אבל היא לא מחליפה אסטרטגיה מקיפה של תשתית כקוד לסביבות ייצור.
פריסת שירותים מקובצי אימג' של קונטיינרים באמצעות Compose
הגדרת השירותים בקובץ compose.yaml ופריסתם מקובצי אימג' קיימים של קונטיינרים. מידע נוסף זמין במאמר בנושא פריסת תמונות של קונטיינרים.
דוגמה: אפליקציה עם שירות יחיד
בדוגמה הבאה מוצג קובץ compose.yaml לשירות אינטרנט שמשתמש בקובץ אימג' מוכן מראש של קונטיינר.
services:
web:
image: us-docker.pkg.dev/cloudrun/container/hello
ports:
- "8080:8080"
דוגמה: אפליקציה עם כמה קונטיינרים עם Nginx, Flask ו-MongoDB
בדוגמה הבאה מוצג קובץ compose.yaml של אפליקציה עם שרת proxy של Nginx, קצה עורפי של Flask ומסד נתונים של MongoDB.
כדי לפרוס את הדוגמה הזו, צריך ליצור את מבנה הפרויקט הבא:
-
compose.yaml: קובץ ה-Compose שמגדיר את השירותים. -
nginx/nginx.conf: הגדרות לשרת ה-Proxy של Nginx. -
flask/: הספרייה שמכילה את קוד אפליקציית Flask (server.py,Dockerfileו-requirements.txt).
services:
web:
image: nginx
volumes:
- ./nginx/nginx.conf:/tmp/nginx.conf
environment:
- FLASK_SERVER_ADDR=backend:9091
command: /bin/bash -c "envsubst < /tmp/nginx.conf > /etc/nginx/conf.d/default.conf && nginx -g 'daemon off;'"
- 80:80
x-google-cloudrun:
ingress-container: true
depends_on:
- backend
backend:
build:
context: flask
target: builder
stop_signal: SIGINT
environment:
- FLASK_SERVER_PORT=9091
volumes:
- ./flask:/src
depends_on:
- mongo
ports:
- 9091:9091
mongo:
image: mongo
ports:
- 27017:27017
פריסת השירותים
כדי לפרוס את השירותים, מריצים את הפקודה
gcloud run compose up:gcloud run compose up compose.yamlמגיבים
yלכל ההנחיות להתקנת רכיבים נדרשים או להפעלת ממשקי API.אופציונלי: הפיכת השירות לציבורי אם רוצים לאפשר גישה לשירות ללא אימות.
אחרי הפריסה, מוצגת כתובת ה-URL של שירות Cloud Run. מעתיקים את כתובת ה-URL הזו ומדביקים אותה בדפדפן כדי לראות את הקונטיינר הפועל. אפשר להשבית את אימות ברירת המחדל במסוף Google Cloud .
פריסה מקוד המקור באמצעות Compose
מגדירים את השירותים בקובץ compose.yaml ומבצעים פריסה על ידי בנייה מקוד המקור. מידע נוסף מופיע במאמר פריסת שירותים מקוד מקור.
דוגמה: אפליקציה עם שירות יחיד
בדוגמה הבאה מוצג קובץ compose.yaml לשירות אינטרנט שנבנה ממקור בספרייה הנוכחית.
services:
web:
build: .
ports:
- "8080:8080"
פריסת השירותים
בספריית הפרויקט, יוצרים קובץ
compose.yamlעם הגדרות השירות.כדי לפרוס את השירותים, מריצים את הפקודה
gcloud run compose up:gcloud run compose up compose.yamlמגיבים
yלכל ההנחיות להתקנת רכיבים נדרשים או להפעלת ממשקי API.אופציונלי: הפיכת השירות לציבורי אם רוצים לאפשר גישה לשירות ללא אימות.
אחרי הפריסה, מוצגת כתובת ה-URL של שירות Cloud Run. מעתיקים את כתובת ה-URL הזו ומדביקים אותה בדפדפן כדי לראות את הקונטיינר הפועל. אפשר להשבית את אימות ברירת המחדל במסוף Google Cloud .
אילוץ בנייה מחדש
כברירת מחדל, הפריסה של Cloud Run Compose מדלגת על תהליך ה-build אם קוד המקור לא השתנה מאז ה-build האחרון. כדי לכפות בנייה מחדש של שירותים שהוגדרו באמצעות הגדרה build, משתמשים בדגל --build באופן הבא:
gcloud run compose up compose.yaml --build
האפשרות הזו שימושית במיוחד אם מאגר, תמונה או תקציר מרוחקים נמחקו, אבל קוד המקור המקומי נשאר ללא שינוי. הדגלים --build ו---no-build הם בלעדיים הדדית.
תכונות נתמכות
כשפורסים באמצעות קובץ compose.yaml, Cloud Run יכול להקצות באופן אוטומטי משאבים אחרים של Google Cloud כפי שמוגדר בקובץ ה-Compose. אם נדרשים משאבים, Cloud Run יבקש מכם אישור לפני יצירתם.
Cloud Run תומך בקבוצת המשנה הבאה של תכונות Compose:
| שדה הכתיבה | מיפוי ותיאור של Cloud Run |
|---|---|
services |
השירותים ממופים לקונטיינרים נפרדים בשירות Cloud Run שנפרס. |
volumes |
יש תמיכה חלקית. מתרגם את ההגדרות של |
secrets |
יש תמיכה שימוש ב-Secret Manager. |
configs |
יש תמיכה שימוש ב-Cloud Storage. |
build |
יש תמיכה הפקודה יוצרת את הקונטיינר באמצעות הקשר של ה-build, מתייגת אותו ומעבירה אותו בדחיפה למאגר |
image |
פריסת תמונה מוכנה מראש של קונטיינר ממאגר נתמך. משתמשים באפשרות הזו אם יש תמונה מוכנה מראש. תמיכה רק בתמונות של Docker Hub ו-Artifact Registry. אם אתם משתמשים בתמונות בהתאמה אישית, אתם יכולים להעביר אותן בדחיפה ל-Artifact Registry ולהשתמש בהן. |
ports |
רשימה של מיפויי יציאות, כמו |
expose |
רשימה של יציאות לחשיפה אבל לא לפרסום, כמו |
depends_on |
ההגדרה הזו מגדירה את סדר ההפעלה של הקונטיינר. כך מוודאים שלכל שירות שמופיע ברשימה |
cpus |
רמז שמשמש להגדרת מגבלות המעבד והזיכרון ב-Cloud Run, והקצאת משאבים באופן אוטומטי לפי הלוגיקה הבאה:
|
container_name |
מגדיר את שם המאגר לפתרון תלות, ומוגדר כברירת מחדל לשם השירות אם לא צוין. |
environment |
מעבירה משתני סביבה לקונטיינר המתאים ב-Cloud Run. |
command |
המאפיין הזה מחליף את פקודת ברירת המחדל של הקונטיינר, שהוגדרה על ידי הקונטיינר, על ידי מיפוי למאפיין |
entrypoint |
יש תמיכה |
env_file |
יש תמיכה |
x-google-cloudrun:ingress-container |
(Extension) מוסיפים את התוסף הספציפי הזה של Google לשירות ומגדירים אותו ל- |
x-google-cloudrun:volume-type: in-memory |
(תוסף) מוסיפים את התוסף הזה שספציפי ל-Google לנפח אחסון ומגדירים אותו ל- |
סודות שממופים ל-Secret Manager
אם קובץ compose.yaml מגדיר את secrets, ה-CLI של gcloud מקצה סודות של Secret Manager לאחסון הנתונים האלה.
כרכים והגדרות שממופים ל-Cloud Storage
אם בקובץ compose.yaml מוגדרים volumes או configs ברמה העליונה, ה-CLI של gcloud מקצה קטגוריה של Cloud Storage לניהול הנתונים האלה. נוצרת קטגוריה אחת לכל פריסה, והתיקיות משמשות להפרדה בין נפחים והגדרות.
- כרכים עם שם: תיקייה ריקה שמתאימה לשם הכרך נוצרת בקטגוריה.
- טעינת תיקיות: כשמטעינים תיקיות, Cloud Run מעלה את התוכן של תיקיית המקור המקומית לתיקייה בקטגוריה לפני הפריסה.
- Configs: לכל הגדרה שמוגדרת עם מקור
file:, Cloud Run מעלה את התוכן של הקובץ המקומי לתיקייה בדלי.
התפקידים הנדרשים
במהלך הפריסה, Cloud Run מקצה אוטומטית את התפקידים הנדרשים לזהות השירות של השירות שנפרס, כדי לגשת למשאבים שהוקצו:
- Cloud Storage Bucket:
roles/storage.objectUser - Secret Manager Secrets:
roles/secretmanager.secretAccessor
תקשורת בין מאגרים של אותו מופע
Cloud Run מוסיף רשומה לקובץ /etc/hosts בכל קונטיינר. הערך הזה ממפה את שמות השירותים מקובץ compose.yaml לכתובות ה-IP הפנימיות שלהם, וכך מאפשר לשירותים לתקשר ביניהם באמצעות שמות השירותים.