Контейнеризация приложения Spring Boot Kotlin и развертывание его в Cloud Run

1. Прежде чем начать

Google предоставляет мощный инструмент для сборки образов, с помощью которого вы можете легко и быстро создать и опубликовать оптимизированный образ контейнера Docker для Java-приложений без использования Docker или Dockerfile. Google Cloud также внедряет бессерверные вычисления в контейнеры с помощью Cloud Run — управляемой вычислительной платформы, которая автоматически масштабирует ваши контейнеры без сохранения состояния. В этом практическом занятии вы увидите, как легко контейнеризировать ваше приложение Spring Boot Kotlin, опубликовать его в Container Registry и запустить образ в Google Cloud без каких-либо проблем!

В этом практическом занятии вы узнаете, как создать простое приложение на Kotlin, используя сервисы и инструменты Google Cloud, включая Jib , Container Registry и Cloud Run .

Предварительные требования

  • Знание языка программирования Java и инструментов его программирования.
  • Знание стандартных текстовых редакторов Linux, таких как Vim, Emacs и nano.

Что вы будете делать

  • Настройте приложение Spring Boot Kotlin.
  • Создайте оптимизированный образ Docker.
  • Опубликуйте образ в реестре контейнеров.
  • Запустите контейнеризированное приложение в Cloud Run.

Что вам понадобится

  • Проект Google Cloud
  • Браузер, например, Google Chrome

2. Настройка

Настройка среды для самостоятельного обучения

  1. Войдите в Cloud Console и создайте новый проект или используйте существующий. Если у вас еще нет учетной записи Gmail или Google Workspace, вам необходимо ее создать .

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

Запомните идентификатор проекта (Project ID) — уникальное имя для всех проектов Google Cloud (указанное выше имя уже занято и вам не подойдёт, извините!). В дальнейшем в этом практическом занятии оно будет обозначаться как PROJECT_ID .

  1. Далее вам потребуется включить оплату в Cloud Console, чтобы использовать ресурсы Google Cloud.

Выполнение этого практического задания не должно стоить дорого, если вообще что-либо. Обязательно следуйте инструкциям в разделе «Очистка», где указано, как отключить ресурсы, чтобы избежать дополнительных расходов после завершения этого урока. Новые пользователи Google Cloud имеют право на бесплатную пробную версию стоимостью 300 долларов США .

Облачная оболочка

Хотя Google Cloud можно управлять удаленно с ноутбука, в этом практическом занятии вы будете использовать Cloud Shell — среду командной строки, работающую в Google Cloud.

Активировать Cloud Shell

  1. В консоли Cloud нажмите «Активировать Cloud Shell» . 4292cbf4971c9786.png .

bce75f34b2c53987.png

Если вы никогда раньше не запускали Cloud Shell, вам будет показан промежуточный экран (внизу), описывающий его назначение. В этом случае нажмите «Продолжить» (и вы больше никогда его не увидите). Вот как выглядит этот одноразовый экран:

70f315d7b402b476.png

Подготовка и подключение к Cloud Shell займут всего несколько минут.

fbe3a0674c982259.png

Эта виртуальная машина оснащена всеми необходимыми инструментами разработки. Она предоставляет постоянный домашний каталог размером 5 ГБ и работает в облаке Google, что значительно повышает производительность сети и аутентификацию. Большая часть, если не вся, работа в этом практическом задании может быть выполнена с помощью обычного браузера или вашего Chromebook.

После подключения к Cloud Shell вы увидите, что ваша аутентификация пройдена и что проект уже настроен на ваш идентификатор проекта.

  1. Выполните следующую команду в 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`
  1. Выполните следующую команду в Cloud Shell, чтобы убедиться, что команда gcloud знает о вашем проекте:
gcloud config list project

вывод команды

[core]
project = <PROJECT_ID>

Если это не так, вы можете установить это с помощью следующей команды:

gcloud config set project <PROJECT_ID>

вывод команды

Updated property [core/project].

3. Инициализация приложения Spring Boot.

  1. Создайте новое приложение 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 шаблонного приложения.

  1. Перейдите в каталог приложения-шаблона.
$ cd kotlin-jib-cloud-run
  1. Соберите и запустите приложение с помощью Maven.
$ ./mvnw -DskipTests spring-boot:run
  1. После запуска приложение начнет прослушивать порт 8080. Нажмите « Предварительный просмотр веб-страницы». 396bfd51f55afb5d.png В панели инструментов Cloud Shell выберите «Предварительный просмотр на порту 8080» , чтобы получить доступ к приложению.

4172e1e141daf0c1.png

  1. Вы должны получить ответ 404, потому что приложение пока ничего полезного не делает. Остановите приложение с помощью Control+C .

4. Добавьте веб-контроллер

  1. Создайте следующий класс 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!"
  }
}
  1. Пересоберите и запустите приложение.
$ ./mvnw spring-boot:run
  1. Проверьте приложение еще раз, используя функцию веб-просмотра. a6cfcaa1d2119c52.png На этот раз вы должны увидеть сообщение: « Kotlin app on Cloud Run, containerized by Jib! ». Остановите приложение с помощью Control+C .

5. Контейнеризуйте ваше приложение и опубликуйте его в реестре контейнеров.

С помощью Jib вы можете оптимизировать контейнеризацию своего приложения без Docker и публиковать его в любом реестре контейнеров.

  1. Прежде чем продолжить, необходимо активировать API реестра контейнеров. Это нужно сделать только один раз для каждого проекта, чтобы API стал доступен.
$ gcloud services enable containerregistry.googleapis.com
  1. Запустите Jib для сборки образа Docker и его публикации в реестре контейнеров.
$ ./mvnw com.google.cloud.tools:jib-maven-plugin:3.1.1:build \
    -Dimage=gcr.io/$GOOGLE_CLOUD_PROJECT/kotlin-jib-cloud-run

В итоге вы увидите следующее сообщение о том, что приложение контейнеризировано и загружено в ваш реестр контейнеров.

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

Если вы видите ошибку, еще раз проверьте, правильно ли переменная $GOOGLE_CLOUD_PROJECT установлена ​​на идентификатор вашего проекта Google Cloud ( PROJECT_ID ).

  1. Прежде чем продолжить, убедитесь, что изображение успешно опубликовано. Вернитесь в консоль Cloud и нажмите меню навигации. c8b4ea3c68f4c1e3.png и выберите «Реестр контейнеров» .

6421550ba806beab.png

38ae0ca573c3dcd.png

Вы увидите, что ваше изображение успешно опубликовано.

c9086605411691c3.png

6. Запустите контейнеризированное приложение в Cloud Run.

Cloud Run внедряет бессерверные технологии в контейнеры, автоматически масштабируя ваши контейнеры без сохранения состояния.

  1. Нажмите на меню навигации c8b4ea3c68f4c1e3.png Снова выберите Cloud Run .

812c7c87527ebe4a.png

Если вы впервые используете Cloud Run, вы увидите следующее диалоговое окно для однократной настройки. Если оно появится, нажмите «Начать использование Cloud Run» .

1b2bf05712f6150a.png

  1. На странице Cloud Run нажмите «Создать службу» .

c0b4b980662f7807.png

  1. На следующем экране нажмите «Выбрать» в разделе «Источник» . Источником будет образ, который вы хотите запустить в Cloud Run.

2049621ae97d62ee.png

  1. В диалоговом окне отобразится созданный вами ранее образ. Выберите образ и нажмите «Продолжить» .

564367bc65caefbf.png

  1. Теперь до развертывания приложения осталось всего несколько кликов. В разделе «Платформа развертывания» выберите Cloud Run (полностью управляемый) , чтобы служба полностью управлялась в Google Cloud. Выберите регион, подходящий для вашего местоположения, выберите «Разрешить неаутентифицированные вызовы» и нажмите «Создать» . Вот и все!

3eb0f51d15326cac.png

После завершения развертывания образа на странице Cloud Run отобразится URL-адрес для доступа к приложению. Ознакомьтесь с ним!

8bf800dd6e2f44f2.png

В итоге вы увидите сообщение, которое ожидаете от приложения.

Kotlin app on Cloud Run, containerized by Jib!

Вот и всё! В будущем, если вам потребуется развернуть новые версии приложения, вы сможете сделать это, нажав кнопку «Развернуть новую версию» на странице.

7. Уборка

  1. Для очистки среды необходимо удалить развернутое приложение в Cloud Run и опубликованный образ в Container Registry. Перейдите в Cloud Run , выберите приложение и нажмите «Удалить» .

1dfc2f51c1b5f6e.png

  1. Аналогичным образом перейдите на страницу Реестра контейнеров и удалите образ.

1b724136c1655935.png

8. Поздравляем!

Поздравляем! Вы успешно контейнеризировали ваше приложение Spring Boot Kotlin и развернули его в Cloud Run!

С помощью Jib вы создали оптимизированный образ контейнера без установленного Docker и написания Dockerfile, а затем опубликовали его в Container Registry. Jib оптимизирует создание образов, поэтому любой, даже без глубоких знаний Docker, может быстро и эффективно контейнеризировать Java-приложения. Затем, всего несколькими щелчками мыши, вы развернули приложение в Cloud Run и запустили его в кратчайшие сроки.

Узнать больше