Detaillierte Schritte zur Verwendung von Jib für die Docker-Bereitstellung in Spring Cloud

Detaillierte Schritte zur Verwendung von Jib für die Docker-Bereitstellung in Spring Cloud

Einführung in Jib

Jib ist eine von Google entwickelte Bibliothek, die Docker- und OCI-Images von Java-Anwendungen direkt erstellen kann. Sie wird in Form von Maven- und Gradle-Plug-Ins bereitgestellt.

Mit Jib können Java-Entwickler zum Erstellen von Containern die ihnen vertrauten Java-Tools verwenden. Jib ist ein schnelles und einfaches Tool zum Erstellen von Container-Images, das alle erforderlichen Schritte zum Verpacken Ihrer Anwendung in ein Container-Image übernimmt. Sie müssen dafür weder eine Docker-Datei schreiben noch Docker installieren und es lässt sich direkt in Maven und Gradle integrieren – fügen Sie einfach das Plug-In zu Ihrem Build hinzu, und Sie können Ihre Java-Anwendung sofort in einen Container packen.

Jib Open Source-Adresse: https://github.com/GoogleContainerTools/jib

Allgemeiner Docker-Build-Prozess

alt img

Jib-Build-Prozess

alt img

Jib-Integration

Das Projekt ist Spring Cloud, Version Hoxton.SR1.

alt img

Um Jib zu integrieren, müssen Sie nur das Jib-Plugin zu POM hinzufügen.

<Plugin>
        <groupId>com.google.cloud.tools</groupId>
        <artifactId>jib-maven-plugin</artifactId>
        <version>${jib.version}</version>
      </plugin>

Jib-bezogene Komplettkonfiguration

<Eigenschaften>
    <!-- Jib-Docker-Konfiguration-->
    <!-- Jib-Version -->
    <jib.version>2.2.0</jib.version>
    <!-- Ob die Jib-Verpackung übersprungen werden soll -->
    <jib.skip>wahr</jib.skip>
    <!-- Name des Warehouse-Bildes -->
    <jib.repository.name>akk-system</jib.repository.name>
    <!-- Startklasse -->
    <jib.main.class>com.akk.GatewayApplication</jib.main.class>
    <!-- Benutzername für die Anmeldung beim Warehouse -->
    <REGISTRY_USERNAME>222222222222</REGISTRY_USERNAME>
    <!-- Lager-Login-Passwort -->
    <REGISTRIERUNGSPASSWORT>111111111111</REGISTRIERUNGSPASSWORT>
</Eigenschaften>
 <Plugins>
    <Plugin>
      <groupId>com.google.cloud.tools</groupId>
      <artifactId>jib-maven-plugin</artifactId>
      <version>${jib.version}</version>
      <Konfiguration>
        <überspringen>${jib.skip}</überspringen>
        <!-- Konfigurieren Sie das Basis-Image -->
        <von>
          <image>openjdk:8-jre-alpine</image>
        </von>
        <!-- Push-Adresse, Warehouse-Name und Spiegelname konfigurieren-->
        <bis>
          <image>registry.cn-hangzhou.aliyuncs.com/akk_java/${jib.repository.name}</image>
          <Tags>
            <!-- <tag>${jib.repository.name}</tag>-->
            <!-- <tag>${version}</tag>-->
          </tags>
          <Berechtigung>
            <Benutzername>${REGISTRY_USERNAME}</Benutzername>
            <Passwort>${REGISTRY_PASSWORD}</Passwort>
          </auth>
        </to>
        <!--Private Server sind http statt https. Standardmäßig pusht Jib nicht auf private Server, die nicht https verwenden. Private Server werden hinzugefügt, öffentliche Server jedoch nicht. -->
        <!-- <allowInsecureRegistries>true</allowInsecureRegistries>-->
        <Behälter>
          <Hauptklasse>${jib.main.class}</Hauptklasse>
          <Beschriftungen>
            <name>${Artefakt-Id}</name>
          </Beschriftungen>
        </container>
      </Konfiguration>
      <!--An Maven-Lebenszyklus gebunden-->
      <!-- <Ausführungen>-->
      <!-- <Ausführung>-->
      <!-- <phase>Paket</phase>-->
      <!-- <Ziele>-->
      <!-- <goal>bauen</goal>-->
      <!-- </goals>-->
      <!-- </execution>-->
      <!-- </executions>-->
    </plugin>
  </plugins>

Parameterbeschreibung:
${jib.version} Jib-Version: Wählen Sie nach Belieben
${jib.skip} Ob Jib übersprungen werden soll: Das Jib-Plug-In wird im POM unter dem Stammverzeichnis abgelegt, sodass alle Module des Projekts Jib-Operationen ausführen. Wenn die öffentlichen Abhängigkeitsmodule des Projekts nicht gepackt werden müssen, können Sie diese Eigenschaft neu definieren und Jib überspringen
${jib.repository.name} Name des Mirror-Push-Repository: Repository-Name
${version} Bildversion: die Version des gepushten Bildes
${REGISTRY_USERNAME} Benutzername des Spiegel-Repositorys: Anmeldekonto für privates Repository
${REGISTRY_PASSWORD} Passwort für Spiegel-Repository: Anmeldepasswort für privates Repository
${jib.main.class} Startklasse des Projektmoduls: Startklasse des Projektmoduls, Spring Boot-Startklasse

form -Tag definiert das Basis-Image, das hier auf openjdk:8-jre-alpine basiert, Sie können aber auch andere verwenden. to definiert die Push-Informationen für das kompilierte Bild, image definiert die Push-Bildnameninformationen und tags “ pusht das Bild-Tag. Sie können das angegebene Bild über das Tag abrufen. auth definiert die Anmeldeinformationen für ein privates Repository. container definiert die Inhaltsinformationen des Bildes und mainClass startet die Hauptklasse. labels Schlüssel-Wert-Paare für Anwendungsmetadaten, ähnlich den Beschriftungen von Docker. Die folgenden Ausführungen binden Befehle. Hier ist der Jib-Build-Befehl an den Maven-Package-Befehl gebunden. Beim Ausführen des MVN-Pakets wird Jib Build automatisch ausgeführt. (Weitere Konfigurations-Tags finden Sie unter https://github.com/GoogleContainerTools/jib/tree/master/jib-maven-plugin)

An diesem Punkt können Sie den mit dem Jib-Plugin verbundenen Inhalt im Maven-Menü von idea sehen:

alt img

Beispiel: Gateway-Modul (muss das Image packen), die POM-Konfiguration ist wie folgt

<?xml version="1.0" encoding="UTF-8"?>
<Projekt xmlns="http://maven.apache.org/POM/4.0.0"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <übergeordnetes Element>
    <artifactId>akk-system</artifactId>
    <groupId>com.akk</groupId>
    <version>0.0.1-SNAPSHOT</version>
  </übergeordnet>
  <modelVersion>4.0.0</modelVersion>

  <artifactId>Gateway</artifactId>

  <Eigenschaften>
    <!-- Jib-Docker-Konfiguration-->
    <jib.version>2.2.0</jib.version>
    <jib.skip>falsch</jib.skip>
    <jib.repository.name>akk-gateway</jib.repository.name>
    <jib.main.class>com.akk.GatewayApplication</jib.main.class>
  </Eigenschaften>

  <Abhängigkeiten>
    <Abhängigkeit>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>Spring-Cloud-Starter-Gateway</artifactId>
    </Abhängigkeit>
    <Abhängigkeit>
      <groupId>com.github.xiaoymin</groupId>
      <artifactId>knife4j-spring-boot-starter</artifactId>
    </Abhängigkeit>
  </Abhängigkeiten>

</Projekt>

Allgemeines öffentliches Abhängigkeitspaket pom (das Image muss nicht verpackt werden):

<?xml version="1.0" encoding="UTF-8"?>
<Projekt xmlns="http://maven.apache.org/POM/4.0.0"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <übergeordnetes Element>
    <artifactId>akk-system</artifactId>
    <groupId>com.akk</groupId>
    <version>0.0.1-SNAPSHOT</version>
  </übergeordnet>
  <artifactId>allgemein</artifactId>
  <version>0.0.1-SNAPSHOT</version>

  <Eigenschaften>
    <!-- Jib-Docker-Konfiguration-->
    <jib.version>2.2.0</jib.version>
    <jib.skip>wahr</jib.skip>
    <jib.repository.name>akk-system</jib.repository.name>
    <jib.image.name>akk-system</jib.image.name>
  </Eigenschaften>

  <Abhängigkeiten>
    <!-- Abhängigkeitsinformationen -->
  </Abhängigkeiten>

</Projekt>

Darunter decken die Eigenschaften die relevante Parameterkonfiguration von Jib ab.

Verpackungsbild

Führen Sie mvn package jib:dockerBuild zum Verpacken aus.

alt img

Nachdem die Verpackung abgeschlossen ist, überprüfen Sie das lokale Docker-Image (der Befehl jib:dockerBuild lädt das Image nicht hoch, aber der Befehl jib:build lädt das Image hoch).

alt img

Packen und Hochladen des Bildes

Führen Sie mvn package jib:build um zu verpacken und hochzuladen.
Melden Sie sich beim privaten Docker-Warehouse an

Docker-Login --username=Benutzername --password=Passwort registry.cn-hangzhou.aliyuncs.com

Ziehen Sie das Bild

Docker-Pull-Registrierung.cn-hangzhou.aliyuncs.com/akk_java/akk-gateway:latest 

alt img

Docker-Bereitstellungsprojekt

Die Bereitstellung von Microservice-Projekten umfasst viele Module und erfolgt im Allgemeinen in einer verteilten Clusterumgebung. Die manuelle Bereitstellung ist daher umständlich. Sie können automatisierte Bereitstellungstools wie Jenkins verwenden. Nachdem Sie Jenkins zum Verpacken und Hochladen des Images verwendet haben, melden Sie sich beim Remote-Server an und führen Sie das Skript aus, um es zu starten. wie:

#!/bin/bash
# Melden Sie sich beim Docker-Repository andocker login --username=Benutzername --password=Passwort registry.cn-hangzhou.aliyuncs.com
# Stoppen Sie den laufenden Container docker ps | grep akk_java | awk '{print $1}' | xargs docker stop
# Löschen Sie den Container docker ps -a -q | grep akk_java | awk '{print $1}' | xargs docker rm
# Image-Datei abfragen und Docker-Images löschen | grep akk_java | awk '{print $3}' | xargs docker rmi
# Ziehen Sie das Image docker pull registry.cn-hangzhou.aliyuncs.com/akk_java/akk-user:latest
Docker-Pull-Registrierung.cn-hangzhou.aliyuncs.com/akk_java/akk-gateway:latest
Docker-Pull-Registrierung.cn-hangzhou.aliyuncs.com/akk_java/akk-task:latest
Docker-Pull-Registrierung.cn-hangzhou.aliyuncs.com/akk_java/akk-store:latest
Docker-Pull-Registrierung.cn-hangzhou.aliyuncs.com/akk_java/akk-pay:latest
Docker-Pull-Registrierung.cn-hangzhou.aliyuncs.com/akk_java/akk-app-api:latest
Docker-Pull-Registrierung.cn-hangzhou.aliyuncs.com/akk_java/akk-sso-auth:latest
Docker-Pull-Registrierung.cn-hangzhou.aliyuncs.com/akk_java/akk-seata:latest

Führen Sie nach dem erneuten Abrufen des Images den Befehl docker run aus, um Docker zu starten.

Damit ist dieser Artikel über die detaillierten Schritte zur Verwendung von Jib für die Docker-Bereitstellung in Spring Cloud abgeschlossen. Weitere relevante Inhalte zur Docker-Bereitstellung in Spring Cloud finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Verwenden von Jib zum Verpacken von Docker-Images
  • Detaillierte Schritte zum Erstellen, Ausführen, Veröffentlichen und erstmaligen Abrufen eines Docker-Images
  • Analyse zweier Methoden zum Erstellen von Docker-Images
  • Analyse des Docker-Image-Erstellungsprinzips (Sie können ein Image erstellen, ohne Docker zu installieren)
  • Verwenden Sie GoogleContainerTools, um Jib in einen Container zu packen und ein Docker-Image zu erstellen.

<<:  Der gesamte Prozessdatensatz der rekursiven Komponentenkapselung von Vue3

>>:  Detaillierte Erklärung der Sperrstruktur in MySQL

Artikel empfehlen

Javascript-Countdown-Eingabeaufforderungsfeld

In diesem Artikelbeispiel wird der spezifische Ja...

Sollte ich für das mobile Web-WAP Bootstrap oder jQuery Mobile verwenden?

Lösung des Problems Bootstrap ist ein CSS-Framewo...

So erweitern Sie den Linux-Swap-Speicher

Swap-Speicher bedeutet hauptsächlich, dass das Sy...

So machen Sie React-Komponenten im Vollbildmodus

einführen Dieser Artikel basiert auf React + antd...

Detaillierte Verwendung des Vue More Filter-Widgets

In diesem Artikelbeispiel wird die Implementierun...

Detaillierte Erklärung der neuen Hintergrundeigenschaften in CSS3

Bisher kannten wir mehrere Hintergrundattribute i...

Implementierung einer nicht geheimen SSH-Kommunikation in Linux

Was ist SSH? Administratoren können sich remote a...

Lösung zum Erstellen mehrerer Datenbanken, wenn Docker PostgreSQL startet

1 Einleitung Im Artikel „PostgreSQL mit Docker st...

Vue.js-Textfeld mit Dropdown-Komponente

Ein Textfeld mit Dropdown-Liste ermöglicht es Ben...

Eine kurze Einführung in die Basiskomponenten der VUE uni-app

1. Scroll-Ansicht Beim vertikalen Scrollen müssen...

HTML-Code, der den Internet Explorer zum Einfrieren bringen kann

Wir müssen lediglich einen beliebigen Texteditor ö...

Fehler MySQL-Tabelle 'performance_schema...Lösung

Die Testumgebung ist mit MariaDB 5.7 eingerichtet...