[DOCKER] So erstellen Sie ein leichtes Container-Image für Java-Apps

Wenn Sie ein Docker-Image mit einem Java-Produkt erstellen, können Sie Maven zum Zeitpunkt des Docker-Builds ausführen. Es dauert jedoch einige Zeit, und Artefakte, die zur Laufzeit nicht benötigt werden, werden heruntergeladen, sodass das Image groß wird.

Wenn Sie mit CircleCI erstellen und eine Docker-Datei erstellen, die das erstellte Jar herunterlädt und ausführt, ist es daher einfacher zu erstellen und die Bildgröße ist kleiner.

Machen Sie Uber JAR oder Zip

Um ein Jar zu erstellen, das alle abhängigen Bibliotheken enthält, können Sie das unten gezeigte Schatten-Plug-In einfach verwenden. Es kann auch ein ausführbares Jar sein, indem "ManifestResourceTransformer" verwendet wird, um die mainClass in die MANIFEST-Datei aufzunehmen.

pom.xml


<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-shade-plugin</artifactId>
  <version>3.1.0</version>
  <executions>
    <execution>
      <phase>package</phase>
      <goals>
        <goal>shade</goal>
      </goals>
      <configuration>
        <transformers>
          <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
            <mainClass>xxx.Main</mainClass>
          </transformer>
        </transformers>
      </configuration>
    </execution>
  </executions>
</plugin>

Ich denke, Sie können eine Zip-Datei mit dem Assembly-Plug-In erstellen.

Schreiben Sie die Circleci-Einstellungen

CircleCI 2.0 erstellt einen Build-Container mit pom.xml als Cache-Schlüssel, sodass Sie mit hoher Geschwindigkeit erstellen können, sofern Sie pom nicht neu schreiben. Außerdem wird das Repository von Maven von CircleCI gespiegelt, sodass das Herunterladen abhängiger Bibliotheken schnell erfolgt.

Erstellen Sie für Build-Einstellungen ".circleci / config.yml" direkt unter dem Projekt. Das Beispiel wird angezeigt, wenn es mit dem GitHub-Projekt funktioniert, sodass Sie es unverändert verwenden können. Fügen Sie am Ende jedoch nur den Schritt des Hochladens der Uber-JAR oder der ZIP-Datei zu Artifact hinzu (im folgenden Beispiel unter "store_artifacts").

yaml:.circleci/config.yml


version: 2
jobs:
  build:
    docker:
      - image: circleci/openjdk:8-jdk
    working_directory: ~/repo
    environment:
      MAVEN_OPTS: -Xmx3200m
    steps:
      - checkout
      - restore_cache:
          keys:
          - v1-dependencies-{{ checksum "pom.xml" }}
          - v1-dependencies-
      - run: mvn dependency:go-offline
      - save_cache:
          paths:
            - ~/.m2
          key: v1-dependencies-{{ checksum "pom.xml" }}
      - run: mvn integration-test
      - store_artifacts:
          path: target/xxx-0.1.0-SNAPSHOT.jar

Machen Sie eine Dockerfie

Schreiben Sie in die Docker-Datei, um dieses Artefakt herunterzuladen und auszuführen.

Dockerfile


FROM openjdk:8-alpine

RUN apk --no-cache add curl jq

RUN curl 'https://circleci.com/api/v1.1/project/github/kawasima/xxx/latest/artifacts?branch=develop&filter=successful' \
    | jq 'map(select(.["path"] == "home/circleci/repo/target/xxx-0.1.0-SNAPSHOT.jar"))' \
    | jq '.[0]["url"]' \
    | xargs curl -o xxx.jar

RUN apk del --purge curl jq

ENTRYPOINT ["java", "-jar", "xxx.jar"]

Die URL des letzten erfolgreichen Build-Artefakts kann ohne Authentifizierung mithilfe der CircleCI API v1.1 für öffentliche Repositorys abgerufen werden. Wir verwenden jq, um Artefakte aus JSON zu identifizieren und URLs zu extrahieren.

Recommended Posts

So erstellen Sie ein leichtes Container-Image für Java-Apps
So erstellen Sie einen Java-Container
So erstellen Sie ein Maven-Repository für 2020
So erstellen Sie überall eine H2-Datenbank
So erstellen Sie Pagenationen für das "Kaminari" -Array
So erstellen Sie eine leichte JRE für den Vertrieb
[Docker] So erstellen Sie eine virtuelle Umgebung für Rails- und Nuxt.js-Apps
So erstellen Sie eine Methode
So erstellen Sie eine Java-Umgebung in nur 3 Sekunden
[Spring Boot] So erstellen Sie ein Projekt (für Anfänger)
So erstellen Sie einen Daten-URI (base64) in Java
So erstellen Sie ein Java-Array
So erstellen und starten Sie eine Docker-Datei für Payara Micro
So erstellen Sie ein neues Gradle + Java + Jar-Projekt in Intellij 2016.03
So überprüfen Sie den Inhalt der Java-Zeichenfolge mit fester Länge
Wie man einen revolutionären Diamanten mit Java für Aussage macht wwww
So erstellen Sie eine Java-Kalenderzusammenfassung
[Einführung in Java] So schreiben Sie ein Java-Programm
Wie erstelle ich einen Discord Bot (Java)
[Swift5] So erstellen Sie einen Begrüßungsbildschirm
[Rails] So erstellen Sie eine Teilvorlage
[Java] So drehen Sie ein zweidimensionales Array mit einer erweiterten for-Anweisung
[Java] [Für Anfänger] So fügen Sie Elemente direkt in ein zweidimensionales Array ein
[Java] So testen Sie, ob es in JUnit null ist
[Rails] So erstellen Sie ein Diagramm mit lazy_high_charts
So erhalten Sie einen Heapdump aus einem Docker-Container
So zeigen Sie eine Webseite in Java an
Versuchen Sie, ein Bulletin Board in Java zu erstellen
So erstellen Sie eine Klasse, die Klasseninformationen erbt
So konvertieren Sie einen Soliditätsvertrag in eine Java-Vertragsklasse
[Java] Erstellen wir einen Minecraft Mod 1.14.4 [Einführung]
So erstellen Sie ein Thema in Liferay 7 / DXP
[Java] Erstellen wir einen Minecraft Mod 1.16.1 [Einführung]
[Java] (für MacOS) Methode zur Einstellung des Klassenpfads
[1.] So erstellen Sie ein Spring-MVC-Framework-Projekt
So erstellen Sie einfach ein Pulldown mit Rails
[Rails] So erstellen Sie eine Twitter-Freigabeschaltfläche
[Java] Erstellen wir einen Minecraft Mod 1.14.4 [99. Mod-Ausgabe]
[Java] Wie man mehrere for-Schleifen einzeln macht
So erstellen Sie ein kleines Docker-Image der openjdk 11 (ea) -Anwendung (1 GB → 85 MB)
[Azure] Ich habe versucht, eine Java-App für die Erstellung von kostenlosen Web-Apps zu erstellen. [Anfänger]
[Einführung in Docker] Erstellen Sie ein Docker-Image für maschinelles Lernen und verwenden Sie das Jupyter-Notizbuch
[Java] Erstellen Sie einen Filter
So erstellen Sie Docker-Compose
Erstellen Sie ein Docker-Image, um eine einfache Java-App auszuführen
So verwenden Sie ein Array für den TreeMap-Schlüssel
So springen Sie von Eclipse Java zu einer SQL-Datei
So schreiben Sie einen Komponententest für Spring Boot 2
Bereitstellen von einem lokalen Docker-Image auf Heroku
[Java] Erstellen wir einen Minecraft Mod 1.14.4 [Extra Edition]
[Java] Erstellen wir einen Minecraft Mod 1.14.4 [7. Fortschritt hinzufügen]
java: Wie schreibe ich eine generische Typliste? [Hinweis]
[Java] Wie man aus Janken rauskommt (entspricht Paiza Rang A)
[Java] Erstellen wir einen Minecraft Mod 1.14.4 [6. Rezept hinzufügen]
So erstellen Sie eine JDBC-URL (Oracle Database, Thin)