Führen Sie Batch mit Docker-Compose mit Java-Batch aus

Docker ist mehr als nur das Starten eines Daemon-Prozesses. Es ist völlig schwierig, einen Stapel zu starten, der nur einmal ausgeführt wird.

Das Starten eines Containers mit dem Befehl "Docker" ist jedoch schmerzhaft. Verwenden Sie "Docker-Compose" auch für Stapel.

Dieses Mal möchte ich ein einfaches CLI-Programm ausführen, das als Stapel in Java geschrieben wurde.

Quelle

https://github.com/knjname/2018-02_DockerComposeBatchExample

Sie können von hier herunterladen.

Einführung der Komposition

Java App Teil

Ich habe es mit Spring Boot geschafft. Gehen Sie wie folgt vor: Es werden nur die Stapelargumente und Umgebungsvariablen gedruckt.

    //So etwas wie die Hauptfunktion, wenn Sie CommandLineRunner mit Spring Boot beißen
    @Override
    public void run(String[] args) throws Exception {
		System.out.println("Batch run!!!");
		System.out.println("  args: " + String.join(", ", args));
		System.out.println("  env: " + System.getenv("MY_ENV_VALUE"));
    }

Es spielt keine Rolle, aber wenn Sie etwas erstellen möchten, das in Java keine Rolle spielt, verwenden Sie Spring Boot.

Dockerfile-Teil

Dies ist der Inhalt, um die in der vorherigen Phase erstellte JAR ("... AS Builder") in den Container in der zweiten Hälfte zu importieren und die "Java-Jar JAR" auszuführen.

FROM library/openjdk:9.0.1-11-jre-slim AS builder
ADD . /app
WORKDIR /app
RUN ./gradlew bootRepackage
RUN mv /app/build/libs/*.jar /app.jar

FROM library/openjdk:9.0.1-11-jre-slim
COPY --from=builder /app.jar /app.jar
ENTRYPOINT [ "java", "-jar", "/app.jar" ]

Da das Ende ENTRYPOINT ist, können Sie Argumente an den Stapel übergeben.

docker-compose.yml Teil

Derzeit wird die Umgebungsvariable für den Stapel als "MY_ENV_VALUE" angegeben. Eigentlich denke ich, dass es das Verbindungsziel der Datenbank geben wird. Darüber hinaus wird hier auch das Exportverzeichnis der Batchdatei als Volume-Spezifikation angegeben.

docker-compose.yml


version: "3.4"

services:

  batch:
    #Docker erstellt den obigen Docker. -Bild, wenn mit t myjavabatch erstellt:Ich denke, es wird so etwas wie myjavabatch sein
    build: ./
    environment:
      MY_ENV_VALUE: "foobarbaz"

# restart:Ich brauche nicht immer
# ports:Ich brauche nicht einmal
# network_mode: "host"Selbst wenn Sie angeben, sollte es im Gegensatz zu Dämonen kein Problem geben.
#Es ist besser, das Docker-Image nicht als Web zu verwenden, sondern nur ein Batch-Image zu erstellen.

Finden Sie heraus, wie Sie einen Stapel starten

Beginnen Sie wie immer nicht wie unten beschrieben. Dies startet den Dienst (Dämon).

$ docker-compose up -d

Ein Einwegbehälter, der gestartet wird, wenn Sie ihn wie eine Charge starten möchten, wird grundsätzlich mit "--rm" gestartet, wie unten gezeigt.

$ docker-compose run --rm Batch Batch Argumente

Übrigens, wenn Sie TTY oben nicht erreichen können (z. B. wenn Sie von crontab aus laufen), funktioniert es nicht. Geben wir -T an.

$ docker-compose run --rm -T Batch-Batch-Argumente

Es gibt jedoch immer noch Fallen.

Derzeit (Stand 02/06/2018) nummeriert docker-compose run die Containernamen nacheinander, z. B. base name_run_1, aber _1 ist abgedeckt und kann nicht gestartet werden. Du darfst.

Benennen wir den Container explizit mit einer Zufallszahl, damit er nicht abgedeckt wird.

$ docker-compose run --rm -T --name `uuidgen`Batch Batch-Argumente

Dies ist perfekt.

Ich möchte auch eine Trompetenschale

Erstellen wir auch eine Wrapper-Shell für den obigen Befehl.

wrapper.sh


#!/bin/bash

docker-compose run --rm -T --name `uuidgen` batch "$@"

Wenn Sie die Charge über die Trompetenschale aufrufen, ist sie perfekt. : smile_cat:

$ ./wrapper.sh my java batch is forever!!

Wenn Sie es regelmäßig mit cron ausführen möchten, verwenden Sie crontab -e, um einen cron-Eintrag wie den folgenden zu definieren.

crontab


# /dev/Wirf es nicht auf null. Systemd für modernes Betriebssystem-Geben wir es der Katze.
0 * * * * cd /my/path/to/project && ./wrapper.sh my java batch is forever!!! 2>&1 | systemd-cat

abschließend

Die Stapelausführung mit Docker-Compose ist nichts Besonderes. (Ich möchte glauben, dass es nicht so ist)

Let's challenge!!

Recommended Posts

Führen Sie Batch mit Docker-Compose mit Java-Batch aus
Führen Sie Java VM mit Web Assembly aus
Führen Sie Java-Anwendungen in Azure Batch aus
Führen Sie eine Batchdatei von Java aus
Führen Sie in Java8 geschriebene Anwendungen in Java6 aus
Java-Entwicklung mit Codenvy: Hello World! Run
Führen Sie Rust von Java mit JNA (Java Native Access) aus.
Erstellen Sie mit Gradle mit VSCode Java → Ausführen
Kommen Sie mit Java-Containern in Cloud Run zurecht
Installieren Sie Java mit Homebrew
Wechseln Sie die Plätze mit Java
Installieren Sie Java mit Ansible
Führen Sie PostgreSQL unter Java aus
Bequemer Download mit JAVA
Schalten Sie Java mit direnv
Starten Sie k3s mit Docker-Compose
Führen Sie Payara mit Docker aus
Java-Download mit Ansible
Lass uns mit Java kratzen! !!
Erstellen Sie Java mit Wercker
Endian-Konvertierung mit JAVA
Senden Sie einen Job an AWS Batch mit Java (Eclipse)
[Tutorial] Eclipse herunterladen → Anwendung mit Java ausführen (Plejaden)
[Tutorial] Eclipse herunterladen → Webanwendung mit Java ausführen (Plejaden)
Serverloses Java EE beginnend mit Quarkus und Cloud Run
(Java) Einfache BDD mit Spektrum?
Verwenden Sie Lambda-Ebenen mit Java
Erstellen Sie mit Gradle ein Java-Multiprojekt
Java-Konfiguration mit Spring MVC
Experimentieren wir mit der Java-Inline-Erweiterung
[Vorlage] MySQL-Verbindung mit Java
Schreiben Sie Java Try-Catch mit Optional neu
Installieren Sie Java 7 mit Homebrew (Fass)
[Java] JSON-Kommunikation mit Jackson
Führen Sie TAO Core mit Docker aus
Java zum Spielen mit Function
Versuchen Sie eine DB-Verbindung mit Java
Aktivieren Sie Java EE mit NetBeans 9
[Java] JavaConfig mit statischer innerer Klasse
Versuchen Sie gRPC mit Java, Maven
Lassen Sie uns Excel mit Java betreiben! !!
Java-Versionsverwaltung mit SDKMAN
Führen Sie Tensorflow mit THETA V aus
Führen Sie LIFF mit Spring Boot aus
RSA-Verschlüsselung / Entschlüsselung mit Java 8
Paging PDF mit Java + PDFBox.jar
Sortieren Sie Zeichenfolgen als charakteristische Funktion mit Java
Objektorientiert mit Strike Gundam (Java)
Führen Sie die Analyse mit OpenJDK11 Java Flight Recorder + Google Kubernetes Engine aus
Java Hallo Welt, kompilieren, ausführen
Führen Sie Rails immer im Docker aus
[Java] Inhaltserfassung mit HttpCliient
Java-Versionsverwaltung mit jenv
Fehlerbehebung mit Java Flight Recorder
Optimieren Sie Java-Tests mit Spock
Stellen Sie mit Java eine Verbindung zur Datenbank her
Führen Sie das Java-Applet auf Ubuntu aus
Stellen Sie mit Java eine Verbindung zu MySQL 8 her
Fehler beim Spielen mit Java
Verwenden von Mapper mit Java (Spring)