Containerizza un'app Kotlin di Spring Boot ed eseguine il deployment in Cloud Run

1. Prima di iniziare

Google fornisce un potente strumento di creazione di immagini con cui puoi creare e pubblicare facilmente un'immagine di container Docker ottimizzata per le app Java in pochissimo tempo senza Docker o Dockerfile. Google Cloud porta anche il serverless ai container con Cloud Run, una piattaforma di calcolo gestita che scala automaticamente i tuoi container stateless. In questo codelab vedrai quanto è facile inserire in un container la tua app Spring Boot Kotlin, pubblicarla in Container Registry ed eseguire l'immagine su Google Cloud in modo semplice.

Questo codelab ti guida nella configurazione di una semplice app in Kotlin, che mostra l'utilizzo di servizi e strumenti Google Cloud, tra cui Jib, Container Registry e Cloud Run.

Prerequisiti

  • Familiarità con il linguaggio di programmazione Java e gli strumenti
  • Conoscenza degli editor di testo standard di Linux, ad esempio Vim, Emacs e nano

In questo lab proverai a:

  • Configura un'app Spring Boot 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, ad esempio Google Chrome

2. Preparazione

Configurazione dell'ambiente autonomo

  1. Accedi alla console Cloud e crea un nuovo progetto o riutilizzane uno esistente. Se non hai ancora un account Gmail o Google Workspace, devi crearne uno.

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

Ricorda l'ID progetto, un nome univoco tra tutti i progetti Google Cloud (il nome sopra è già stato utilizzato e non funzionerà per te, mi dispiace). In questo codelab verrà chiamato PROJECT_ID.

  1. Successivamente, dovrai abilitare la fatturazione in Cloud Console per utilizzare le risorse Google Cloud.

L'esecuzione di questo codelab non dovrebbe costare molto, se non nulla. Assicurati di seguire le istruzioni riportate nella sezione "Pulizia", che ti consiglia come arrestare le risorse in modo da non incorrere in addebiti oltre questo tutorial. I nuovi utenti di Google Cloud possono beneficiare del programma prova senza costi di 300$.

Cloud Shell

Sebbene Google Cloud possa essere gestito da remoto dal tuo laptop, in questo codelab utilizzerai Cloud Shell, un ambiente a riga di comando in esecuzione in Google Cloud.

Attiva Cloud Shell

  1. Nella console Cloud, fai clic su Attiva Cloud Shell 4292cbf4971c9786.png.

bce75f34b2c53987.png

Se non hai mai avviato Cloud Shell, viene visualizzata una schermata intermedia (sotto la piega) che ne descrive le funzionalità. In questo caso, fai clic su Continua e non comparirà più. Ecco come si presenta la schermata intermedia:

70f315d7b402b476.png

Bastano pochi istanti per eseguire il provisioning e connettersi a Cloud Shell.

fbe3a0674c982259.png

Questa macchina virtuale è caricata con tutti gli strumenti per sviluppatori 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 per questo codelab, se non tutto, può essere svolto semplicemente 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.

  1. 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`
  1. Esegui questo comando in Cloud Shell per verificare che il comando gcloud conosca il tuo progetto:
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. Inizializzare un'app Spring Boot

  1. 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 dipendenze in pom.xml dell'app modello.

  1. Passa alla directory dell'app modello.
$ cd kotlin-jib-cloud-run
  1. Crea ed esegui l'app utilizzando Maven.
$ ./mvnw -DskipTests spring-boot:run
  1. Una volta avviata, l'app inizierà ad ascoltare sulla porta 8080. Fai clic su Anteprima web 396bfd51f55afb5d.pngnella barra degli strumenti di Cloud Shell e seleziona Anteprima sulla porta 8080 per accedere all'app.

4172e1e141daf0c1.png

  1. Dovresti ricevere una risposta 404 perché l'app non fa ancora nulla di utile. Interrompi l'app con Control+C.

4. Aggiungere un controller web

  1. Crea la seguente classe Controller nel pacchetto demo:
$ 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!"
  }
}
  1. Ricrea ed esegui l'app.
$ ./mvnw spring-boot:run
  1. Controlla di nuovo l'app utilizzando Anteprima web a6cfcaa1d2119c52.png. Questa volta dovresti vedere il messaggio "Kotlin app on Cloud Run, containerized by Jib!". Interrompi l'app con Control+C.

5. Containerizza l'app e pubblicala in Container Registry

Con Jib, puoi containerizzare la tua app in modo ottimizzato senza Docker e pubblicarla in qualsiasi registro dei container.

  1. 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
  1. Esegui Jib per creare un'immagine Docker e pubblicarla in Container Registry.
$ ./mvnw com.google.cloud.tools:jib-maven-plugin:3.1.1:build \
    -Dimage=gcr.io/$GOOGLE_CLOUD_PROJECT/kotlin-jib-cloud-run

Alla fine, vedrai il seguente messaggio che indica che l'app è containerizzata e inviata a Container Registry.

[INFO] Built and pushed image as gcr.io/PROJECT_ID/kotlin-jib-cloud-run
...
[INFO] BUILD SUCCESS

Se visualizzi un errore, controlla che $GOOGLE_CLOUD_PROJECT sia impostato correttamente sull'ID progetto Google Cloud (PROJECT_ID).

  1. Prima di procedere, verifica che l'immagine sia stata pubblicata correttamente. Torna alla console Cloud, fai clic sul menu di navigazione c8b4ea3c68f4c1e3.png e seleziona Container Registry.

6421550ba806beab.png

38ae0ca573c3dcd.png

Vedrai che l'immagine è stata pubblicata.

c9086605411691c3.png

6. Esegui l'app containerizzata su Cloud Run

Cloud Run porta il serverless nei container, scalando automaticamente i tuoi container stateless.

  1. Fai di nuovo clic su Menu di navigazione c8b4ea3c68f4c1e3.png e seleziona Cloud Run.

812c7c87527ebe4a.png

Se è la prima volta che accedi a Cloud Run, visualizzerai la seguente finestra di dialogo per la configurazione una tantum. Se viene visualizzato, fai clic su Inizia a utilizzare Cloud Run.

1b2bf05712f6150a.png

  1. Nella pagina Cloud Run, fai clic su Crea servizio.

c0b4b980662f7807.png

  1. Nella schermata successiva, fai clic su Seleziona in Origine. L'origine è l'immagine che vuoi eseguire su Cloud Run.

2049621ae97d62ee.png

  1. Nella finestra di dialogo verrà visualizzata l'immagine creata in precedenza. Seleziona l'immagine e fai clic su Continua.

564367bc65caefbf.png

  1. Bastano un paio di clic per eseguire il deployment dell'app. In Piattaforma di deployment, scegli Cloud Run (completamente gestito) per avere il servizio completamente gestito su Google Cloud. Scegli una regione adatta alla tua posizione, seleziona Consenti chiamate non autenticate e fai clic su Crea. È tutto.

3eb0f51d15326cac.png

Quando l'immagine è completamente implementata, la pagina Cloud Run mostrerà un URL per accedere all'app. Dai un'occhiata.

8bf800dd6e2f44f2.png

Alla fine, vedrai il messaggio che ti aspetti dall'app.

Kotlin app on Cloud Run, containerized by Jib!

È tutto. In futuro, se devi eseguire il deployment di nuove versioni dell'app, puoi farlo facendo clic su Esegui il deployment di una nuova revisione nella pagina.

7. Esegui la pulizia

  1. Per pulire l'ambiente, devi eliminare l'app di cui è stato eseguito il deployment su Cloud Run e l'immagine pubblicata su Container Registry. Vai a Cloud Run, seleziona l'app e fai clic su Elimina.

1dfc2f51c1b5f6e.png

  1. Allo stesso modo, vai alla pagina Container Registry ed elimina l'immagine.

1b724136c1655935.png

8. Complimenti

Complimenti! Hai containerizzato correttamente la tua app Spring Boot Kotlin e ne hai eseguito il deployment su Cloud Run.

Utilizzando Jib, hai creato un'immagine container ottimizzata senza installare Docker o scrivere un Dockerfile e l'hai pubblicata in Container Registry. Jib ottimizza la creazione delle immagini, in modo che chiunque non abbia una conoscenza approfondita di Docker possa containerizzare le app Java in modo rapido ed efficiente. Poi, con pochi clic, hai eseguito il deployment dell'app in Cloud Run per iniziare a pubblicarla in breve tempo.

Scopri di più