1. לפני שמתחילים
Google מספקת כלי עוצמתי ליצירת קובץ אימג' שמאפשר ליצור ולפרסם בקלות קובץ אימג' של קונטיינר של Docker שעברה אופטימיזציה לאפליקציות Java, בלי להשתמש ב-Docker או ב-קובץ Docker. ב-Google Cloud יש גם פתרון בלי שרת (serverless) לקונטיינרים – Cloud Run, פלטפורמת מחשוב מנוהלת שמתאימה באופן אוטומטי את הקונטיינרים בלי שמירת מצב. ב-codelab הזה תראו כמה קל להכניס את אפליקציית Spring Boot Kotlin שלכם לקונטיינר, לפרסם אותה ב-Container Registry ולהריץ את קובץ האימג' ב-Google Cloud בצורה חלקה.
ב-codelab הזה מוסבר איך להגדיר אפליקציה פשוטה ב-Kotlin, שמשתמשת בשירותים ובכלים של Google Cloud, כולל Jib, Container Registry ו-Cloud Run.
דרישות מוקדמות
- היכרות עם שפת התכנות Java ועם כלים
- ידע בכלי עריכת טקסט סטנדרטיים של Linux, כמו Vim, Emacs ו-nano
הפעולות שתבצעו:
- מגדירים אפליקציית Spring Boot Kotlin.
- יצירת קובץ אימג' אופטימלי של Docker.
- מפרסמים את האימג' ב-Container Registry.
- מריצים את האפליקציה בקונטיינר ב-Cloud Run.
הדרישות
- פרויקט ב-Google Cloud
- דפדפן, כמו Google Chrome
2. תהליך ההגדרה
הגדרת סביבה בקצב אישי
- נכנסים אל Cloud Console ויוצרים פרויקט חדש או משתמשים בפרויקט קיים. אם עדיין אין לכם חשבון Gmail או Google Workspace, אתם צריכים ליצור חשבון.



חשוב לזכור את מזהה הפרויקט, שהוא שם ייחודי בכל הפרויקטים ב-Google Cloud (השם שלמעלה כבר תפוס ולא יתאים לכם, מצטערים!). בהמשך ה-codelab הזה נתייחס אליו כאל PROJECT_ID.
- לאחר מכן, תצטרכו להפעיל את החיוב ב-Cloud Console כדי להשתמש במשאבים של Google Cloud.
העלות של התרגול הזה לא אמורה להיות גבוהה, ואולי אפילו לא תצטרכו לשלם בכלל. חשוב לפעול לפי ההוראות בקטע 'ניקוי' כדי להשבית את המשאבים, וכך לא תחויבו אחרי שתסיימו את המדריך הזה. משתמשים חדשים ב-Google Cloud זכאים לתוכנית תקופת ניסיון בחינם בשווי 300$.
Cloud Shell
אפשר להפעיל את Google Cloud מרחוק מהמחשב הנייד, אבל ב-Codelab הזה נשתמש ב-Cloud Shell, סביבת שורת פקודה שפועלת ב-Google Cloud.
הפעלת Cloud Shell
- ב-Cloud Console, לוחצים על Activate Cloud Shell
.

אם זו הפעם הראשונה שאתם מפעילים את Cloud Shell, יוצג לכם מסך ביניים (מתחת לקו הקיפול) עם תיאור של הכלי. במקרה כזה, לוחצים על המשך (והמסך הזה לא יוצג לכם יותר). כך נראה המסך החד-פעמי:

הקצאת המשאבים והחיבור ל-Cloud Shell נמשכים רק כמה רגעים.

המכונה הווירטואלית הזו כוללת את כל הכלים שדרושים למפתחים. יש בה ספריית בית בנפח מתמיד של 5GB והיא פועלת ב-Google Cloud, מה שמשפר מאוד את הביצועים והאימות ברשת. אפשר לבצע את רוב העבודה ב-codelab הזה, אם לא את כולה, באמצעות דפדפן או Chromebook.
אחרי שמתחברים ל-Cloud Shell, אמור להופיע אימות שכבר בוצע ושהפרויקט כבר הוגדר לפי מזהה הפרויקט.
- מריצים את הפקודה הבאה ב-Cloud Shell כדי לוודא שעברתם אימות:
gcloud auth list
פלט הפקודה
Credentialed Accounts
ACTIVE ACCOUNT
* <my_account>@<my_domain.com>
To set the active account, run:
$ gcloud config set account `ACCOUNT`
- מריצים את הפקודה הבאה ב-Cloud Shell כדי לוודא שפקודת gcloud מכירה את הפרויקט:
gcloud config list project
פלט הפקודה
[core] project = <PROJECT_ID>
אם לא, אפשר להגדיר אותו באמצעות הפקודה הבאה:
gcloud config set project <PROJECT_ID>
פלט הפקודה
Updated property [core/project].
3. אתחול אפליקציית Spring Boot
- יוצרים אפליקציית Spring Boot חדשה באמצעות Spring Initializr.
$ curl https://start.spring.io/starter.tgz \
-d language=kotlin \
-d dependencies=web \
-d baseDir=kotlin-jib-cloud-run | tar -xzvf -
שימו לב: Initializr יוסיף אוטומטית את spring-boot-starter-web לתלות שלכם ב-pom.xml של אפליקציית התבנית.
- עוברים לספרייה של אפליקציית התבנית.
$ cd kotlin-jib-cloud-run
- מפתחים ומריצים את האפליקציה באמצעות Maven.
$ ./mvnw -DskipTests spring-boot:run
- אחרי ההפעלה, האפליקציה תתחיל להאזין ביציאה 8080. לוחצים על תצוגה מקדימה של אתר
בסרגל הכלים של Cloud Shell ובוחרים באפשרות תצוגה מקדימה ביציאה 8080 כדי לגשת לאפליקציה.

- צריך לקבל תשובה 404 כי האפליקציה עדיין לא עושה משהו שימושי. להפסיק את השימוש באפליקציה באמצעות
Control+C.
4. הוספת בקר אינטרנט
- יוצרים את המחלקה
Controllerהבאה בחבילת ההדגמה:
$ vi src/main/kotlin/com/example/demo/Controller.kt
or
$ nano src/main/kotlin/com/example/demo/Controller.kt
src/main/kotlin/com/example/demo/Controller.kt
package com.example.demo
import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.RestController
@RestController
class Controller {
@GetMapping("/")
fun saySomething(): String {
return "Kotlin app on Cloud Run, containerized by Jib!"
}
}
- מבצעים בנייה מחדש של האפליקציה ומריצים אותה.
$ ./mvnw spring-boot:run
- בודקים שוב את האפליקציה באמצעות תצוגה מקדימה של אתר
. הפעם אמורה להופיע ההודעה Kotlin app on Cloud Run, containerized by Jib!. מפסיקים את האפליקציה באמצעותControl+C.
5. העברת האפליקציה לקונטיינר ופרסום ב-Container Registry
עם Jib, אתם יכולים להוסיף את האפליקציה שלכם לקונטיינר בצורה אופטימלית בלי Docker ולפרסם אותה בכל מאגר קונטיינרים.
- לפני שממשיכים, צריך להפעיל את Container Registry API. צריך לעשות את זה רק פעם אחת לכל פרויקט כדי שה-API יהיה נגיש.
$ gcloud services enable containerregistry.googleapis.com
- מריצים את Jib כדי ליצור קובץ אימג' של Docker ולפרסם אותו ב-Container Registry.
$ ./mvnw com.google.cloud.tools:jib-maven-plugin:3.1.1:build \
-Dimage=gcr.io/$GOOGLE_CLOUD_PROJECT/kotlin-jib-cloud-run
בסופו של דבר תופיע ההודעה הבאה, שמציינת שהאפליקציה הוכנסה לקונטיינר והועברה ל-Container Registry.
[INFO] Built and pushed image as gcr.io/PROJECT_ID/kotlin-jib-cloud-run ... [INFO] BUILD SUCCESS
אם מופיעה שגיאה, בודקים שוב אם $GOOGLE_CLOUD_PROJECT מוגדר בצורה נכונה למזהה הפרויקט ב-Google Cloud (PROJECT_ID).
- לפני שממשיכים, בודקים שהתמונה פורסמה בהצלחה. חוזרים אל מסוף Cloud, לוחצים על תפריט הניווט
ובוחרים באפשרות Container Registry.


תראו שהתמונה פורסמה בהצלחה.

6. הפעלת האפליקציה בקונטיינר ב-Cloud Run
Cloud Run מאפשר להריץ קונטיינרים בלי שרת, ומתאים את גודל הקונטיינרים בלי שמירת מצב באופן אוטומטי.
- לוחצים שוב על תפריט הניווט
ובוחרים באפשרות Cloud Run.

אם זו הפעם הראשונה שאתם ניגשים ל-Cloud Run, תופיע תיבת הדו-שיח הבאה להגדרה חד-פעמית. אם הכפתור Start Using Cloud Run (התחלת השימוש ב-Cloud Run) מופיע, לוחצים עליו.

- בדף Cloud Run, לוחצים על יצירת שירות.

- במסך הבא, לוחצים על בחירה בקטע מקור. המקור הוא האימג' שרוצים להפעיל ב-Cloud Run.

- בתיבת הדו-שיח תוצג התמונה שיצרתם קודם. בוחרים את התמונה ולוחצים על המשך.

- עכשיו נשאר רק ללחוץ כמה פעמים כדי לפרוס את האפליקציה. בקטע פלטפורמת פריסה, בוחרים באפשרות Cloud Run (מנוהל באופן מלא) כדי שהשירות ינוהל באופן מלא ב-Google Cloud. בוחרים אזור שמתאים למיקום שלכם, מסמנים את התיבה Allow unauthenticated invocations (התרת הפעלות לא מאומתות) ולוחצים על Create (יצירה). זהו!

כשהתמונה נפרסת באופן מלא, בדף Cloud Run מוצגת כתובת URL לגישה לאפליקציה. כדאי לבדוק אותה.

בסיום, תוצג ההודעה שציפיתם לראות מהאפליקציה.
Kotlin app on Cloud Run, containerized by Jib!
זהו! בעתיד, אם תצטרכו לפרוס גרסאות חדשות של האפליקציה, תוכלו לעשות זאת בלחיצה על פריסת גרסה חדשה בדף.
7. הסרת המשאבים
- כדי לנקות את הסביבה, צריך למחוק את האפליקציה שנפרסה ב-Cloud Run ואת האימג' שפורסם ב-Container Registry. עוברים אל Cloud Run, בוחרים את האפליקציה ולוחצים על מחיקה.

- באופן דומה, עוברים לדף Container Registry ומוחקים את האימג'.

8. מזל טוב
מעולה! הצלחתם להכניס את אפליקציית Spring Boot Kotlin לקונטיינר ולפרוס אותה ב-Cloud Run.
השתמשתם ב-Jib כדי ליצור קובץ אימג' אופטימלי של קונטיינר בלי להתקין את Docker או לכתוב Dockerfile, ופרסמתם אותו ב-Container Registry. Jib מבצע אופטימיזציה של בניית תמונות, כך שכל אחד יכול ליצור קונטיינרים לאפליקציות Java במהירות וביעילות, גם אם אין לו ידע מעמיק ב-Docker. אחר כך, בכמה לחיצות, פרסתם את האפליקציה ב-Cloud Run כדי להתחיל להציג אותה במהירות.
מידע נוסף
- פריסת אפליקציית Java ב-Kubernetes ב-Google Kubernetes Engine
- מאמרי העזרה של Cloud Run
- סקירה כללית על Cloud Run
- הכירו את Jib – כלי ליצירת קובצי אימג' של Docker ב-Java
- איך משתמשים ב-Jib, כלי של Google ליצירת קובצי אימג' לאפליקציות Java, כדי ליצור קונטיינרים מהר יותר
- Jib – יצירת קונטיינר לאפליקציית Java
- ערוץ Jib Gitter
- רשימת תפוצה של משתמשי Jib