Realizamos los pasos para desplegar Micronaut en Cloud Run con un contenedor docker
Requisitos previos
Pasos para desplegar Micronaut en Cloud Run (GCP)
Crear una app Micronaut nueva
Podemos realizar por medio de https://micronaut.io/launch donde seleccionamos las siguientes configuraciones:
- Application Type: Micronaut Application
- Java Version: 17
- Name: cloudrun
- Base Package: example.micronaut
- Micronaut Version: 4.8.2
- Language: Java
- Build Tool: Maven
- Test Framework: jUnit
- Included Features: http-clientclose
Damos en descargar y descomprimir el JAR
O podemos usar el comando de consola
mn create-app --build=maven --jdk=17 --lang=java --test=junit --features=http-client com.example.demo
Esto crea una app simple con controlador HTTP y Maven como gestor de build.
Crear un controlador REST (opcional si ya lo tienes)
Procedemos a crear un controlador para mostrar un mensaje al acceder a la URL, para ello puedes seguir los ejemplos de crear controladores.
En el paquete example.micronaut creamos la clase HelloController
package example.micronaut;
import io.micronaut.http.annotation.Controller;
import io.micronaut.http.annotation.Get;
@Controller("/")
public class HelloController {
@Get
public String hello() {
return "Hola desde Micronaut en Cloud Run!";
}
}
Crear un archivo Dockerfile
Procedemos a crear el dockerfile en donde cargaremos la aplicación MN creada para empaquetarla 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 as build
WORKDIR /app
COPY . .
RUN ./mvnw clean package
FROM eclipse-temurin:17-jre
EXPOSE 8080
COPY --from=build /app/target/cloudrun-0.1.jar app.jar
ENTRYPOINT ["java", "-jar", "app.jar"]
- Definimos como imagen base un Java 17 JDK
- Indicamos el directorio de trabajo como
/app - Copiamos todo el contenido del proyecto al la imagen
- Realizamos el build de la aplicación
- Descargamos java jre 17
- Exponemos el puerto 8080 cuando inicie el contenedor
- Renombremos el jar generado a app.jar
- Dejamos los comandos para cuando inicie el contenedor
Probar localmente (opcional)
Procedemos a crear la imagen usando docker build de la siguiere forma:
docker build -t micronaut-cloudrun .
Esto creara la imagen en local donde podemos hacer ejecutar un contenedor con esta imagen para probar su funcionamiento:
docker run -p 8080:8080 micronaut-cloudrun
Finalizando el docker run, abre: http://localhost:8080/
Crear Artifact Registry
Procedemos a crear el Artifact Directory, para poder subir la imagen Docker
Ejecutamos el siguiente comando, donde crea un repositorio de contenedores Docker en Artifact Registry dentro de Google Cloud Platform.
gcloud artifacts repositories create micronaut-repo --repository-format=docker --location=us-central1
- gcloud artifacts repositories create micronaut-repo: Se crea un repositorio lógico llamado micronaut-repo
- gcloud → CLI de GCP
- artifacts repositories → módulo de Artifact Registry
- create → acción
- micronaut-repo → nombre del repositorio
- --repository-format=docker: Estás creando un repositorio para imágenes Docker
- --location=us-central1: Define la región donde vive el repositorio.
Cuando ejecutas el comando:
- GCP crea un repositorio en Artifact Registry
- Se habilita almacenamiento para imágenes Docker
- Se genera un endpoint tipo: us-central1-docker.pkg.dev para hacer docker push y pull
Ahora ejecutamos el siguiente comando:
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
Construir y subir imagen Docker
Procedemos a crear la imagen Docker final, en donde ejecutaremos el siguiente comando: (Reemplaza PROJECT-ID con tu ID real de GCP)
docker tag micronaut-cloudrun us-central1-docker.pkg.dev/PROJECT-ID/micronaut-repo/micronaut-cloudrun
Liego subimos la imagen generada a repositorio creado anteriormente:
docker push us-central1-docker.pkg.dev/PROJECT-ID/micronaut-repo/micronaut-cloudrun
Desplegar en Cloud Run
Podemos desplegar la Cloud Run desde la consola CLI de GCP usando el siguiente comando:
gcloud run deploy micronaut-cloudrun --image us-central1-docker.pkg.dev/PROJECT-ID/micronaut-repo/micronaut-cloudrun --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)
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
Verificar
Después del despliegue, GCP te dará una URL pública como:
https://micronaut-cloudrun-xyz.a.run.app
Visítala y deberías ver el mensaje "Hola desde Micronaut en Cloud Run!".
Consejos finales
- Usa
--allow-unauthenticatedsi quieres que cualquiera pueda acceder (para pruebas). - Puedes configurar variables de entorno con
--set-env-vars. - Para producción, considera añadir autenticación y uso de Secret Manager.