docker-maven-plugin verpackt das Image und lädt es in ein privates Warehouse hoch

docker-maven-plugin verpackt das Image und lädt es in ein privates Warehouse hoch

1. Einführung in das Docker-Maven-Plugin

In unserem kontinuierlichen Integrationsprozess verwendet die Projektentwicklung im Allgemeinen Maven zum Kompilieren und Verpacken und anschließenden Generieren von Bildern. Indem wir die Bilder online stellen, können wir die Online-Effizienz erheblich verbessern und gleichzeitig die Kapazität schnell und dynamisch erweitern und schnell zurücksetzen, was wirklich praktisch ist. Das Plugin „Docker-Maven-Plugin“ soll uns dabei helfen, automatisch Bilder zu generieren und sie durch einfache Konfiguration in Maven-Projekten in das Lager zu übertragen.

2. Umgebung und Softwarevorbereitung

In dieser Demonstrationsumgebung habe ich auf meinem lokalen Mac OX gearbeitet. Im Folgenden sind die installierte Software und Versionen aufgeführt:

  • Docker: Version 17.03.1-ce
  • Maven: Version 3.3.9
  • Java: Version 1.8.0_91
  • docker-maven-plugin:1.0.0

Hinweis: Hier möchten wir das Java Maven-Projekt testen und dabei das Docker-Maven-Plugin verwenden, um Bilder zu erstellen, Bilder hochzuladen und andere Vorgänge auszuführen. Sie müssen also zuerst Docker, Maven und Java installieren. Der Installationsvorgang wird hier ignoriert.

3. Demo-Beispiel

3.1 DOCKER_HOST konfigurieren

Die Standardverbindungsadresse des Docker-Maven-Plugin-Plugins zum lokalen Docker lautet localhost:2375, daher müssen wir zuerst die Umgebungsvariablen festlegen.

DOCKER_HOST=tcp://<host>:2375

Hinweis: Wenn die Umgebungsvariable DOCKER_HOST nicht festgelegt ist, können Sie DOCKER_HOST in der Befehlszeile angeben, um sie auszuführen. Beispielsweise gebe ich DOCKER_HOST auf meinem lokalen Computer an: DOCKER_HOST=unix:///var/run/docker.sock mvn clean install docker:build.

3.2 Beispiel für die Erstellung eines Images

Es gibt zwei Möglichkeiten, ein Image zu erstellen. Die erste besteht darin, die Build-Informationen in POM anzugeben, und die zweite besteht darin, zum Erstellen eine vorhandene Docker-Datei zu verwenden.
Die erste Methode unterstützt die Konfiguration von FROM-, ENTRYPOINT-, CMD-, MAINTAINER- und ADD-Informationen in POM, ohne dass eine Dockerfile-Konfiguration verwendet werden muss. Wenn Sie jedoch VOLUME oder andere Befehle in Dockerfile verwenden, müssen Sie die zweite Methode verwenden, ein Dockerfile erstellen und dockerDirectory in POM konfigurieren, um den Pfad anzugeben.

Hier verwenden wir zur Demonstration ein Java Maven-Projekt (mavendemo).

3.2.1 Build-Informationen zum Erstellen in POM angeben

<Bauen>
    <Plugins>
        <Plugin>
            <groupId>com.spotify</groupId>
            <artifactId>Docker-Maven-Plugin</artifactId>
            <version>1.0.0</version>
            <Konfiguration>
                <imageName>mavendemo</imageName>
                <baseImage>java</baseImage>
                <maintainer>docker_maven [email protected]</maintainer>
                <Arbeitsverzeichnis>/ROOT</Arbeitsverzeichnis>
                <cmd>["java", "-version"]</cmd>
                <entryPoint>["java", "-jar", "${project.build.finalName}.jar"]</entryPoint>
                <!-- Hier ist die Konfiguration zum Kopieren des JAR-Pakets in das angegebene Verzeichnis des Docker-Containers-->
                <Ressourcen>
                    <Ressource>
                        <Zielpfad>/ROOT</Zielpfad>
                        <Verzeichnis>${project.build.directory}</Verzeichnis>
                        <include>${project.build.finalName}.jar</include>
                    </Ressource>
                </Ressourcen>
            </Konfiguration>
        </plugin>
    </plugins>
</bauen>

3.2.2 Erstellen mit Dockerfile

pom.xml-Konfiguration

<Bauen>
    <Plugins>
         <Plugin>
            <groupId>com.spotify</groupId>
            <artifactId>Docker-Maven-Plugin</artifactId>
            <version>1.0.0</version>
            <Konfiguration>
                <imageName>mavendemo</imageName>
                <dockerDirectory>${basedir}/docker</dockerDirectory> <!-- Geben Sie den Dockerfile-Pfad an -->
                <!-- Hier wird das JAR-Paket in die angegebene Verzeichniskonfiguration des Docker-Containers kopiert, es kann auch in die Dokoker-Datei geschrieben werden-->
                <Ressourcen>
                    <Ressource>
                        <Zielpfad>/ROOT</Zielpfad>
                        <Verzeichnis>${project.build.directory}</Verzeichnis>
                        <include>${project.build.finalName}.jar</include>
                    </Ressource>
                </Ressourcen>
            </Konfiguration>
        </plugin>   
    </plugins>
</bauen>
 
${basedir}/docker/Dockerfile-Konfiguration VON Java
WARTUNGSPERSÖNLICH docker_maven [email protected]
ARBEITSVERZEICHNIS /ROOT
CMD ["java", "-version"]
EINSTIEGSPUNKT ["java", "-jar", "${project.build.finalName}.jar"]

Die beiden oben genannten Methoden zum Ausführen von docker:build haben den gleichen Effekt. Der Ausführungsausgabeprozess ist wie folgt:

[INFO] --- docker-maven-plugin:1.0.0:build (Standard-CLI) @ mavenDemo ---
[INFO] Image von Mavendemo erstellen
Schritt 1/5: FROM java
---> d23bdf5b1b1b
Schritt 2/5: MAINTAINER docker_maven [email protected]
---> Cache verwenden
---> 2faf180d4a50
Schritt 3/5: WORKDIR /ROOT
---> Cache verwenden
---> 862210f7956a
Schritt 4/5: ENTRYPOINT java -jar mavenDemo.jar
---> Wird ausgeführt in 96bbe83de6ec
---> c29009c88993
Zwischenbehälter entfernen 96bbe83de6ec
Schritt 5/5: CMD java -version
---> Wird ausgeführt in f69b8d2a75b1
---> bc8d54014325
Zwischenbehälter entfernen f69b8d2a75b1
Erfolgreich erstellt bc8d54014325

Verwenden Sie nach Abschluss der Ausführung Docker-Images, um das generierte Image anzuzeigen:

REPOSITORY TAG BILD ID ERSTELLT GRÖSSE
mavendemo latest 333b429536b2 vor 38 Minuten 643 MB

3.3 Ausführen von Befehlen

mvn clean package docker:build führt nur den Build-Vorgang aus

mvn clean package docker:build -DpushImage führt den Build aus und pusht das Image nach Abschluss

mvn clean package docker:build -DpushImageTag führt den Build aus und pusht das Image des angegebenen Tags

Hinweis: Hier muss mindestens ein ImageTag angegeben werden, der im POM konfiguriert oder auf der Kommandozeile angegeben werden kann. Die Befehlszeile wird wie folgt angegeben: mvn clean package docker:build -DpushImageTags -DdockerImageTags=imageTag_1 -DdockerImageTags=imageTag_2, und die in der POM-Datei angegebene Konfiguration lautet wie folgt:

<Bauen>
  <Plugins>
    ...
    <Plugin>
      <Konfiguration>
        ...
        <BildTags>
           <imageTag>imageTag_1</imageTag>
           <imageTag>imageTag_2</imageTag>
        </imageTags>
      </Konfiguration>
    </plugin>
    ...
  </plugins>
</bauen>

3.4 Docker-Befehle an Maven-Stages binden

Wir können Docker-Befehle an verschiedene Maven-Phasen binden. Wir können Docker in Build, Tag und Push unterteilen und sie dann jeweils an die Paket- und Bereitstellungsphasen von Maven binden. Zu diesem Zeitpunkt müssen wir nur mvn deploy ausführen, um die gesamten Build-, Tag- und Push-Vorgänge abzuschließen. Wenn wir mvn build ausführen, werden nur die Build- und Tag-Vorgänge abgeschlossen. Wenn wir bestimmte Schritte überspringen oder nur einen bestimmten Schritt ausführen möchten, müssen wir die POM-Datei nicht ändern, sondern nur angeben, dass ein bestimmter Docker-Schritt übersprungen werden soll. Wenn beispielsweise in unserem Projekt bereits die Automatisierungsvorlage konfiguriert ist, wir dieses Mal aber nur das Image für den lokalen Selbsttest erstellen müssen und die Push-Phase nicht ausführen möchten, müssen wir den Parameter -DskipDockerPush angeben, um den Push-Vorgang zu überspringen.

<Bauen>
    <Plugins>
        <Plugin>
            <groupId>com.spotify</groupId>
            <artifactId>Docker-Maven-Plugin</artifactId>
            <version>1.0.0</version>
            <Konfiguration>
                <imageName>mavendemo</imageName>
                <baseImage>java</baseImage>
                <maintainer>docker_maven [email protected]</maintainer>
                <Arbeitsverzeichnis>/ROOT</Arbeitsverzeichnis>
                <cmd>["java", "-version"]</cmd>
                <entryPoint>["java", "-jar", "${project.build.finalName}.jar"]</entryPoint>
                <Ressourcen>
                    <Ressource>
                        <Zielpfad>/ROOT</Zielpfad>
                        <Verzeichnis>${project.build.directory}</Verzeichnis>
                        <include>${project.build.finalName}.jar</include>
                    </Ressource>
                </Ressourcen>
            </Konfiguration>
            <Hinrichtungen>
                <Ausführung>
                    <id>Bild erstellen</id>
                    <phase>Paket</phase>
                    <Ziele>
                        <goal>bauen</goal>
                    </Ziele>
                </Ausführung>
                <Ausführung>
                    <id>Tag-Bild</id>
                    <phase>Paket</phase>
                    <Ziele>
                        <goal>Tag</goal>
                    </Ziele>
                    <Konfiguration>
                        <image>mavendemo:latest</image>
                        <neuerName>docker.io/wanyang3/mavendemo:${project.version}</neuerName>
                    </Konfiguration>
                </Ausführung>
                <Ausführung>
                    <id>Push-Bild</id>
                    <phase>Bereitstellen</phase>
                    <Ziele>
                        <goal>drücken</goal>
                    </Ziele>
                    <Konfiguration>
                        <imageName>docker.io/wanyang3/mavendemo:${project.version}</imageName>
                    </Konfiguration>
                </Ausführung>
            </Ausführungen>
        </plugin>
    </plugins>
</bauen>

Wenn wir im obigen Beispiel ein MVN-Paket ausführen, werden die Build- und Tag-Operationen ausgeführt, und wenn wir ein MVN-Bereitstellungspaket ausführen, werden die Build-, Tag- und Push-Operationen ausgeführt. Wenn wir einen Docker-Prozess überspringen möchten, müssen wir nur Folgendes tun:

  • -DskipDockerBuild überspringt das Erstellen des Images
  • -DskipDockerTag Tag-Image überspringen
  • -DskipDockerPush überspringt das Pushen des Images
  • -DskipDocker überspringt die gesamte Phase

Wenn wir beispielsweise den Tag-Prozess beim Ausführen des Pakets überspringen möchten, benötigen wir mvn package -DskipDockerTag.

3.5 Verwenden einer privaten Docker-Repository-Adresse

In der tatsächlichen Arbeitsumgebung müssen wir das Image in unser privates Docker-Repository übertragen. Dies ist auch mit dem Plug-In „docker-maven-plugin“ sehr einfach zu erreichen. Es gibt mehrere Möglichkeiten, dies zu erreichen:

1. Ändern Sie den ImageName-Vorgang der POM-Datei

...
<Konfiguration>
    <imageName>registry.example.com/wanyang3/mavendemo:v1.0.0</imageName>
    ...
</Konfiguration>
...

2. Ändern Sie den Vorgang newName in der POM-Datei

...
<Konfiguration>
    <imageName>mavendemo</imageName>
    ...
</Konfiguration>
<Ausführung>
    <id>Tag-Bild</id>
    <phase>Paket</phase>
    <Ziele>
        <goal>Tag</goal>
    </Ziele>
    <Konfiguration>
        <image>mavendemo</image>
        <neuerName>registry.example.com/wanyang3/mavendemo:v1.0.0</neuerName>
    </Konfiguration>
</Ausführung>
...

3.6 Sicherheitsauthentifizierungskonfiguration

Wenn wir Bilder in ein Docker-Repository übertragen, unabhängig davon, ob es gemeinsam genutzt oder privat ist, ist häufig eine Sicherheitsauthentifizierung erforderlich und Vorgänge können erst nach Abschluss der Anmeldung ausgeführt werden. Natürlich können wir uns über die Befehlszeile „docker login -u user_name -p password docker_registry_host“ anmelden, aber für automatisierte Prozesse ist das nicht sehr praktisch. Mit dem Plugin „Docker-Maven-Plugin“ können wir ganz einfach eine Sicherheitsauthentifizierung implementieren.

Fügen Sie zunächst die relevante Serverkonfiguration zur Maven-Konfigurationsdatei setting.xml hinzu und konfigurieren Sie dabei hauptsächlich die Benutzerauthentifizierungsinformationen der Docker-Registrierung.

<Server>
  <Server>
    <id>meine-Docker-Registrierung</id>
    <Benutzername>wanyang3</Benutzername>
    <Passwort>12345678</Passwort>
    <Konfiguration>
      <email>[email protected]</email>
    </Konfiguration>
  </server>
</server>

Verwenden Sie dann einfach die Server-ID in pom.xml.

<Plugin>
  <Plugin>
    <groupId>com.spotify</groupId>
    <artifactId>Docker-Maven-Plugin</artifactId>
    <version>1.0.0</version>
    <Konfiguration>
      <imageName>registry.example.com/wanyang3/mavendemo:v1.0.0</imageName>
      ...
      <serverId>meine-Docker-Registrierung</serverId>
    </Konfiguration>
  </plugin>
</plugins>

3.7 Andere Parameter

Das Plugin docker-maven-plugin bietet ebenfalls viele nützliche Konfigurationsmöglichkeiten. Hier sind einige Parameter.

Parameter veranschaulichen Standardwert
<forceTags>true</forceTags> Erzwingt das Überschreiben des Tags beim Erstellen, wird mit ImageTags verwendet FALSCH
<noCache>true</noCache> Geben Sie beim Erstellen --no-cache an, um den Cache nicht zu verwenden FALSCH
<pullOnBuild>true</pullOnBuild> Geben Sie beim Erstellen --pull=true an, um das Basisimage jedes Mal neu zu laden. FALSCH
<pushImage>true</pushImage> Nachdem der Build abgeschlossen ist, pushen Sie das Image FALSCH
<pushImageTag>true</pushImageTag> Nachdem der Build abgeschlossen ist, pushen Sie das Image des angegebenen Tags und verwenden Sie es mit imageTags FALSCH
<retryPushCount>5</retryPushCount> Bildübertragung fehlgeschlagen, Anzahl der Wiederholungsversuche 5
<retryPushTimeout>10</retryPushTimeout> Bildübertragung fehlgeschlagen, Wiederholungszeit 10 Sekunden
<rm>true</rm> Geben Sie beim Erstellen –rm=true an, um den Zwischencontainer nach Abschluss des Builds zu löschen. FALSCH
<useGitCommitId>true</useGitCommitId> Verwenden Sie beim Erstellen die ersten 7 Ziffern der aktuellsten Git-Commit-ID als Tag, zum Beispiel: image:b50b604, sofern newName nicht konfiguriert ist. FALSCH

4. Häufig gestellte Fragen

1. Beim Ausführen von Build-Images tritt Fehler 1 auf:

[INFO] Image von Mavendemo erstellen
org.apache.http.impl.execchain.RetryExec ausführen
E/A-Ausnahme (java.io.IOException) beim Verarbeiten der Anforderung an {}->unix://localhost:80: Keine solche Datei oder kein solches Verzeichnis
[FEHLER] Ziel com.spotify:docker-maven-plugin:1.0.0:build (Standard-CLI) konnte im Projekt mavenDemo nicht ausgeführt werden: Ausnahme abgefangen: java.util.concurrent.ExecutionException: com.spotify.docker.client.shaded.javax.ws.rs.ProcessingException: java.io.IOException: Keine solche Datei oder kein solches Verzeichnis -> [Hilfe 1]

Dies liegt daran, dass der Docker-Dienst nicht gestartet ist. Starten Sie einfach Docker.

2. Beim Ausführen von Build-Images wird Fehler 2 gemeldet:

FEHLER] Ziel com.spotify:docker-maven-plugin:1.0.0:build (Standard-CLI) konnte im Projekt mavenDemo nicht ausgeführt werden: Ausnahme abgefangen: Anforderungsfehler: POST unix://localhost:80/build?t=mavenDemo: 500, Body: {"message":"Fehler beim Parsen der Referenz: \"mavenDemo\" ist kein gültiges Repository/Tag: Repository-Name muss klein geschrieben sein"}: HTTP 500 Interner Serverfehler -> [Hilfe 1]

Dies liegt daran, dass der Image-Name falsch ist. Der Docker-Image-Name muss mit [a-z0-9-_.] übereinstimmen.

Dies ist das Ende dieses Artikels über das Verpacken von Docker-Maven-Plugin-Images und deren Hochladen in private Repositories. Weitere Informationen zum Verpacken von Docker-Maven-Plugin-Images finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • So verwenden Sie Docker buildx, um plattformübergreifende Images zu erstellen und sie in private Repositories zu übertragen
  • Verwenden Sie Docker, um ein Git-Image mithilfe des Klon-Repositorys zu erstellen
  • So verwenden Sie ein Domestic Image Warehouse für Docker
  • Jenkins erstellt Docker-Images und überträgt sie in das Harbor-Warehouse.
  • So verwenden Sie das Docker-Image-Repository
  • Alibaba Cloud-Bereitstellungsschritte für das private Docker-Image-Repository
  • Docker-Container-Praxis-Image-Warehouse

<<:  So lösen Sie das Problem, dass die Website kein direktes Kopieren von Seiteninhalten oder Informationen zulässt

>>:  Beispielcode für nahtloses Scrollen mit Flex-Layout

Artikel empfehlen

Lösung zur Codeaufteilung im Vue-Projekt

Inhaltsverzeichnis Hintergrund Zweck Vor der Spal...

Detailliertes Tutorial zur Installation von ffmpeg unter Linux

1. Installieren Sie ffmpeg unter Centos Linux 1. ...

Javascript-Countdown-Eingabeaufforderungsfeld

In diesem Artikelbeispiel wird der spezifische Ja...

Beispiel für den Aufbau eines Redis-Sentinel-Clusters basierend auf Docker

1. Übersicht Redis Cluster ermöglicht hohe Verfüg...

Lösung für den erfolgreichen Start von MySQL, aber ohne Überwachung des Ports

Problembeschreibung MySQL wurde erfolgreich gesta...

JS realisiert einfachen Bildkarusselleffekt

In diesem Artikel wird der spezifische JS-Code zu...

Windows Server 2008-Tutorial zur Überwachung der Serverleistung

Als Nächstes erfahren Sie, wie Sie die Serverleis...

Detaillierte Schritte zur Installation des NERDTree-Plugins in Vim unter Ubuntu

NERDTree ist ein Dateisystembrowser für Vim. Mit ...

Verwenden Sie das Rem-Layout, um eine adaptive

Ich habe bereits einen Artikel über mobile Anpass...

Kostenloses Tutorial zur Installationskonfiguration der Version MySQL 5.7.18

MySQL wird in eine Installationsversion und eine ...

Diskussion über sinnvollere Erstellungsregeln für MySQL-String-Indizes

Vorwort In Bezug auf die Verwendung von MySQL-Ind...

Detaillierte Erklärung der MySql-Installation und des Logins

Überprüfen Sie, ob MySQL bereits unter Linux inst...