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

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

Google предоставляет мощный инструмент для создания образов , с помощью которого вы можете легко создать и опубликовать оптимизированный образ контейнера Docker для приложений Java в кратчайшие сроки без Docker или Dockerfile. Google Cloud также переносит бессерверные возможности в контейнеры с помощью Cloud Run , управляемой вычислительной платформы, которая автоматически масштабирует ваши контейнеры без сохранения состояния. В этой лаборатории кода вы увидите, как легко поместить в контейнер приложение Spring Boot Kotlin, опубликовать его в реестре контейнеров и беспрепятственно запустить образ в 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

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

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

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

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

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

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

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

bce75f34b2c53987.png

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

70f315d7b402b476.png

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

fbe3a0674c982259.png

Эта виртуальная машина оснащена всеми необходимыми инструментами разработки. Он предлагает постоянный домашний каталог объемом 5 ГБ и работает в Google Cloud, что значительно повышает производительность сети и аутентификацию. Большую часть, если не всю, работу в этой лаборатории кода можно выполнить с помощью просто браузера или 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. Прежде чем двигаться дальше, проверьте, успешно ли опубликовано изображение. Вернитесь в облачную консоль и нажмите меню навигации. 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 и опубликованный образ в реестре контейнеров. Перейдите в Cloud Run , выберите приложение и нажмите «Удалить» .

1dfc2f51c1b5f6e.png

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

1b724136c1655935.png

8. Поздравления

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

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

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