O Google oferece uma ferramenta eficiente de criação de imagens com que é possível criar e publicar facilmente uma imagem de contêiner do Docker otimizada para apps Java em pouco tempo, sem Docker ou Dockerfile. O Google Cloud também oferece a tecnologia sem servidor para contêineres com o Cloud Run, uma plataforma de computação gerenciada que escalona automaticamente seus contêineres sem estado. Neste codelab, você vai aprender como é fácil conteinerizar seu app Spring Boot Kotlin, publicar no Container Registry e executar a imagem no Google Cloud de maneira integrada.
Este codelab mostra como configurar um app simples em Kotlin, que demonstra o uso de serviços e ferramentas do Google Cloud, incluindo Jib, Container Registry e Cloud Run.
Pré-requisitos
- Noções básicas sobre a linguagem de programação Java e ferramentas
- Conhecimento de editores de texto padrão do Linux, como Vim, Emacs e nano
Atividades deste laboratório
- Configure um app Kotlin Spring Boot.
- Crie uma imagem do Docker otimizada.
- Publique a imagem no Container Registry.
- Execute o app em contêiner no Cloud Run.
O que é necessário
- um projeto do Google Cloud;
- Um navegador, como o Google Chrome
Configuração de ambiente autoguiada
- Faça login no console do Cloud e crie um novo projeto ou reutilize um existente. Crie uma se você ainda não tiver uma conta do Gmail ou do G Suite.
Lembre-se do código do projeto, um nome exclusivo em todos os projetos do Google Cloud. O nome acima já foi escolhido e não servirá para você. Faremos referência a ele mais adiante neste codelab como PROJECT_ID
.
- Em seguida, será necessário ativar o faturamento no console do Cloud para usar os recursos do Google Cloud.
A execução deste codelab não deve custar mais do que alguns dólares, mas pode ser mais se você decidir usar mais recursos ou deixá-los em execução.
Novos usuários do Google Cloud estão qualificados para um teste sem custo financeiro de US$300.
Cloud Shell
Embora o Google Cloud possa ser operado remotamente em seu laptop, neste codelab vamos usar o Cloud Shell, um ambiente de linha de comando executado no Google Cloud.
Ativar o Cloud Shell
- No console do Cloud, clique em Ativar o Cloud Shell
.
Se você nunca tiver iniciado o Cloud Shell, verá uma tela intermediária (abaixo da dobra) com a descrição do que ele é. Se esse for o caso, clique em Continuar e você não o verá novamente. Esta é a aparência dessa tela única:
Leva apenas alguns instantes para provisionar e se conectar ao Cloud Shell.
Essa máquina virtual contém todas as ferramentas de desenvolvimento necessárias. Ela oferece um diretório principal persistente de 5 GB, além de ser executada no Google Cloud. Isso aprimora o desempenho e a autenticação da rede. Praticamente todo o seu trabalho neste codelab pode ser feito em um navegador ou no seu Chromebook.
Depois de se conectar ao Cloud Shell, você já estará autenticado e o projeto já estará configurado com seu ID do projeto.
- Execute o seguinte comando no Cloud Shell para confirmar que você está autenticado:
gcloud auth list
Resposta ao comando
Credentialed Accounts ACTIVE ACCOUNT * <my_account>@<my_domain.com> To set the active account, run: $ gcloud config set account `ACCOUNT`
gcloud config list project
Resposta ao comando
[core] project = <PROJECT_ID>
Se o projeto não estiver configurado, configure-o usando este comando:
gcloud config set project <PROJECT_ID>
Resposta ao comando
Updated property [core/project].
- Gere um novo app Spring Boot com o Spring Initializr.
$ curl https://start.spring.io/starter.tgz \ -d language=kotlin \ -d dependencies=web \ -d baseDir=kotlin-jib-cloud-run | tar -xzvf -
O Initializr adiciona automaticamente o spring-boot-starter-web
às dependências no pom.xml
do app de modelo.
- Mude para o diretório do app de modelo.
$ cd kotlin-jib-cloud-run
- Crie e execute o app usando o Maven.
$ ./mvnw -DskipTests spring-boot:run
- Depois de iniciado, o app vai começar a ouvir na porta 8080. Clique em Visualização da Web
na barra de ferramentas do Cloud Shell e selecione Visualizar na porta 8080 para acessar o app.
- Você vai receber uma resposta 404 porque o app ainda não faz nada de útil. Interrompa o app com o
Control+C
.
- Crie a seguinte classe
Controller
no pacote de demonstração:
$ 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!"
}
}
- Recrie e execute o app.
$ ./mvnw spring-boot:run
- Verifique o app de novo usando a Visualização da Web
. Desta vez, você vai ver a mensagem "
Kotlin app on Cloud Run, containerized by Jib!
". Pare o app comControl+C
.
Com o Jib, é possível conteinerizar seu app de maneira otimizada sem o Docker e publicar em qualquer registro de contêiner.
- Antes de continuar, ative a API Container Registry. Isso só precisa ser feito uma vez por projeto para tornar a API acessível.
$ gcloud services enable containerregistry.googleapis.com
- Execute o Jib para criar uma imagem do Docker e publicar no Container Registry.
$ ./mvnw com.google.cloud.tools:jib-maven-plugin:1.8.0:build \ -Dimage=gcr.io/$GOOGLE_CLOUD_PROJECT/kotlin-jib-cloud-run
Por fim, você vai receber a seguinte mensagem informando que o app foi inserido em um contêiner e enviado ao Container Registry.
[INFO] Built and pushed image as gcr.io/PROJECT_ID/kotlin-jib-cloud-run ... [INFO] BUILD SUCCESS
Se você encontrar um erro, verifique se $GOOGLE_CLOUD_PROJECT
está definido corretamente como o ID do projeto do Google Cloud (PROJECT_ID
).
- Antes de continuar, verifique se a imagem foi publicada. Volte ao console do Cloud, clique em Menu de navegação
e selecione Container Registry.
Você vai ver que a imagem foi publicada.
O Cloud Run traz a tecnologia sem servidor para contêineres, escalonando automaticamente seus contêineres sem estado.
- Clique novamente em Menu de navegação
e selecione Cloud Run.
Se esta for a primeira vez que você acessa o Cloud Run, a caixa de diálogo a seguir vai aparecer para uma configuração única. Clique em Começar a usar o Cloud Run se essa opção aparecer.
- Na página do Cloud Run, clique em Criar serviço.
- Na próxima tela, clique em Selecionar em Origem. A origem é a imagem que você quer executar no Cloud Run.
- A caixa de diálogo vai mostrar a imagem criada anteriormente. Selecione a imagem e clique em Continuar.
- Faltam apenas alguns cliques para implantar o app agora. Em Plataforma de implantação, escolha Cloud Run (totalmente gerenciado) para que o serviço seja totalmente gerenciado no Google Cloud. Escolha uma região adequada para sua localização, selecione Permitir invocações não autenticadas e clique em Criar. Pronto!
Quando a imagem for totalmente implantada, a página do Cloud Run vai mostrar um URL para acessar o app. Confira!
No final, você vai ver a mensagem esperada do app.
Kotlin app on Cloud Run, containerized by Jib!
Pronto! No futuro, se você precisar implantar novas versões do app, clique em Implantar nova revisão na página.
- Para limpar seu ambiente, exclua o app implantado no Cloud Run e a imagem publicada no Container Registry. Acesse o Cloud Run, selecione o app e clique em Excluir.
- Da mesma forma, acesse a página do Container Registry e exclua a imagem.
Parabéns! Você conteinerizou e implantou um app Kotlin do Spring Boot no Cloud Run.
Usando o Jib, você criou uma imagem de contêiner otimizada sem instalar o Docker ou escrever um Dockerfile e a publicou no Container Registry. O Jib otimiza a construção de imagens para que qualquer pessoa sem conhecimento aprofundado do Docker possa contentorizar apps Java com rapidez e eficiência. Em seguida, com apenas alguns cliques, você implantou o app no Cloud Run para começar a veicular em pouco tempo.
Saiba mais
- Implantar um app Java no Kubernetes no Google Kubernetes Engine
- Documentação do Cloud Run
- Visão geral do Cloud Run
- Conheça melhor as imagens Java Jib-build do Docker
- Crie contêineres mais rápido com o Jib, uma ferramenta de build de imagens do Google para apps Java
- Jib: coloque seu app Java em um contêiner
- Canal do Jib no Gitter
- Lista de e-mails dos usuários do Jib