Heim  >  Artikel  >  Java  >  Die Methode und der Prozess zur Erstellung eines Docker-Images mithilfe eines Java-Programms

Die Methode und der Prozess zur Erstellung eines Docker-Images mithilfe eines Java-Programms

不言
不言Original
2018-09-19 15:35:332157Durchsuche

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.

Anforderungen

Hier sind einige Anforderungen für die Docker-Image-Produktion, und dann werden wir sehen, wie das geht.

  1. Der Produktionsprozess sollte in den Projektbauprozess integriert werden

  2. Verwenden Sie das offizielle Bild als Basisbild

  3. Stellen Sie die richtige Zeitzone ein

  4. Das Programm im Container wird als Nicht-Root-Benutzer gestartet

  5. Geben Sie die Schnittstelle an des Webprogramms

  6. Kann JVM-Parameter, Java-Systemeigenschaften und programmdefinierte Parameter übergeben

Lassen Sie uns darüber sprechen, wie das geht oben im Detail:

Der Produktionsprozess sollte in den Projektkonstruktionsprozess integriert werden

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.

Verwenden Sie das offizielle Image als Basis-Image

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.

Stellen Sie die richtige Zeitzone ein

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

Das Programm im Container wird als Nicht-Root-Benutzer gestartet

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.

Geben Sie die Schnittstelle des Webprogramms an

Für vernetzte Anwendungen muss der exponierte Port im Dockerfile angegeben werden, sonst kann der Port nicht zugeordnet werden.

EXPOSE 8080

JVM-Parameter, Java-Systemeigenschaften und programmdefinierte Parameter übergeben können

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

Beispielprojekt-Quellcode finden Sie hier: https://github.com/chanjarster/dockerfile-examples/

Verzeichnisstruktur

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

zum Erstellen der Image-Methode

mvn clean package dockerfile:build

führt

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_OPTSUmgebungsvariable:

docker run -p 8080:8080 -e JVM_OPTS='-Xmx128M -Xms128M' chanjarster/dockerfile-java-examples-1:1.0-SNAPSHOT

Systemeigenschaften festlegen , verwenden Sie die JAVA_ARGSUmgebungsvariable:

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn