Containerizzare un'app Kotlin Spring Boot ed eseguirne il deployment su Cloud Run
Informazioni su questo codelab
1. Prima di iniziare
Google offre un potente strumento di creazione di immagini con cui puoi creare e pubblicare facilmente un'immagine container Docker ottimizzata per le app Java in pochissimo tempo senza Docker o Dockerfile. Google Cloud rende serverless anche i container con Cloud Run, una piattaforma di computing gestita che scala automaticamente i tuoi container stateless. In questo codelab, vedrai come è facile containerizzare la tua app Spring Boot Kotlin, pubblicare su Container Registry ed eseguire l'immagine su Google Cloud in modo fluido!
Questo codelab ti spiega nei dettagli come configurare una semplice app in Kotlin, mediante la dimostrazione dell'utilizzo di servizi e strumenti di Google Cloud, tra cui Jib, Container Registry e Cloud Run.
Prerequisiti
- Dimestichezza con gli strumenti e il linguaggio di programmazione Java
- Conoscenza degli editor di testo standard di Linux, ad esempio Vim, Emacs e nano
In questo lab proverai a:
- Configurare un'app Spring Bott Kotlin.
- Crea un'immagine Docker ottimizzata.
- Pubblica l'immagine in Container Registry.
- Esegui l'app containerizzata su Cloud Run.
Che cosa ti serve
- Un progetto Google Cloud
- Un browser, come Google Chrome
2. Preparazione
Configurazione automatica dell'ambiente
- Accedi a Cloud Console e crea un nuovo progetto o riutilizzane uno esistente. Se non hai ancora un account Gmail o G Suite, devi crearne uno.
Ricorda l'ID progetto, un nome univoco in tutti i progetti Google Cloud (il nome sopra riportato è già stato utilizzato e non funzionerà per te). Vi verrà fatto riferimento più avanti in questo codelab come PROJECT_ID
.
- Il prossimo passaggio consiste nell'attivare la fatturazione in Cloud Console per poter utilizzare le risorse Google Cloud.
L'esecuzione di questo codelab non dovrebbe costare più di qualche euro, ma potrebbe essere di più se decidi di utilizzare più risorse o se le lasci in esecuzione.
I nuovi utenti di Google Cloud sono idonei per una prova senza costi di 300$.
Cloud Shell
Google Cloud può essere gestito da remoto dal tuo laptop, ma in questo codelab utilizzerai Cloud Shell, un ambiente a riga di comando in esecuzione su Google Cloud.
Attiva Cloud Shell
- In Cloud Console, fai clic su Attiva Cloud Shell
.
Se non hai mai avviato Cloud Shell prima d'ora, ti verrà proposto uno schermo intermedio (below the fold) che descrive quello che è. In tal caso, fai clic su Continua (e non lo vedrai più). Ecco come si presenta la schermata una tantum:
Bastano pochi istanti per eseguire il provisioning e connettersi a Cloud Shell.
Questa macchina virtuale è dotata di tutti gli strumenti di sviluppo di cui hai bisogno. Offre una home directory permanente da 5 GB e viene eseguita in Google Cloud, migliorando notevolmente le prestazioni e l'autenticazione della rete. Gran parte del lavoro in questo codelab, se non tutto, può essere svolto con un browser o con Chromebook.
Una volta eseguita la connessione a Cloud Shell, dovresti vedere che il tuo account è già autenticato e il progetto è già impostato sul tuo ID progetto.
- Esegui questo comando in Cloud Shell per verificare che l'account sia autenticato:
gcloud auth list
Output comando
Credentialed Accounts ACTIVE ACCOUNT * <my_account>@<my_domain.com> To set the active account, run: $ gcloud config set account `ACCOUNT`
gcloud config list project
Output comando
[core] project = <PROJECT_ID>
In caso contrario, puoi impostarlo con questo comando:
gcloud config set project <PROJECT_ID>
Output comando
Updated property [core/project].
3. Inizializza un'app Spring Boot
- Genera una nuova app Spring Boot con Spring Initializr.
$ curl https://start.spring.io/starter.tgz \ -d language=kotlin \ -d dependencies=web \ -d baseDir=kotlin-jib-cloud-run | tar -xzvf -
Tieni presente che Initializr aggiungerà automaticamente spring-boot-starter-web
alle tue dipendenze in pom.xml
dell'app modello.
- Passa alla directory dell'app modello.
$ cd kotlin-jib-cloud-run
- Crea ed esegui l'app utilizzando Maven.
$ ./mvnw -DskipTests spring-boot:run
- Una volta avviata l'app, l'app inizierà ad ascoltare la porta 8080. Fai clic su Anteprima web
nella barra degli strumenti di Cloud Shell e seleziona Anteprima sulla porta 8080 per accedere all'app.
- Dovresti ricevere una risposta 404 perché l'app non fa ancora nulla. Interrompi l'app con
Control+C
.
4. Aggiungi un controller web
- Crea la seguente classe
Controller
nel pacchetto dimostrativo:
$ 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!"
}
}
- Ricrea ed esegui l'app.
$ ./mvnw spring-boot:run
- Controlla di nuovo l'app utilizzando Anteprima web
. Questa volta dovresti vedere il messaggio "
Kotlin app on Cloud Run, containerized by Jib!
". Interrompi l'app conControl+C
.
5. Containerizzare l'app e pubblicarla in Container Registry
Con Jib puoi containerizzare la tua app in modo ottimizzato senza Docker e pubblicarla in qualsiasi Container Registry.
- Prima di procedere, devi attivare l'API Container Registry. Questa operazione deve essere eseguita una sola volta per progetto per rendere accessibile l'API.
$ gcloud services enable containerregistry.googleapis.com
- Esegui Jib per creare un'immagine Docker e pubblicarla in Container Registry.
$ ./mvnw com.google.cloud.tools:jib-maven-plugin:1.8.0:build \ -Dimage=gcr.io/$GOOGLE_CLOUD_PROJECT/kotlin-jib-cloud-run
Infine, verrà visualizzato il seguente messaggio che indica che l'app è containerizzata e ne è stato eseguito il push a Container Registry.
[INFO] Built and pushed image as gcr.io/PROJECT_ID/kotlin-jib-cloud-run ... [INFO] BUILD SUCCESS
Se viene visualizzato un errore, controlla se $GOOGLE_CLOUD_PROJECT
è impostato correttamente sull'ID progetto di Google Cloud (PROJECT_ID
).
- Prima di procedere, controlla se l'immagine è stata pubblicata correttamente. Torna a Cloud Console, fai clic sul menu di navigazione
e seleziona Container Registry.
L'immagine sarà pubblicata.
6. Esegui l'app containerizzata su Cloud Run
Cloud Run porta il serverless ai container, scalando automaticamente i tuoi container stateless.
- Fai di nuovo clic su Menu di navigazione
e seleziona Cloud Run.
Se è la prima volta che accedi a Cloud Run, vedrai la seguente finestra di dialogo per la configurazione una tantum. Se viene visualizzato, fai clic su Inizia a utilizzare Cloud Run.
- Nella pagina di Cloud Run, fai clic su Create Service (Crea servizio).
- Nella schermata successiva, fai clic su Seleziona in corrispondenza di Origine. L'origine è l'immagine che vuoi eseguire su Cloud Run.
- La finestra di dialogo mostra l'immagine creata in precedenza. Seleziona l'immagine e fai clic su Continua.
- Ti mancano pochi clic per eseguire il deployment dell'app. In Deployment platform, scegli Cloud Run (completamente gestito) per rendere il servizio completamente gestito su Google Cloud. Scegli un'area geografica appropriata per la tua località, seleziona Consenti chiamate non autenticate e fai clic su Crea. Ecco fatto.
Al termine del deployment dell'immagine, nella pagina Cloud Run verrà visualizzato un URL per accedere all'app. Dai un'occhiata!
e il messaggio che vuoi vedere nell'app.
Kotlin app on Cloud Run, containerized by Jib!
Ecco fatto. In futuro, se dovrai eseguire il deployment di nuove versioni dell'app, potrai farlo facendo clic su Esegui il deployment di una nuova revisione nella pagina.
7. Esegui la pulizia
- Per ripulire il tuo ambiente, devi eliminare l'app di cui hai eseguito il deployment su Cloud Run e l'immagine pubblicata in Container Registry. Vai a Cloud Run, seleziona l'app e fai clic su Elimina.
- Allo stesso modo, vai alla pagina Container Registry ed elimina l'immagine.
8. Complimenti
Complimenti! Hai containerizzato la tua app Spring Boot Kotlin ed ne hai eseguito il deployment su Cloud Run.
Con Jib hai creato un'immagine container ottimizzata senza che Docker sia installato o scrive un Dockerfile e lo hai pubblicato su Container Registry. Jib ottimizza la creazione delle immagini, in modo che chiunque non abbia una conoscenza approfondita di Docker può containerizzare le app Java in modo rapido ed efficiente. Dopodiché, con pochi clic, hai eseguito il deployment dell'app in Cloud Run per iniziare a gestirla in un attimo.
Scopri di più
- Esegui il deployment di un'app Java in Kubernetes su Google Kubernetes Engine
- Documentazione di Cloud Run
- Panoramica di Cloud Run
- Ti presentiamo Jib: crea meglio immagini Docker Docker
- Crea container più velocemente con Jib, uno strumento di creazione immagini di Google per le app Java
- Jib: containerizza la tua app Java
- Canale Jib Gitter
- Mailing list di utenti Jib