Créer des conteneurs Java avec Jib

Jib crée des conteneurs sans utiliser de fichier Dockerfile ni nécessiter l'installation de Docker. Vous pouvez utiliser Jib dans les plug-ins Jib pour Maven ou Gradle, ou utiliser la bibliothèque Java Jib.

Que fait Jib ?

Jib gère toutes les étapes de l'empaquetage de votre application dans une image de conteneur. Vous n'avez pas besoin de connaître les bonnes pratiques pour créer des fichiers Dockerfile ou installer Docker.

Flux de compilation Docker :

Schéma illustrant les étapes entre le projet et le registre de conteneurs en cas d'utilisation de Docker.

Flux de compilation Jib :

Schéma illustrant l'absence d'étapes intermédiaires entre le projet et le registre de conteneurs en cas d'utilisation de Jib.

Jib organise votre application en plusieurs couches (dépendances, ressources et classes) et utilise la mise en cache des couches d'images Docker pour accélérer les compilations en recréant uniquement les modifications. L'organisation des couches de Jib et l'image de base de petite taille réduisent la taille globale de l'image, ce qui améliore les performances et la portabilité.

Avant de commencer

  1. Connectez-vous à votre compte Google.

    Si vous n'en possédez pas déjà un, vous devez en créer un.

  2. Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.

    Accéder à la page de sélection du projet

  3. Assurez-vous que la facturation est activée pour votre projet Cloud. Découvrez comment vérifier que la facturation est activée pour votre projet.

  4. Activez l'API Container Registry.

    Activer l'API

  5. Si vous n'avez pas encore Java, téléchargez, installez et configurez Java.
  6. Installez Maven 3.5 ou une version ultérieure.
  7. Installez et initialisez le SDK Cloud.
  8. Authentifiez-vous auprès de Container Registry en utilisant gcloud comme assistant d'identification Docker.
    gcloud auth configure-docker
    Vous pouvez également consulter la documentation sur la configuration de Jib pour découvrir d'autres méthodes d'authentification.

Compiler à l'aide de Jib

  1. Sélectionnez un projet existant et accédez au dossier source ou clonez l'exemple à l'aide de la commande suivante :

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

  2. Ajoutez le plug-in à votre fichier pom.xml :

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

    Remplacer

    • PROJECT par l'ID de votre projet Google Cloud
    • IMAGE par le nom de votre image.

    Si vous ne souhaitez pas modifier votre fichier pom.xml, vous pouvez utiliser la commande suivante :

        mvn compile com.google.cloud.tools:jib-maven-plugin:2.0.0:build \
            -Dimage=gcr.io/PROJECT/IMAGE
  3. Compilez et transférez l'image vers un registre de conteneurs :

    mvn compile jib:build

    Vous pouvez vérifier le bon déroulement de l'opération en affichant votre conteneur dans Google Container Registry.

    Si vous avez installé Docker, vous pouvez éventuellement compiler dans votre installation Docker locale afin d'inspecter ou d'exécuter l'image comme tout autre conteneur local :

    mvn compile jib:dockerBuild

Autres personnalisations

Vous pouvez personnaliser vos compilations Jib de manière similaire aux fichiers Dockerfile, par exemple en ajoutant des variables d'environnement et en sélectionnant une image de base.

Ajouter des variables d'environnement

Vous pouvez ajouter des variables d'environnement à votre compilation de la même manière qu'avec l'instruction ENV dans un fichier Dockerfile, comme suit :

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

Remplacer

  • PROJECT par l'ID de votre projet Google Cloud
  • IMAGE par le nom de votre image.
  • ENV_VAR correspond à NAME.
  • VALUE par la valeur souhaitée.

Votre application va maintenant envoyer la réponse Hello <var>VALUE</var>!

Modifier l'image de base

L'image de base est équivalente aux instructions FROM d'un fichier Dockerfile. Par défaut, Jib utilise distroless/java comme image de base. Les images Distroless ne contiennent que des dépendances d'exécution. Elles ne contiennent pas de gestionnaires de packages ni d'interfaces système, ni d'autres programmes susceptibles de se trouver dans une distribution Linux standard. L'image de base peut être mise à jour en modifiant le champ from.image.

Si vous souhaitez inclure une interface système pour le débogage, définissez l'image de base sur alpine:3 ou openjdk:VERSION (si Java est nécessaire).

Pour ajouter des packages système, vous devez créer une image de base avec ces packages installés. Pour plus d'informations, reportez-vous à la section Créer des conteneurs.

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

Essayez de mettre à jour le champ from.image vers une autre image de base Java, telle que openjdk:8-alpine.

Personnaliser d'autres aspects Java

Jib est compatible avec les configurations d'exécution Java qui peuvent être nécessaires pour exécuter votre application. Pour plus de personnalisations, consultez la section Extended Usage.

Transmettre le code

Configurer les paramètres par défaut de gcloud

Pour configurer gcloud avec les valeurs par défaut pour votre service Cloud Run, procédez comme suit :

  1. Définissez le projet par défaut :

    gcloud config set project PROJECT_ID

    Remplacez PROJECT_ID par le nom du projet que vous avez créé pour ce tutoriel.

  2. Si vous utilisez Cloud Run (entièrement géré), configurez gcloud pour la région choisie :

    gcloud config set run/region REGION

    Remplacez REGION par la région Cloud Run compatible de votre choix.

  3. Si vous utilisez Cloud Run pour Anthos sur Google Cloud, configurez gcloud pour votre cluster :

    gcloud config set run/cluster CLUSTER-NAME
    gcloud config set run/cluster_location REGION

    Remplacez les éléments suivants :

    • CLUSTER-NAME par le nom que vous avez utilisé pour votre cluster
    • REGION par l'emplacement de cluster compatible de votre choix

Emplacements Cloud Run

Cloud Run est régional, ce qui signifie que l'infrastructure qui exécute vos services Cloud Run est située dans une région spécifique et gérée par Google pour être disponible de manière redondante dans toutes les zones de cette région.

Lors de la sélection de la région dans laquelle exécuter vos services Cloud Run, vous devez tout d'abord considérer vos exigences en matière de latence, de disponibilité et de durabilité. Vous pouvez généralement sélectionner la région la plus proche de vos utilisateurs, mais vous devez tenir compte de l'emplacement des autres produits Google Cloud utilisés par votre service Cloud Run. L'utilisation conjointe de produits Google Cloud dans plusieurs emplacements peut avoir une incidence sur la latence et le coût de votre service.

Cloud Run est disponible dans les régions suivantes :

Soumis aux tarifs de niveau 1

  • asia-east1 (Taïwan)
  • asia-northeast1 (Tokyo)
  • asia-northeast2 (Osaka)
  • europe-north1 (Finlande)
  • europe-west1 (Belgique)
  • europe-west4 (Pays-Bas)
  • us-central1 (Iowa)
  • us-east1 (Caroline du Sud)
  • us-east4 (Virginie du Nord)
  • us-west1 (Oregon)

Soumis aux tarifs de niveau 2

  • asia-east2 (Hong Kong)
  • asia-northeast3 (Séoul, Corée du Sud)
  • asia-southeast1 (Singapour)
  • asia-southeast2 (Jakarta)
  • asia-south1 (Mumbai, Inde)
  • australia-southeast1 (Sydney)
  • europe-west2 (Londres, Royaume-Uni)
  • europe-west3 (Francfort, Allemagne)
  • europe-west6 (Zurich, Suisse)
  • northamerica-northeast1 (Montréal)
  • southamerica-east1 (São Paulo, Brésil)

Si vous avez déjà créé un service Cloud Run, vous pouvez afficher la région dans le tableau de bord Cloud Run de Cloud Console.

Déployer sur Cloud Run

Déployez votre conteneur à partir de Container Registry à l'aide du SDK Cloud vers Cloud Run ou Cloud Run pour Anthos sur Google Cloud.

Déployez l'image de conteneur à l'aide de la commande suivante :

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

Remplacer

  • SERVICE-NAME par le nom de service que vous avez choisi.
  • PROJECT par l'ID de votre projet Google Cloud
  • IMAGE par le nom de votre image.

Notez que l'image du conteneur est déployée sur le service et la région (Cloud Run) ou sur le cluster (Cloud Run pour Anthos sur Google Cloud) que vous avez précédemment configurés dans la section Configurer gcloud.

Si vous déployez sur Cloud Run, vous serez invité à autoriser les appels non authentifiés. Si vous souhaitez accéder immédiatement à votre service, répondez y, "Oui", à l'invite "Autoriser sans authentification". Si votre service est privé et que les requêtes doivent inclure l'authentification, répondez n, "Non", à l'invite "Autoriser sans authentification".

Si votre service est public, utilisez l'URL qui s'affiche après un déploiement réussi pour accéder au conteneur déployé. Si votre service est privé, utilisez la commande curl suivante pour appeler votre service :

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

S'il est déployé dans Cloud Run pour Anthos sur Google Cloud, consultez la section Accéder à votre service déployé.

Nettoyer

Si vous avez créé un projet pour ce tutoriel, supprimez-le. Si vous avez utilisé un projet existant et que vous souhaitez le conserver sans les modifications du présent tutoriel, supprimez les ressources créées pour ce tutoriel.

Supprimer le projet

Le moyen le plus simple d'empêcher la facturation est de supprimer le projet que vous avez créé pour ce tutoriel.

Pour supprimer le projet :

  1. Dans Cloud Console, accédez à la page Gérer les ressources.

    Accéder à la page Gérer les ressources

  2. Dans la liste des projets, sélectionnez le projet que vous souhaitez supprimer, puis cliquez sur Supprimer .
  3. Dans la boîte de dialogue, saisissez l'ID du projet, puis cliquez sur Arrêter pour supprimer le projet.

Supprimer les ressources du tutoriel

  1. Supprimez le service Cloud Run que vous avez déployé dans ce tutoriel :

    gcloud run services delete SERVICE-NAME

    SERVICE-NAME est le nom de service que vous avez choisi.

    Vous pouvez également supprimer des services Cloud Run à partir de Google Cloud Console.

  2. Supprimez les configurations gcloud par défaut que vous avez ajoutées lors de la configuration du tutoriel.

    Si vous utilisez Cloud Run (entièrement géré), supprimez le paramètre de région :

     gcloud config unset run/region
    

    Si vous utilisez Cloud Run pour Anthos sur Google Cloud, supprimez la configuration du cluster :

     gcloud config unset run/cluster run/cluster
     gcloud config unset run/cluster run/cluster_location
    
  3. Supprimez la configuration du projet :

     gcloud config unset project
    

Étape suivante

  • Pour en savoir plus sur le contrat que vos conteneurs doivent respecter pour pouvoir être déployés dans Cloud Run, consultez la page Contrat relatif aux conteneurs.
  • Pour automatiser les versions et les déploiements de vos services Cloud Run à l'aide des déclencheurs Cloud Build, configurez le déploiement continu.
  • Pour en savoir plus sur l'utilisation et la personnalisation de Jib, consultez le dépôt GitHub de Jib.