Compilar contenedores de Java con Jib

Jib compila contenedores sin usar un Dockerfile o que requieren una instalación de Docker. Puedes usar Jib en los complementos de Jib para Maven o Gradle, o puedes usar la biblioteca Java de Jib.

¿Qué hace Jib?

Jib controla todos los pasos de empaquetado de tu aplicación en una imagen de contenedor. No necesitas conocer las prácticas recomendadas para crear Dockerfiles ni tener instalado Docker.

Flujo de compilación de Docker:

Diagrama que muestra las etapas del proyecto a Container Registry mediante Docker.

Flujo de compilación de Jib:

Diagrama que no muestra etapas intermedias del registro del proyecto al contenedor con Jib.

Jib organiza tu aplicación en distintas capas; dependencias, recursos y clases; y usa el almacenamiento en caché de la capa de imagen de Docker para mantener las compilaciones rápidas con solo volver a compilar los cambios. La organización de capas de Jib y la imagen base pequeña mantienen el tamaño general de la imagen, lo que mejora el rendimiento y la portabilidad.

Antes de comenzar

  1. Accede a tu cuenta de Google Cloud. Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
  2. En la página del selector de proyectos de Google Cloud Console, selecciona o crea un proyecto de Google Cloud.

    Ir al selector de proyectos

  3. Comprueba que la facturación esté habilitada en tu proyecto.

    Descubre cómo puedes habilitar la facturación

  4. En la página del selector de proyectos de Google Cloud Console, selecciona o crea un proyecto de Google Cloud.

    Ir al selector de proyectos

  5. Comprueba que la facturación esté habilitada en tu proyecto.

    Descubre cómo puedes habilitar la facturación

  6. Habilita la API Container Registry.

    Habilita la API

  7. Si no tienes Java, debes descargarlo, instalarlo y configurarlo.
  8. Instala Maven 3.5 o una versión más reciente.
  9. Instala e inicializa el SDK de Cloud.
  10. Autentica en Container Registry mediante la herramienta de línea de comandos de gcloud como auxiliar de credenciales de Docker:
    gcloud auth configure-docker
    De manera opcional, consulta la documentación de configuración de Jib para conocer otras formas de autenticación.

Compila con Jib

  1. Selecciona un proyecto existente y navega a la carpeta de origen o clona la muestra con el siguiente comando:

         git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
         cd java-docs-samples/run/helloworld

  2. Agrega el complemento a tu pom.xml:

    <plugin>
      <groupId>com.google.cloud.tools</groupId>
      <artifactId>jib-maven-plugin</artifactId>
      <version>2.8.0</version>
      <configuration>
        <to>
          <image>gcr.io/PROJECT/IMAGE</image>
        </to>
      </configuration>
    </plugin>
    

    Reemplazar

    • PROJECT por el ID del proyecto de Google Cloud
    • IMAGE con el nombre de tu imagen.

    Si no deseas modificar tu pom.xml, puedes usar el siguiente comando:

        mvn compile com.google.cloud.tools:jib-maven-plugin:2.8.0:build \
            -Dimage=gcr.io/PROJECT/IMAGE
  3. Compila y envía la imagen a Container Registry:

    mvn compile jib:build

    Puedes verificar el éxito si visualizas el contenedor en tu Container Registry.

    De forma opcional, si tienes instalado Docker, puedes compilar tu instalación local de Docker para que pueda inspeccionar o ejecutar la imagen como cualquier otro contenedor local:

    mvn compile jib:dockerBuild

Personalizaciones adicionales

Puedes personalizar tus compilaciones de Jib de manera similar a los Dockerfiles, como agregar variables de entorno y seleccionar una imagen base.

Agrega variables del entorno

Puedes agregar variables de entorno a tu compilación de manera similar a la instrucción ENV en un Dockerfile, de la manera siguiente:

<plugin>
  <groupId>com.google.cloud.tools</groupId>
  <artifactId>jib-maven-plugin</artifactId>
  <version>2.8.0</version>
  <configuration>
    <to>
      <image>gcr.io/PROJECT/IMAGE</image>
    </to>
    <container>
      <environment>
        <ENV_VAR>VALUE</ENV_VAR>
      </environment>
    </container>
  </configuration>
</plugin>

Reemplazar

  • PROJECT por el ID del proyecto de Google Cloud
  • IMAGE con el nombre de tu imagen.
  • ENV_VAR con NAME.
  • VALUE por el valor deseado.

Ahora tu aplicación responderá con Hello <var>VALUE</var>!

Cambiar la imagen base

La imagen base es equivalente a las instrucciones de FROM en un Dockerfile. Para actualizar la imagen base, cambia el campo from.image.

Si deseas incluir un shell para la depuración, configura la imagen base en alpine:3 o openjdk:VERSION (si se necesita Java).

Para agregar paquetes del sistema, tendrás que crear una imagen base con esos paquetes instalados. Consulta Crea contenedores para obtener más información.

  <plugin>
    <groupId>com.google.cloud.tools</groupId>
    <artifactId>jib-maven-plugin</artifactId>
    <version>2.8.0</version>
    <configuration>
      <from>
        <image>gcr.io/PROJECT/BASE_IMAGE</image>
      </from>
      <to>
        <image>gcr.io/PROJECT/IMAGE_NAME</image>
      </to>
    </configuration>
  </plugin>

Intenta actualizar el campo from.image a otra imagen base de Java, como openjdk:8-alpine.

Personaliza otros aspectos de Java

Jib es compatible con las configuraciones de entorno de ejecución de Java que pueden ser necesarias para ejecutar tu aplicación. Para obtener más personalizaciones, consulta Uso extendido.

Envía el código

Configura los valores predeterminados de gcloud

A fin de configurar gcloud con los valores predeterminados para el servicio de Cloud Run, sigue estos pasos:

  1. Configura el proyecto predeterminado:

    gcloud config set project PROJECT_ID

    Reemplaza PROJECT_ID por el nombre del proyecto que creaste para este instructivo.

  2. Configura gcloud en la región que elegiste:

    gcloud config set run/region REGION

    Reemplaza REGION por la región de Cloud Run compatible que prefieras.

Ubicaciones de Cloud Run

Cloud Run es regional, lo que significa que la infraestructura que ejecuta los servicios se ubica en una región específica, y Google la administra para que esté disponible de manera redundante en todas las zonas de esa región.

El cumplimiento de los requisitos de latencia, disponibilidad o durabilidad es el factor principal para seleccionar la región en la que se ejecutan los servicios de Cloud Run. Por lo general, puedes seleccionar la región más cercana a los usuarios, pero debes considerar la ubicación de los otros productos de Google Cloud que usa el servicio de Cloud Run. Si usas productos de Google Cloud en varias ubicaciones, la latencia y el costo del servicio pueden verse afectados.

Cloud Run está disponible en las siguientes regiones:

Sujetas a los Precios del nivel 1

Sujetas a los Precios del nivel 2

  • asia-east2 (Hong Kong)
  • asia-northeast3 (Seúl, Corea del Sur)
  • asia-southeast1 (Singapur)
  • asia-southeast2 (Yakarta)
  • asia-south1 (Bombay, India)
  • asia-south2 Delhi (India)
  • australia-southeast1 (Sídney)
  • australia-southeast2 (Melbourne)
  • europe-central2 (Varsovia, Polonia)
  • europe-west2 (Londres, Reino Unido)
  • europe-west3 (Fráncfort, Alemania)
  • europe-west6 (Zúrich, Suiza) Ícono de la hoja Bajo nivel de CO2
  • northamerica-northeast1 (Montreal) Ícono de la hoja Bajo nivel de CO2
  • northamerica-northeast2 (Toronto)
  • southamerica-east1 (São Paulo, Brasil) Ícono de la hoja Bajo nivel de CO2
  • us-west2 (Los Ángeles)
  • us-west3 (Salt Lake City)
  • us-west4 (Las Vegas)

Si ya creaste un servicio de Cloud Run, puedes ver la región en el panel de Cloud Run en Cloud Console.

Implementar en Cloud Run

Implementa tu contenedor de Container Registry mediante el SDK de Cloud en Cloud Run o Cloud Run for Anthos.

Implementa la imagen del contenedor con el siguiente comando:

gcloud run deploy SERVICE-NAME \
    --image gcr.io/PROJECT/IMAGE \
    --platform managed

Reemplazar

  • SERVICE-NAME por el nombre de servicio que elegiste.
  • PROJECT por el ID del proyecto de Google Cloud
  • IMAGE con el nombre de tu imagen.

Ten en cuenta que la imagen del contenedor se implementa en el servicio y la región (Cloud Run) o el clúster (Cloud Run for Anthos) que configuraste antes en Configura gcloud.

Si se implementa en Cloud Run, se te pedirá que permitas invocaciones no autenticadas. Si deseas tener acceso inmediato a tu servicio, responde y, “Sí” a la opción “Permitir sin autenticación”. Si tu servicio es privado y las solicitudes deben incluir la autenticación, responde n, “No” al mensaje “Permitir no autenticado”.

Si tu servicio es público, usa la URL que se muestra después de una implementación exitosa para visitar el contenedor implementado. Si tu servicio es privado, usa el siguiente comando curl para invocarlo:

curl -H "Authorization: bearer $(gcloud auth print-identity-token)" SERVICE_URL

Si se implementa en Cloud Run for Anthos, consulta Accede al servicio implementado.

Limpia

Si creaste un proyecto nuevo para este instructivo, bórralo. Si usaste un proyecto existente y deseas conservarlo sin los cambios que se agregaron en este instructivo, borra los recursos creados para el instructivo.

Borra el proyecto

La manera más fácil de eliminar la facturación es borrar el proyecto que creaste para el instructivo.

Para borrar el proyecto, sigue estos pasos:

  1. En Cloud Console, ve a la página Administrar recursos.

    Ir a Administrar recursos

  2. En la lista de proyectos, elige el proyecto que quieres borrar y haz clic en Borrar.
  3. En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrar el proyecto.

Borra los recursos del instructivo

  1. Usa este comando para borrar el servicio de Cloud Run que implementaste en este instructivo:

    gcloud run services delete SERVICE-NAME

    En el ejemplo anterior, SERVICE-NAME es el nombre del servicio que elegiste.

    También puedes borrar los servicios de Cloud Run desde Google Cloud Console.

  2. Quita la configuración de región predeterminada de gcloud que agregaste durante la configuración en el instructivo:

     gcloud config unset run/region
    
  3. Quita la configuración del proyecto:

     gcloud config unset project
    

¿Qué sigue?