1. Antes de comenzar
Google proporciona una potente herramienta de compilación de imágenes con la que puedes compilar y publicar fácilmente una imagen de contenedor de Docker optimizada para apps de Java sin Docker ni Dockerfile. Google Cloud también lleva la tecnología sin servidores a los contenedores con Cloud Run, una plataforma de procesamiento administrada que escala automáticamente tus contenedores sin estado. En este codelab, verás lo fácil que es alojar en contenedores tu app de Spring Boot Kotlin, publicarla en Container Registry y ejecutar la imagen en Google Cloud de manera fluida.
En este codelab, se explica cómo configurar una app simple en Kotlin, lo que demuestra cómo usar los servicios y herramientas de Google Cloud, incluidos Jib, Container Registry y Cloud Run.
Requisitos previos
- Estar familiarizado con el lenguaje de programación y las herramientas de Java
- Conocimientos sobre editores de texto estándares de Linux, como Vim, Emacs y nano
Actividades
- Configura una app de Kotlin Spring Boot.
- Compilar una imagen optimizada de Docker
- Publica la imagen en Container Registry.
- Ejecutar la app alojada en contenedores en Cloud Run
Requisitos
- Un proyecto de Google Cloud
- Un navegador, como Google Chrome
2. Cómo prepararte
Configuración del entorno de autoaprendizaje
- Accede a la consola de Cloud y crea un proyecto nuevo o reutiliza uno existente. Si aún no tienes una cuenta de Gmail o de Google Workspace, debes crear una.
Recuerde el ID de proyecto, un nombre único en todos los proyectos de Google Cloud (el nombre anterior ya se encuentra en uso y no lo podrá usar). Se mencionará más adelante en este codelab como PROJECT_ID
.
- A continuación, deberás habilitar la facturación en la consola de Cloud para usar los recursos de Google Cloud recursos.
Ejecutar este codelab no debería costar mucho, tal vez nada. Asegúrate de seguir las instrucciones de la sección “Realiza una limpieza” en la que se aconseja cómo cerrar recursos para no incurrir en facturación más allá de este instructivo. Los usuarios nuevos de Google Cloud son aptos para participar en el programa Prueba gratuita de$300.
Cloud Shell
Si bien Google Cloud se puede operar de manera remota desde tu laptop, en este codelab usarás Cloud Shell, un entorno de línea de comandos que se ejecuta en Google Cloud.
Activar Cloud Shell
- En la consola de Cloud, haz clic en Activar Cloud Shell.
Si nunca iniciaste Cloud Shell, aparecerá una pantalla intermedia (mitad inferior de la página) que describe en qué consiste. Si ese es el caso, haz clic en Continuar (y no volverás a verlo). Así es como se ve la pantalla única:
El aprovisionamiento y la conexión a Cloud Shell solo tomará unos minutos.
Esta máquina virtual está cargada con todas las herramientas de desarrollo que necesitas. Ofrece un directorio principal persistente de 5 GB y se ejecuta en Google Cloud, lo que permite mejorar considerablemente el rendimiento de la red y la autenticación. Gran parte de tu trabajo en este codelab, si no todo, se puede hacer simplemente con un navegador o tu Chromebook.
Una vez conectado a Cloud Shell, debería ver que ya se autenticó y que el proyecto ya se configuró con tu ID del proyecto.
- En Cloud Shell, ejecuta el siguiente comando para confirmar que está autenticado:
gcloud auth list
Resultado del comando
Credentialed Accounts ACTIVE ACCOUNT * <my_account>@<my_domain.com> To set the active account, run: $ gcloud config set account `ACCOUNT`
- Ejecuta el siguiente comando en Cloud Shell para confirmar que el comando de gcloud conoce tu proyecto:
gcloud config list project
Resultado del comando
[core] project = <PROJECT_ID>
De lo contrario, puedes configurarlo con el siguiente comando:
gcloud config set project <PROJECT_ID>
Resultado del comando
Updated property [core/project].
3. Inicializa una app de Spring Boot
- Genera una app nueva de 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 -
Ten en cuenta que Initializr agregará automáticamente el spring-boot-starter-web
a tus dependencias en el pom.xml
de la app de plantilla.
- Cambia al directorio de la app de plantilla.
$ cd kotlin-jib-cloud-run
- Compila y ejecuta la app con Maven.
$ ./mvnw -DskipTests spring-boot:run
- Una vez iniciada, la app comenzará a escuchar en el puerto 8080. Haz clic en Vista previa en la Web en la barra de herramientas de Cloud Shell y selecciona Vista previa en el puerto 8080 para acceder a la app.
- Deberías recibir una respuesta 404 porque la app aún no realiza ninguna acción útil. Detén la app con
Control+C
.
4. Agrega un controlador web
- Crea la siguiente clase
Controller
en el paquete de demostración:
$ 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!"
}
}
- Vuelve a compilar y ejecuta la app.
$ ./mvnw spring-boot:run
- Vuelve a verificar la app con Vista previa en la Web . Esta vez, deberías ver el mensaje "
Kotlin app on Cloud Run, containerized by Jib!
". Detén la app conControl+C
.
5. Alojar tu app en contenedores y publicarla en Container Registry
Con Jib, puedes alojar tu app en contenedores de manera optimizada sin Docker y publicarla en cualquier registro de contenedores.
- Antes de continuar, debes activar la API de Container Registry. Esto solo debe hacerse una vez por proyecto para que se pueda acceder a la API.
$ gcloud services enable containerregistry.googleapis.com
- Ejecuta Jib para compilar una imagen de Docker y publicarla en Container Registry.
$ ./mvnw com.google.cloud.tools:jib-maven-plugin:3.1.1:build \ -Dimage=gcr.io/$GOOGLE_CLOUD_PROJECT/kotlin-jib-cloud-run
Eventualmente, verás el siguiente mensaje que indica que la app está alojada en un contenedor y enviada a tu Container Registry.
[INFO] Built and pushed image as gcr.io/PROJECT_ID/kotlin-jib-cloud-run ... [INFO] BUILD SUCCESS
Si ves un error, vuelve a verificar que $GOOGLE_CLOUD_PROJECT
esté configurado correctamente en el ID del proyecto de Google Cloud (PROJECT_ID
).
- Antes de continuar, comprueba si la imagen se publicó correctamente. Regresa a la consola de Cloud, haz clic en el menú de navegación y selecciona Container Registry.
Verás que tu imagen se publicó correctamente.
6. Ejecuta la app alojada en contenedores en Cloud Run
Cloud Run lleva a los contenedores sin servidores y con un ajuste de escala automático de tus contenedores sin estado.
- Vuelve a hacer clic en Menú de navegación y selecciona Cloud Run.
Si es la primera vez que accedes a Cloud Run, verás el siguiente diálogo para la configuración única. Haz clic en Comenzar a usar Cloud Run si aparece.
- En la página de Cloud Run, haz clic en Crear servicio.
- En la siguiente pantalla, haz clic en Seleccionar en Fuente. La fuente es la imagen que quieres ejecutar en Cloud Run.
- En el diálogo, se mostrará la imagen que compilaste anteriormente. Selecciona la imagen y haz clic en Continuar.
- Estás a solo unos clics de implementar la aplicación. En Deployment platform, elige Cloud Run (completamente administrado) para tener el servicio completamente administrado en Google Cloud. Elige una región adecuada para tu ubicación, selecciona Permitir invocaciones no autenticadas y haz clic en Crear. Eso es todo.
Cuando la imagen esté completamente implementada, la página de Cloud Run mostrará una URL para acceder a la app. ¡Échale un vistazo!
Al final, verás el mensaje que esperas de la app.
Kotlin app on Cloud Run, containerized by Jib!
Eso es todo. En el futuro, si necesitas implementar nuevas versiones de la app, haz clic en Implementar nueva revisión en la página.
7. Limpia
- Para limpiar tu entorno, debes borrar la app implementada en Cloud Run y la imagen publicada en Container Registry. Ve a Cloud Run, selecciona la app y haz clic en Borrar.
- De manera similar, ve a la página de Container Registry y borra la imagen.
8. Felicitaciones
¡Felicitaciones! Alojaste correctamente en contenedores tu app de Kotlin de Spring Boot y la implementaste en Cloud Run.
Con Jib, compilaste una imagen de contenedor optimizada sin Docker instalado ni escrito un Dockerfile, y lo publicaste en Container Registry. Jib optimiza la construcción de imágenes, de modo que cualquier persona sin un conocimiento profundo de Docker puede crear contenedores para aplicaciones Java de forma rápida y eficiente. Luego, con unos pocos clics, implementaste la app en Cloud Run para que empiece a entregar resultados de inmediato.
Más información
- Implementa una app de Java en Kubernetes en Google Kubernetes Engine
- Documentación de Cloud Run
- Descripción general de Cloud Run
- Presentación de Jib: Compila mejor las imágenes de Docker de Java
- Compila contenedores más rápido con Jib, una herramienta de compilación de imágenes de Google para apps de Java
- Jib: organiza tu app de Java en contenedores
- Canal de Jib Gitter
- Lista de distribución de los usuarios de Jib