Spring Boot Kotlin-Anwendung containerisieren und in Cloud Run bereitstellen

Google stellt ein leistungsfähiges Image-Build-Tool zur Verfügung, mit dem Sie im Handumdrehen ein optimiertes Docker-Container-Image für Java-Apps ohne Docker oder Dockerfile erstellen können. Google Cloud bringt außerdem serverlose Container zu Cloud Run, einer verwalteten Computing-Plattform, die automatisch zustandslose Container skaliert. In diesem Codelab werden Sie sehen, wie einfach es ist, Ihre Spring Boot Kotlin-Anwendung zu containerisieren, in Container Registry zu veröffentlichen und das Image nahtlos in Google Cloud auszuführen!

Dieses Codelab führt Sie durch die Einrichtung einer einfachen Anwendung in Kotlin, in der die Verwendung von Google Cloud-Diensten und -Tools wie Jib, Container Registry und Cloud Run veranschaulicht wird.

Vorbereitung

  • Kenntnisse in der Programmiersprache Java und in Tools
  • Kenntnisse in standardmäßigen Linux-Texteditoren wie Vim, Emacs und nano

Aufgaben

  • Spring Boot Kotlin-App einrichten.
  • Optimiertes Docker-Image erstellen.
  • Image in Container Registry veröffentlichen.
  • Containerisierte Anwendung in Cloud Run ausführen.

Voraussetzungen

  • Ein Google Cloud-Projekt
  • Ein Browser, z. B. Google Chrome

Umgebung im eigenen Tempo einrichten

  1. Melden Sie sich in der Cloud Console an und erstellen Sie ein neues Projekt oder verwenden Sie ein vorhandenes. Wenn Sie noch kein Gmail- oder G Suite-Konto haben, müssen Sie eins erstellen.

Notieren Sie sich die Projekt-ID, also den projektübergreifend nur einmal vorkommenden Namen eines Google Cloud-Projekts. Der oben angegebene Name ist bereits vergeben und kann leider nicht mehr verwendet werden. In diesem Codelab wird sie später als PROJECT_ID bezeichnet.

  1. Als Nächstes müssen Sie in der Cloud Console die Abrechnung aktivieren, um Google Cloud-Ressourcen zu nutzen.

Das Durcharbeiten dieses Codelabs sollte nicht mehr als ein paar Euro kosten. Es kann aber auch sein, dass du mehr Ressourcen benötigst oder wenn du sie nicht mehr nutzen möchtest.

Neuen Google Cloud-Nutzern steht ein kostenloser Testzeitraum im Wert von 300$ zur Verfügung.

Cloud Shell

Google Cloud kann aus der Ferne über Ihren Laptop ausgeführt werden. In diesem Codelab nutzen Sie Cloud Shell, eine Befehlszeilenumgebung, die in Google Cloud ausgeführt wird.

Cloud Shell aktivieren

  1. Klicken Sie in der Cloud Console auf Cloud Shell aktivieren.

Wenn Sie Cloud Shell noch nie gestartet haben, sehen Sie einen Zwischenbildschirm („Below the fold“ (mit Scrollen sichtbar) mit einer Beschreibung, worum es sich dabei handelt. Klicken Sie in diesem Fall auf Weiter. In diesem Fall wird es nicht wieder angezeigt. So sieht der einmalige Bildschirm aus:

Die Bereitstellung und Verbindung mit Cloud Shell dauert nur wenige Minuten.

Diese virtuelle Maschine verfügt über sämtliche Entwicklertools, die Sie benötigen. Es bietet ein 5-GB-Basisverzeichnis und wird in Google Cloud ausgeführt, was die Netzwerkleistung und Authentifizierung erheblich verbessert. In diesem Codelab lassen sich viele oder sogar alle Aufgaben ganz einfach über einen Browser oder Ihr Chromebook erledigen.

Sobald Sie mit Cloud Shell verbunden sind, sollten Sie sehen, dass Sie bereits authentifiziert sind und dass das Projekt bereits auf Ihre Projekt-ID festgelegt ist.

  1. Führen Sie in Cloud Shell den folgenden Befehl aus, um zu bestätigen, dass Sie authentifiziert sind:
gcloud auth list

Befehlsausgabe

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
gcloud config list project

Befehlsausgabe

[core]
project = <PROJECT_ID>

Ist dies nicht der Fall, können Sie die Einstellung mit diesem Befehl vornehmen:

gcloud config set project <PROJECT_ID>

Befehlsausgabe

Updated property [core/project].
  1. Erstelle eine neue Spring-Boot-App mit Spring Initializr.
$ curl https://start.spring.io/starter.tgz \
    -d language=kotlin \
    -d dependencies=web \
    -d baseDir=kotlin-jib-cloud-run | tar -xzvf -

Der Initializr fügt den spring-boot-starter-web automatisch den Abhängigkeiten in der pom.xml der Vorlagen-App hinzu.

  1. Wechseln Sie in das Verzeichnis der Vorlagen-App.
$ cd kotlin-jib-cloud-run
  1. Anwendung mit Maven erstellen und ausführen
$ ./mvnw -DskipTests spring-boot:run
  1. Danach startet die App den Port 8080. Klicken Sie in der Cloud Shell-Symbolleiste auf Webvorschau und wählen Sie Vorschau auf Port 8080 aus, um auf die App zuzugreifen.

  1. Du solltest eine 404-Antwort zurückgeben, da die App noch nichts bietet. Beenden Sie die App mit Control+C.
  1. Erstelle die folgende Controller-Klasse im Demopaket:
$ 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. Erstellen Sie die App neu und führen Sie sie aus.
$ ./mvnw spring-boot:run
  1. Prüfen Sie die App noch einmal mit der Webvorschau . Dieses Mal sollten Sie die Meldung Kotlin app on Cloud Run, containerized by Jib! sehen. Die App mit Control+C beenden.

Mit Jib können Sie Ihre Anwendung ohne Container in einem Container zusammenfassen und in einer beliebigen Container Registry veröffentlichen.

  1. Bevor Sie fortfahren, müssen Sie die Container Registry API aktivieren. Dieser Vorgang muss nur einmal pro Projekt durchgeführt werden, um die API zugänglich zu machen.
$ gcloud services enable containerregistry.googleapis.com
  1. Führen Sie Jib aus, um ein Docker-Image zu erstellen und in Container Registry zu veröffentlichen.
$ ./mvnw com.google.cloud.tools:jib-maven-plugin:1.8.0:build \
    -Dimage=gcr.io/$GOOGLE_CLOUD_PROJECT/kotlin-jib-cloud-run

Möglicherweise sehen Sie die folgende Meldung, dass die Anwendung containerisiert und in Ihre Container Registry übertragen wird.

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

Wenn eine Fehlermeldung angezeigt wird, prüfen Sie, ob $GOOGLE_CLOUD_PROJECT richtig auf Ihre Google Cloud-Projekt-ID (PROJECT_ID) festgelegt ist.

  1. Bevor Sie fortfahren, prüfen Sie, ob das Bild veröffentlicht wurde. Gehen Sie zurück zur Cloud Console, klicken Sie auf Navigationsmenü und wählen Sie Container Registry aus.

Sie sehen, dass Ihr Bild erfolgreich veröffentlicht wurde.

Mit Cloud Run können Sie serverlose Container nutzen, um automatisch zustandslose Container zu skalieren.

  1. Klicken Sie noch einmal auf das Navigationsmenü und wählen Sie Cloud Run aus.

Wenn Sie Cloud Run zum ersten Mal verwenden, wird das folgende Dialogfeld für die einmalige Einrichtung angezeigt. Klicken Sie auf Verwendung von Cloud Run starten, wenn diese Option angezeigt wird.

  1. Klicken Sie auf der Cloud Run-Seite auf Dienst erstellen.

  1. Klicken Sie auf dem nächsten Bildschirm unter Quelle auf Auswählen. Die Quelle ist das Image, das Sie in Cloud Run ausführen möchten.

  1. Im Dialogfeld wird das zuvor erstellte Image angezeigt. Wählen Sie das Bild aus und klicken Sie auf Weiter.

  1. Es sind nur noch wenige Klicks und die Anwendung erforderlich. Wählen Sie unter Bereitstellungsplattform die Option Cloud Run (vollständig verwaltet) aus, um den Dienst vollständig in Google Cloud zu verwalten. Wählen Sie eine für Ihren Standort geeignete Region aus, klicken Sie auf Nicht authentifizierte Aufrufe zulassen und dann auf Erstellen. Fertig!

Wenn das Image vollständig bereitgestellt ist, wird auf der Cloud Run-Seite eine URL angezeigt, über die Sie auf die Anwendung zugreifen können. Sehen Sie es sich an!

Am Ende sollten Sie die Nachricht sehen, die Sie von der App erhalten haben.

Kotlin app on Cloud Run, containerized by Jib!

Fertig! Wenn Sie in Zukunft neue App-Versionen bereitstellen möchten, können Sie dazu auf der Seite auf Neue Überarbeitung bereitstellen klicken.

  1. Zum Bereinigen Ihrer Umgebung müssen Sie die bereitgestellte Anwendung in Cloud Run und das veröffentlichte Image in Container Registry löschen. Rufen Sie Cloud Run auf, wählen Sie die App aus und klicken Sie auf Löschen.

  1. Rufen Sie auch die Container Registry-Seite auf und löschen Sie das Image.

Glückwunsch! Sie haben Ihre Spring Boot Kotlin-Anwendung erfolgreich containerisiert und in Cloud Run bereitgestellt.

Sie haben mit Jib ein optimiertes Container-Image erstellt, ohne dass Docker installiert oder ein Dockerfile geschrieben und in Container Registry veröffentlicht wurde. Jib optimiert die Image-Erstellung, sodass Java-Anwendungen schnell und effizient von Containern ohne fundierte Kenntnisse von Docker genutzt werden können. Anschließend lässt sich die Anwendung mit wenigen Klicks in Cloud Run bereitstellen.

Weitere Informationen