1. לפני שמתחילים
Google מספקת כלי עוצמתי ליצירת קובצי אימג' של קונטיינרים שמאפשר ליצור ולפרסם בקלות קובץ אימג' של קונטיינר של Docker שעבר אופטימיזציה לאפליקציות Java, בלי Docker או קובץ Docker. ב-Google Cloud יש גם פתרון בלי שרת לקונטיינרים – Cloud Run, פלטפורמת משאבי מחשוב מנוהלת שמתאימה את הקונטיינרים בלי שמירת מצב באופן אוטומטי לעומס. בשיעור Codelab הזה נראה כמה קל להעביר את אפליקציית Spring Boot Kotlin לקונטיינר, לפרסם אותה ב-Container Registry ולהריץ את קובץ האימג' ב-Google Cloud בצורה חלקה.
בשיעור Codelab הזה נסביר איך להגדיר אפליקציה פשוטה ב-Kotlin, שבה נדגים שימוש בשירותים ובכלים של Google Cloud, כולל Jib, Container Registry ו-Cloud Run.
דרישות מוקדמות
- היכרות עם שפת התכנות Java ועם כלים של 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 (יצירה). זהו!

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

בסיום, תוצג ההודעה שציפיתם לראות מהאפליקציה.
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