Wie man Java in einem Docker-Container ausführt

Hallo da draußen, angehende Programmierer! Heute begeben wir uns auf eine aufregende Reise in die Welt von Docker und Java. Als dein freundlicher Nachbarschaftsinformatiklehrer bin ich hier, um dich Schritt für Schritt durch dieses Abenteuer zu führen. Also, schnall dir deine virtuellen Helme an und tauchen wir ein!

Docker Setting - Java

Vorteile der Verwendung von Docker-Containern zur Ausführung von Java-Anwendungen

Bevor wir mit dem Coden beginnen, lassen wir uns über den Grund sprechen, warum wir uns überhaupt mit Docker beschäftigen. Stell dir vor, du backst Kekse (bleib bei mir, ich verspreche, das hat mit Programmierung zu tun). Du hast dein perfektes Rezept, aber wenn du die Kekse bei deinem Freund zu Hause backst, kommen sie falsch raus. Verschiedener Ofen, verschiedene Ergebnisse, oder? Na, das ist ein bisschen so, wie es manchmal mit Software ist.

Docker löst dieses Problem, indem es eine konsistente Umgebung für deine Java-Anwendungen erstellt. Es ist wie ein magischer tragbarer Ofen, der deine Kekse immer perfekt backt, egal wo du bist. Hier sind einige wichtige Vorteile:

  1. Konsistenz: Deine Java-App läuft überall gleich.
  2. Isolierung: Anwendungen stören sich nicht gegenseitig.
  3. Portabilität: Einfach zwischen Entwicklung, Test und Produktionsumgebungen zu verschieben.
  4. Skalierbarkeit: Schnell mehrere Instanzen deiner App starten.
  5. Versionskontrolle: Einfach verschiedene Versionen deiner App und ihrer Abhängigkeiten verwalten.

Wie man Java in Docker mit Java-Basis-Images ausführt?

Gut, jetzt lassen wir uns die Hände schmutzig machen (virtuell, natürlich). Wir beginnen mit dem einfachsten Weg, Java in Docker zu verwenden, indem wir offizielle Java-Basis-Images nutzen.

Zuerst stellen sicher, dass Docker auf deinem Rechner installiert ist. Wenn nicht, geh zur Docker-Website und folge den Installationsanweisungen.

Jetzt erstellen wir ein einfaches Java-Programm. Öffne deinen Lieblings-Texteditor und gib folgenden Code ein:

public class HelloDocker {
public static void main(String[] args) {
System.out.println("Hello, Docker!");
}
}

Speichere diese Datei als HelloDocker.java. Nun kompilieren wir es:

javac HelloDocker.java

Dies erstellt eine HelloDocker.class-Datei. Jetzt sind wir bereit für Docker! Öffne dein Terminal und führe aus:

docker run --rm -v "$PWD":/app -w /app openjdk:11 java HelloDocker

Lassen wir diesen Befehl auseinandernehmen:

  • docker run: Dasweil Docker einen Container ausführen soll.
  • --rm: Dies löscht den Container nach dem Beenden.
  • -v "$PWD":/app: Dies hängt dein aktuelles Verzeichnis an das /app-Verzeichnis im Container an.
  • -w /app: Dies setzt das Arbeitsverzeichnis im Container auf /app.
  • openjdk:11: Dies ist das Java-Basis-Image, das wir verwenden.
  • java HelloDocker: Dies ist der Befehl, um unser Java-Programm auszuführen.

Wenn alles gut geht, solltest du "Hello, Docker!" in deinem Terminal sehen. Gratulation! Du hast dein erstes Java-Programm in einem Docker-Container ausgeführt!

Wie man Dockerfile verwendet, um benutzerdefinierte Java-Images zu erstellen?

Nun, da wir die Grundlagen kennen, nehmen wir es eine Stufe höher. Wir erstellen ein benutzerdefiniertes Docker-Image für unsere Java-Anwendung mit einer Dockerfile.

Erstelle eine neue Datei namens Dockerfile (ohne Erweiterung) im selben Verzeichnis wie deine Java-Datei und füge den folgenden Inhalt hinzu:

FROM openjdk:11
WORKDIR /app
COPY HelloDocker.java .
RUN javac HelloDocker.java
CMD ["java", "HelloDocker"]

Lassen wir dies auseinandernehmen:

  • FROM openjdk:11: Dies gibt unser Basis-Image an.
  • WORKDIR /app: Dies setzt das Arbeitsverzeichnis in unserem Container.
  • COPY HelloDocker.java .: Dies kopiert unsere Java-Datei in den Container.
  • RUN javac HelloDocker.java: Dies kompiliert unsere Java-Datei.
  • CMD ["java", "HelloDocker"]: Dies gibt den Befehl an, der beim Start des Containers ausgeführt wird.

Jetzt bauen wir unser benutzerdefiniertes Image:

docker build -t my-java-app .

Und führen es aus:

docker run my-java-app

Du solltest "Hello, Docker!" erneut sehen. Aber dieses Mal haben wir unser eigenes benutzerdefiniertes Docker-Image erstellt!

Wichtige Tipps für die Einrichtung von Java in Docker

Als wir unsere Docker-Reise beenden, lassen uns einige wichtige Tipps Revue passieren, die du im Hinterkopf behalten solltest:

Tipp Beschreibung
Verwende offizielle Basis-Images Starte immer mit offiziellen Java-Images von Docker Hub
Halte Images klein Verwende Alpine-basierte Images für eine kleinere Footprint
Verwende mehrstufige Builds Trenne Build- und Runtime-Umgebungen für kleinere End-Images
Führe nicht als root aus Verwende die USER-Anweisung, um zu einem nicht-root-Benutzer zu wechseln
Verwende Umgebungsvariablen Mach deine Container konfigurierbar
Optimiere für Caching Ordne Dockerfile-Anweisungen von am wenigsten bis am häufigsten wechselnd

Denke daran, wie das Lernen jeder neuen Fähigkeit, das Beherrschen von Docker erfordert Übung. Lass dich nicht entmutigen, wenn Dinge beim ersten Mal nicht perfekt funktionieren. Weiter experimentieren, weiter lernen und vor allem Spaß haben!

Wie wir in der Programmierwelt sagen: "Möge dein Code bugfrei sein und deine Container immer laufen!" Frohes Coden, zukünftige Docker-Meister!

Credits: Image by storyset