Spring Boot Kotlin-Anwendung containerisieren und in Cloud Run bereitstellen

Google bietet ein leistungsstarkes Tool zum Erstellen von Images, mit dem Sie im Handumdrehen ein optimiertes Docker-Container-Image für Java-Apps erstellen und veröffentlichen können – ohne Docker oder Dockerfile. Google Cloud bietet mit Cloud Run auch serverlose Container an. Cloud Run ist eine verwaltete Computing-Plattform, die Ihre zustandslosen Container automatisch skaliert. In diesem Codelab erfahren Sie, wie einfach es ist, Ihre Spring Boot Kotlin-App zu containerisieren, in Container Registry zu veröffentlichen und das Image nahtlos in Google Cloud auszuführen.

In diesem Codelab wird beschrieben, wie Sie eine einfache App in Kotlin einrichten, in der die Verwendung von Google Cloud-Diensten und -Tools wie Jib, Container Registry und Cloud Run demonstriert wird.

Vorbereitung

  • Kenntnisse der Java-Programmiersprache und der entsprechenden Tools
  • Kenntnisse von standardmäßigen Linux-Texteditoren wie Vim, Emacs und Nano

Aufgaben

  • Richten Sie eine Spring Boot Kotlin-Anwendung ein.
  • Optimiertes Docker-Image erstellen
  • Veröffentlichen Sie das Image in Container Registry.
  • Führen Sie die Containeranwendung in Cloud Run aus.

Voraussetzungen

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

Einrichtung der Umgebung im eigenen Tempo

  1. Melden Sie sich in der Cloud Console an und erstellen Sie ein neues Projekt oder verwenden Sie ein vorhandenes Projekt. 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. Sie wird in diesem Codelab später als PROJECT_ID bezeichnet.

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

Dieses Codelab sollte Sie nicht mehr als ein paar Dollar kosten, aber es könnte mehr sein, wenn Sie sich für mehr Ressourcen entscheiden oder wenn Sie sie laufen lassen.

Neuen Nutzern der Google Cloud steht eine kostenlose Testversion mit einem Guthaben von 300$ zur Verfügung.

Cloud Shell

Während Sie Google Cloud von Ihrem Laptop aus per Fernzugriff nutzen können, wird in diesem Codelab Cloud Shell verwendet, 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, wird ein Zwischenbildschirm angezeigt, auf dem beschrieben wird, was Cloud Shell ist. Klicken Sie in diesem Fall auf Weiter. So sieht dieser einmalige Bildschirm aus:

Die Bereitstellung und Verbindung mit Cloud Shell sollte nur wenige Augenblicke dauern.

Diese virtuelle Maschine verfügt über sämtliche Entwicklertools, die Sie benötigen. Sie bietet ein Basisverzeichnis mit 5 GB nichtflüchtigem Speicher und läuft in Google Cloud, was die Netzwerkleistung und Authentifizierung erheblich verbessert. Die meisten, wenn nicht alle Aufgaben in diesem Codelab können einfach mit einem Browser oder Ihrem Chromebook erledigt werden.

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

  1. Führen Sie in Cloud Shell den folgenden Befehl aus, um zu prüfen, ob 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. Generieren Sie eine neue Spring Boot-Anwendung 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 im pom.xml der Vorlagen-App hinzu.

  1. Wechseln Sie in das Verzeichnis der Vorlagen-App.
$ cd kotlin-jib-cloud-run
  1. Erstellen und Ausführen der App mit Maven
$ ./mvnw -DskipTests spring-boot:run
  1. Nach dem Start überwacht die App 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. Sie sollten eine 404-Antwort erhalten, da die App noch nichts Nützliches tut. Beenden Sie die App mit Control+C.
  1. Erstellen Sie 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. Beenden Sie die App mit Control+C.

Mit Jib können Sie Ihre App ohne Docker optimiert containerisieren und in einer beliebigen Container-Registry veröffentlichen.

  1. Bevor Sie fortfahren, müssen Sie die Container Registry API aktivieren. Dies muss nur einmal pro Projekt erfolgen, damit auf die API zugegriffen werden kann.
$ 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

Schließlich wird die folgende Meldung angezeigt, dass die App containerisiert und in Ihre Container Registry übertragen wurde.

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

Wenn Sie einen Fehler sehen, prüfen Sie, ob $GOOGLE_CLOUD_PROJECT korrekt auf Ihre Google Cloud-Projekt-ID (PROJECT_ID) festgelegt ist.

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

Sie sehen, dass Ihr Bild veröffentlicht wurde.

Cloud Run bietet eine serverlose Option für Container und skaliert Ihre zustandslosen Container automatisch.

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

Wenn Sie zum ersten Mal auf Cloud Run zugreifen, wird der folgende Dialog für die einmalige Einrichtung angezeigt. Klicken Sie auf Cloud Run verwenden, falls 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. Sie können die App jetzt mit wenigen Klicks bereitstellen. Wählen Sie unter Bereitstellungsplattform die Option Cloud Run (vollständig verwaltet) aus, damit der Dienst vollständig in Google Cloud verwaltet wird. Wählen Sie eine für Ihren Standort geeignete Region aus, wählen Sie Nicht authentifizierte Aufrufe zulassen aus und klicken Sie auf Erstellen. Geschafft!

Wenn das Image vollständig bereitgestellt wurde, wird auf der Cloud Run-Seite eine URL für den Zugriff auf die App angezeigt. Probieren Sie sie aus.

Am Ende wird die erwartete Meldung der App angezeigt.

Kotlin app on Cloud Run, containerized by Jib!

Geschafft! Wenn Sie in Zukunft neue App-Versionen bereitstellen müssen, können Sie auf der Seite auf Neue Überarbeitung bereitstellen klicken.

  1. Um die Umgebung zu bereinigen, müssen Sie die bereitgestellte App 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 die Seite „Container Registry“ auf und löschen Sie das Image.

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

Mit Jib haben Sie ein optimiertes Container-Image erstellt, ohne Docker zu installieren oder ein Dockerfile zu schreiben, und es in Container Registry veröffentlicht. Jib optimiert die Image-Erstellung, sodass jeder, auch ohne detaillierte Docker-Kenntnisse, Java-Anwendungen schnell und effizient containerisieren kann. Anschließend haben Sie die App mit wenigen Klicks in Cloud Run bereitgestellt, sodass sie im Handumdrehen genutzt werden konnte.

Weitere Informationen