Crear aplicaciones escalables sin gestionar infraestructura es uno de los objetivos principales del desarrollo moderno. Con Cloud Run de Google Cloud Platform, puedes desplegar aplicaciones en contenedores de forma completamente serverless, pagando solo por el uso real.
En este tutorial aprenderás paso a paso cómo crear y desplegar una aplicación en Java utilizando Spring Boot, empaquetarla con Docker y publicarla en Cloud Run. Además, entenderás cómo funciona el flujo completo desde la construcción de la imagen en Artifact Registry hasta la exposición de un endpoint HTTP accesible desde cualquier lugar.
Este enfoque es ideal para desarrolladores backend que buscan una solución moderna, escalable y alineada con arquitecturas basadas en microservicios y contenedores.
Crear proyecto en GCP
Ve a: https://console.cloud.google.com
Activa una cuenta facturación google cloud y crea un proyecto nuevo en GCP
Activa APIs:
- Cloud Run: https://console.cloud.google.com/apis/library/run.googleapis.com
- Artifact Registry: https://console.cloud.google.com/apis/library/artifactregistry.googleapis.com
Adicional, debemos tener instalado en nuestros equipos de computo la consola CLI de GCP
Crear app Java simple
Para crear el proyecto en java tenemos dos opciones:
- Crear un arquetipo en java de tipo webapp en donde mostremos un JSP con datos simples
- ⚠ Para ejecutar la aplicación, necesitamos de un servidor tomcat, así que esta opción es poco recomendable
- Crear un proyecto Spring boot con la extensión web para dispones un API
De momento solo necesitamos que al ejecutar la aplicación y accedamos a la web por medio a la url, si esta iniciando y no conoce mucho de java, recomiendo seguir los pasos con el proyecto de spring boot
cloudrun-java-demo/
├── src/main/java/com/example/demo/
│ └── DemoApplication.java
├── pom.xml
└── Dockerfile
Procedemos a crear el proyecto con https://start.spring.io/ mas detalle puede guiarse en Crear un proyecto Spring boot.
- Project: maven
- Language: Java
- Spring boot: 4.0.4
- Project Metadata:
- Group: com.oscar
- Artifact: cloudrun-java-demo
- Name: cloudrun-java-demo
- Description: Ejercicio de cloudrun con Java demo
- Package name: com.oscar.cloudrun-java-demo
- Packaging: Jar
- Java: 17
- Dependencies
- Spring Web
Generamos y descargamos el archivo y lo descomprimimos en un directorio.
Crear HomeController
Para este ejemplo crearemos el archivo HomeController.java en donde colocaremos el siguiente código:
package com.oscar.cloudrun_java_demo;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HomeController {
@GetMapping("/")
public String home() {
return "Hola desde Cloud Run 🚀";
}
}
Estamos mostrando un mensaje basico al ingresar a la url inicial.
Compilar proyecto
Revisa comandos básicos de maven para mas información, de momento ejecuta:
mvn clean package
Genera: target/cloudrun-java-demo-0.0.1-SNAPSHOT.jar
Nota: el nombre del .jar se ha generado e la configuración del pom.xml en la etiqueta artifactId y version
Crear Dockerfile
Procedemos a crear el dockerfile en donde cargaremos la aplicación Java creada para empaquetara en una imagen y que se ejecute en un contenedor desde el Artifact Registry
Procedemos a crear el Dockerfile y colocamos el siguiente código:
FROM eclipse-temurin:17-jdk-alpine
WORKDIR /app
COPY target/cloudrun-java-demo-0.0.1-SNAPSHOT.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","/app/app.jar"]
El dockerfile anterior realiza lo siguiente:
- Definimos como imagen base un Java 17 JDK
- Indicamos el directorio de trabajo como
/app - Copiamos el jar generado desde el origine que es el directorio a la imagen, renombrando como app.jar
- Exponemos el puerto 8080
- Ejecutamos el jar con el comando Java
Crear Artifact Registry
Procedemos a crear el Artifact Directory, para poder subir la imagen Docker creada en Crear Dockerfile
Vamos a crear un repositorio, para ello ingresamos al recurso Artifact Registry donde vamos a segir los siguientes pasos:
- Indicamos el nombre del repositorio
- Damos el formato, en este caso sera el de Docker
- Seleccionamos la región de preferencia
- Damos una descripción al repositorio
En el listado de repositorios procedemos a ingresar al detalle del repositorio en donde vamos a encontrarlo vacio de momento.
Vamos a la consola de Cloud Run en donde realizamos la siguiente configuración:
gcloud auth configure-docker us-central1-docker.pkg.dev
El comando anterior configura la autenticación entre Docker y el registro de artefactos de Google Cloud, específicamente Artifact Registry.
Modifica el archivo de configuración de Docker
After update, the following will be written to your Docker config file located at [C:\Users\ofernandezigeoerp\.docker\config.json]:
{
"credHelpers": {
"gcr.io": "gcloud",
"us.gcr.io": "gcloud",
"eu.gcr.io": "gcloud",
"asia.gcr.io": "gcloud",
"staging-k8s.gcr.io": "gcloud",
"marketplace.gcr.io": "gcloud"
}
}
Do you want to continue (Y/n)?
Docker configuration file updated.
Generar imagen Docker
Procedemos a generar la imagen del proyecto
docker build -t us-central1-docker.pkg.dev/steadfast-sign-268019/cloud-run-repo/demo .
Luego ejecutamos la imagen
docker run --rm --name=test -p 8085:8080 us-central1-docker.pkg.dev/steadfast-sign-268019/cloud-run-repo/demo:latest
Realizamos una prueba en http://localhost:8085/ y verificamos que se muestre correctamente el mensaje
Subir imagen al repositorio
Para subir la imagen al repositorio, debemos hacer lo siguiente:
docker push us-central1-docker.pkg.dev/steadfast-sign-268019/cloud-run-repo/demo
Respuesta:
Using default tag: latest
The push refers to repository [us-central1-docker.pkg.dev/steadfast-sign-268019/cloud-run-repo/demo]
63f27fb7be93: Pushed
6a9c7a632320: Pushed
f7409d4c66cc: Pushed
08e98c779fb9: Pushed
0a828e8088fe: Pushed
344ae0b6479e: Pushed
989e799e6349: Pushed
latest: digest: sha256:56ca271764655b8336167ec8046ee3910078a58b256d530793840e14b2ed8d5c size: 1786
Deploy en Cloud Run
Deploy desde la Consola Web
Realizamos el logia en la consola y procedemos a realizar los siguientes pasos:
- Buscamos el recurso de la Cloud Run
- En el menú, ingresamos los servicios
- Procedmeos a crear un nuevo servicio
- Seleccionamos implementar una revisión desde una imagen de contenedor
- Damos en buscar la imagen en Artifact Registry
- Seleccionamos el contenedor creado y subido en la sección Crear Artifact Registry
Luego realizamos la configuración básica para la Cloud Run como se muestra en la siguiente imagen.
Damos en crear, en donde empresaria a implementar la Cloud Run con el contenedor seleccionado
Deploy desde comandos por CLI de GCP
Podemos desplegar la Cloud Run desde la consola CLI de GCP usando el siguiente comando:
gcloud run deploy demo-service --image us-central1-docker.pkg.dev/steadfast-sign-000000/cloud-run-repo/demo --platform managed --region us-central1 --allow-unauthenticated
El comando anterior realiza lo siguiente:
- Toma una imagen Docker desde Artifact Registry
- Crea (o actualiza) un servicio en Cloud Run
- Despliega una nueva revisión (revisión)
- Expone un endpoint HTTP (opcionalmente público)
Respuesta:
Deploying container to Cloud Run service [demo-service] in project [steadfast-sign-268019] region [us-central1]
OK Deploying new service... Done.
OK Creating Revision...
OK Routing traffic...
OK Setting IAM Policy...
Done.
Service [demo-service] revision [demo-service-00001-6db] has been deployed and is serving 100 percent of traffic.
Service URL: https://demo-service-000000.us-central1.run.app
Listado de la Cloud Run
Desde la consola web de GCP
Paso a paso
- Ve a: https://console.cloud.google.com
- Asegúrate de tener seleccionado tu proyecto (arriba a la izquierda)
- En el menú lateral:
- Ir a Serverless
- Click en Cloud Run
👉 Ruta directa: Menu → Serverless → Cloud Run
Desde CLI (gcloud)
Listar todos los servicios
gcloud run services list
Listar por región (recomendado)
gcloud run services list --region=us-central1
Cloud Run es regional, así que esto evita confusión.
Ejemplo de salida
SERVICE REGION URL
demo-service us-central1 https://demo-service-xxxx.a.run.app
Probar Cloud Run
Rodemos a probar la Cloud Run generada de nuestro proyecto, ingresando a la URL que se ha generado tras finalizar el despliegue y ejecución del contenedor:
Esta la podemos obtener viendo el detalle desde la consola web o desde el comando de la CLI.
gcloud run services describe demo-service --region=us-central1
👉 Aquí obtienes:
- URL
- Imagen usada
- Variables de entorno
- Configuración de CPU/RAM
- Revisiones
Ingresamos a la URL que se ha generado, ejemplo puede ser esta: https://demo-service-562360000006.us-central1.run.app/
Eliminar Cloud Run y el Repositorio Artifact Registry
Finalizado el ejercicio, procedemos a eliminar lo creado, para no generar cobros adicionales. A continuación, tienes los comandos exactos y seguros para eliminar tanto el servicio en Cloud Run como el repositorio en Artifact Registry.
Eliminar servicio de Cloud Run
Podemos eliminar la cloud run de la siguiente forma:
Parámetros
- demo-service → nombre del servicio
- --region → debe coincidir con donde lo desplegaste
gcloud run services delete demo-service --region=us-central1 --platform=managed
Respuesta:
Service [demo-service] will be deleted.
Do you want to continue (Y/n)? y
Deleting [demo-service]...done.
Deleted service [demo-service].
Podemos verificar el nombre y saber si se elimino la Cloud Run con:
gcloud run services list
Eliminar imagen (opcional pero recomendado)
Primero lista las imágenes:
gcloud artifacts docker images list us-central1-docker.pkg.dev/TU_PROJECT_ID/cloud-run-repo
Eliminar una imagen en especifico:
gcloud artifacts docker images delete us-central1-docker.pkg.dev/TU_PROJECT_ID/cloud-run-repo/demo --delete-tags --quiet
Eliminar repositorio completo (Artifact Registry)
gcloud artifacts repositories delete cloud-run-repo --location=us-central1
Orden recomendado (importante)
- Eliminar servicio Cloud Run
- Eliminar imágenes
- Eliminar repositorio
👉 Evita errores de dependencias o residuos.