Der Inhalt dieses Artikels befasst sich mit der Methode und dem Prozess zur Erstellung eines Docker-Images mit einem Java-Programm. Ich hoffe, dass er für Freunde hilfreich ist.
Hier sind einige Anforderungen für die Docker-Image-Produktion, und dann werden wir sehen, wie das geht.
Der Produktionsprozess sollte in den Projektbauprozess integriert werden
Verwenden Sie das offizielle Bild als Basisbild
Stellen Sie die richtige Zeitzone ein
Das Programm im Container wird als Nicht-Root-Benutzer gestartet
Geben Sie die Schnittstelle an des Webprogramms
Kann JVM-Parameter, Java-Systemeigenschaften und programmdefinierte Parameter übergeben
Lassen Sie uns darüber sprechen, wie das geht oben im Detail:
Es wird empfohlen, das Dockerfile-Maven-Plugin von Spotify zu verwenden, da dieses Plugin am einfachsten zu verwenden und zu beherrschen ist .
Der Kern dieses Plugins besteht darin, dass Sie eine Docker-Datei schreiben (Informationen zur spezifischen Schreibmethode von Dockerfile finden Sie in der offiziellen Dokumentation). Dieses Plugin übergibt einige Parameter, die Ihnen beim Erstellen eines Docker-Images helfen.
Solange Sie Dockerfile schreiben können, werden Sie dieses Plugin verwenden. Es fügt keine zusätzlichen Konzepte hinzu.
Das Basis-Image von Java sollte im openjdk-Repository zu finden sein, nicht im veralteten Java-Repository.
Das OpenJDK-Repository bietet eine Vielzahl von Bild-Tags, die vielleicht umwerfend erscheinen, aber im Wesentlichen sind es nur ein paar:
OpenJDK:
openjdk:<version>-slim
openjdk:<version>-alpine
Bezüglich <version>
Geben Sie im Allgemeinen einfach eine größere Versionsnummer an. Sie können beispielsweise Folgendes in die Docker-Datei schreiben:
FROM openjdk:8-alpine
In Bezug auf die Größe ist Alpine die kleinste, Slim ist etwas größer und die Standardeinstellung ist größte. Daher sollten Sie so oft wie möglich die Alpine-Version verwenden. Wenn Sie feststellen, dass der Laufumgebung des Programms etwas fehlt, versuchen Sie, die Slim-Version oder die Standardversion zu verwenden. Nach aktueller Erfahrung:
Wenn Sie die Schriftartenbibliothek des Betriebssystems benötigen, müssen Sie die Slim-Version oder die Standardversion verwenden. Programme, die Schriftbibliotheken des Betriebssystems wie Bildverifizierungscodes und PDF-Export erfordern.
Wenn Sie einige dynamische/statische Linkbibliotheken nach Linux-Standard benötigen, versuchen Sie es mit der Slim-Version oder der Standardversion, wenn die Alpine-Version nicht funktioniert. Da es sich bei der Alpine-Version um ein äußerst schlankes Linux handelt, werden viele Dinge gelöscht.
Die Zeitzone fast aller Docker-Images ist UTC. Wir müssen die Zeitzone für das von uns erstellte Docker-Image einstellen:
ENV TZ=Asia/Shanghai RUN set -eux; \ ln -snf /usr/share/zoneinfo/$TZ /etc/localtime; \ echo $TZ > /etc/timezone
In Docker Image sollten wir einen Nicht-Root-Benutzer verwenden, um das Programm zu starten, was die Verwendung von gosu erfordert.
Gosus Dockerfile-Anleitung ist hier.
Denken Sie daran, die geeignete Installationsmethode entsprechend den verschiedenen Grundbildern auszuwählen.
Für vernetzte Anwendungen muss der exponierte Port im Dockerfile angegeben werden, sonst kann der Port nicht zugeordnet werden.
EXPOSE 8080
Wir müssen in der Lage sein, einige Parameter zu übergeben, wenn wir das Docker-Image starten:
JVM-Parameter
Java-Systemeigenschaften
Programmstartparameter
Hier ist es: Sie müssen sich auf die Best Practices von Dockerfile und Docker ENTRYPOINT beziehen.
Beispielprojekt-Quellcode finden Sie hier: https://github.com/chanjarster/dockerfile-examples/
Alle Programmbezogene Dinge werden unter /home/java-app/
gespeichert:
/home/java-app ├── docker-entrypoint.sh ├── lib │ └── java-app.jar ├── etc ├── logs └── tmp
docker-entrypoint.sh, Startskript
lib, JAR-Paket speichern
lib/java -app.jar , JAR-Paket programmieren
usw., Konfigurationsdateien speichern
Protokolle, Protokolldateien speichern
tmp, temporäre Dateien speichern
mvn clean package dockerfile:build
aus, um normal zu starten, und greift dann auf http://localhost:8080
zu:
docker run -p 8080:8080 chanjarster/dockerfile-java-examples-1:1.0-SNAPSHOT
, um JVM-Parameter festzulegen. Verwenden Sie die JVM_OPTS
Umgebungsvariable:
docker run -p 8080:8080 -e JVM_OPTS='-Xmx128M -Xms128M' chanjarster/dockerfile-java-examples-1:1.0-SNAPSHOT
Systemeigenschaften festlegen , verwenden Sie die JAVA_ARGS
Umgebungsvariable:
docker run -p 8080:8080 -e JAVA_ARGS='-Dabc=xyz -Ddef=uvw' chanjarster/dockerfile-java-examples-1:1.0-SNAPSHOT
, um Programmlaufparameter bereitzustellen. Fügen Sie sie einfach später direkt hinzu:
docker run -p 8080:8080 chanjarster/dockerfile-java-examples-1:1.0-SNAPSHOT --debug
Das obige ist der detaillierte Inhalt vonDie Methode und der Prozess zur Erstellung eines Docker-Images mithilfe eines Java-Programms. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!