Tutorial 2.1: Elasticsearch Installation mit Docker
Dauer: 15 Minuten
Schwierigkeit: Anfänger
Ziel: Elasticsearch läuft und antwortet auf http://localhost:9200
Was du am Ende dieses Tutorials erreicht hast
✅ Docker ist installiert und läuft
✅ Elasticsearch Container läuft
✅ Du kannst auf http://localhost:9200 zugreifen
✅ Du siehst die Antwort „You Know, for Search“
Schritt 1: Docker installieren (falls noch nicht vorhanden)
Prüfe ob Docker bereits installiert ist
Öffne dein Terminal (Mac/Linux) oder PowerShell (Windows) und tippe:
bash
docker --version
```
**✅ Wenn du eine Ausgabe wie diese siehst:**
```
Docker version 24.0.7, build afdd53b
```
→ **Spring zu Schritt 2!**
**❌ Wenn du einen Fehler siehst:**
```
docker: command not found
→ Installiere Docker jetzt:
Docker installieren
Windows & Mac:
- Gehe zu: https://www.docker.com/products/docker-desktop
- Klicke auf „Download for Windows“ oder „Download for Mac“
- Führe die heruntergeladene Datei aus
- Folge dem Installationsassistenten (Standard-Einstellungen sind OK)
- Starte deinen Computer neu (wichtig!)
- Starte „Docker Desktop“ aus dem Startmenü/Applications
Linux (Ubuntu/Debian):
bash
<em># Docker installieren</em>
sudo apt-get update
sudo apt-get install docker.io docker-compose
<em># Deinen User zur Docker-Gruppe hinzufügen (damit du kein sudo brauchst)</em>
sudo usermod -aG docker $USER
<em># Neu anmelden (oder Computer neu starten)</em>
Docker testen
Nach der Installation, teste erneut:
bash
docker --version
Sollte jetzt funktionieren!
Teste auch ob Docker läuft:
bash
docker ps
```
**Erwartete Ausgabe:**
```
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
Wenn die Liste leer ist → Perfekt! Docker läuft.
Wenn Fehler „Cannot connect to the Docker daemon“:
- Windows/Mac: Starte Docker Desktop aus dem Startmenü
- Linux:
sudo systemctl start docker
Schritt 2: Docker-Netzwerk erstellen
Warum brauchen wir ein Netzwerk?
Elasticsearch und Kibana (kommt später) müssen miteinander sprechen können.
Ein Docker-Netzwerk ist wie ein virtuelles LAN-Kabel zwischen den Containern.
Netzwerk erstellen
bash
docker network create elastic
```
**Erwartete Ausgabe:**
```
f3d6b7c8e9a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0u1v2w3x4y5z6
(Eine lange ID → Das ist normal!)
Überprüfen
bash
docker network ls
```
**Du solltest jetzt "elastic" in der Liste sehen:**
```
NETWORK ID NAME DRIVER SCOPE
abc123def456 bridge bridge local
def456ghi789 host host local
xyz789abc123 elastic bridge local ← HIER!
Schritt 3: Elasticsearch Container starten
Der wichtige Befehl
Kopiere diesen kompletten Befehl (alle Zeilen!) und füge ihn in dein Terminal ein:
Mac/Linux:
bash
docker run -d \
--name elasticsearch \
--net elastic \
-p 9200:9200 \
-p 9300:9300 \
-e "discovery.type=single-node" \
-e "xpack.security.enabled=false" \
-e "xpack.security.http.ssl.enabled=false" \
-e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
docker.elastic.co/elasticsearch/elasticsearch:8.11.0
Windows PowerShell:
powershell
docker run -d --name elasticsearch --net elastic -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e "xpack.security.enabled=false" -e "xpack.security.http.ssl.enabled=false" -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" docker.elastic.co/elasticsearch/elasticsearch:8.11.0
```
<em>### Was passiert jetzt?</em>
1. Docker lädt das Elasticsearch-Image herunter (ca. 500 MB)
2. Das kann 2-5 Minuten dauern beim ersten Mal
3. Du siehst verschiedene Download-Fortschrittsbalken
**Während des Downloads siehst du so etwas:**
```
Unable to find image 'docker.elastic.co/elasticsearch/elasticsearch:8.11.0' locally
8.11.0: Pulling from elasticsearch/elasticsearch
a2abf6c4d29d: Pull complete
dcc4698797c8: Pull complete
...
Status: Downloaded newer image for docker.elastic.co/elasticsearch/elasticsearch:8.11.0
```
**Am Ende kommt eine lange ID:**
```
f8a3d7e2c1b9a4f5e6d7c8b9a0f1e2d3c4b5a6f7e8d9c0b1a2f3e4d5c6b7a8f9
→ Das ist die Container-ID. Alles gut!
Schritt 4: Warten bis Elasticsearch bereit ist
Elasticsearch braucht 30-90 Sekunden zum Starten.
Container läuft?
bash
docker ps
```
**Du solltest sehen:**
```
CONTAINER ID IMAGE STATUS PORTS NAMES
f8a3d7e2c1b9 docker.elastic.co/elasticsearch/elasticsearch:8.11.0 Up 30 seconds 0.0.0.0:9200->9200/tcp, 9300/tcp elasticsearch
Wichtig:
STATUSsollteUp X secondssein- NICHT
RestartingoderExited
Wenn Status „Restarting“: → Spring zu „Troubleshooting“ am Ende!
Logs anschauen (Optional aber lehrreich)
bash
docker logs -f elasticsearch
```
**Was du siehst:**
```
{"@timestamp":"2024-11-11T10:30:45.123Z", "log.level": "INFO", ...}
{"@timestamp":"2024-11-11T10:30:46.234Z", "log.level": "INFO", ...}
...
```
Viele Log-Zeilen scrollen vorbei!
**Warte auf diese wichtige Zeile:**
```
[INFO ][o.e.n.Node] [f8a3d7e2c1b9] started
```
**Wenn du "started" siehst → FERTIG!**
Drücke `Ctrl+C` um die Logs zu verlassen (der Container läuft weiter).
---
<em>## Schritt 5: Erste Verbindung zu Elasticsearch</em>
Jetzt testen wir ob Elasticsearch wirklich antwortet!
<em>### Methode 1: Browser (Am einfachsten!)</em>
Öffne deinen Browser und gehe zu:
```
http://localhost:9200
Wenn du das siehst → ERFOLG!
json
{
"name" : "f8a3d7e2c1b9",
"cluster_name" : "docker-cluster",
"cluster_uuid" : "Xy7R3zN4TDev8-abc123xyz",
"version" : {
"number" : "8.11.0",
"build_flavor" : "default",
"build_type" : "docker",
...
},
"tagline" : "You Know, for Search"
}
„You Know, for Search“ → Elasticsearch läuft perfekt!
Methode 2: curl (Kommandozeile)
Mac/Linux:
bash
curl http://localhost:9200
Windows PowerShell:
powershell
Invoke-RestMethod -Uri http://localhost:9200
Sollte dieselbe JSON-Antwort wie im Browser zeigen.
Schritt 6: Wichtige Informationen verstehen
Schauen wir uns die Antwort genauer an:
json
{
"name" : "f8a3d7e2c1b9",
<em>// ↑ Container-ID als Node-Name</em>
"cluster_name" : "docker-cluster",
<em>// ↑ Standard-Cluster-Name</em>
"version" : {
"number" : "8.11.0",
<em>// ↑ Elasticsearch Version</em>
"build_type" : "docker",
<em>// ↑ Läuft in Docker</em>
"lucene_version" : "9.8.0"
<em>// ↑ Apache Lucene Version (Suchmaschinen-Core)</em>
},
"tagline" : "You Know, for Search"
<em>// ↑ Elasticsearch Motto :)</em>
}
Erfolgskriterien
Überprüfe ob alle Punkte erfüllt sind:
docker pszeigt elasticsearch Container mit Status „Up“http://localhost:9200im Browser zeigt JSON- Du siehst „You Know, for Search“
- Version-Nummer ist 8.11.0
Alle Punkte ✅? Perfekt! Weiter zu Tutorial 2.2!
Troubleshooting
Problem: Container startet nicht (Status „Restarting“)
bash
docker logs elasticsearch
```
**Häufige Fehlerursachen:**
**1. Zu wenig RAM**
```
ERROR: bootstrap checks failed
max virtual memory areas vm.max_map_count [65530] is too low
Lösung (Linux):
bash
sudo sysctl -w vm.max_map_count=262144
echo "vm.max_map_count=262144" | sudo tee -a /etc/sysctl.conf
```
**Lösung (Mac/Windows):**
- Docker Desktop öffnen
- Settings → Resources → Advanced
- Memory auf mindestens 4 GB erhöhen
- Apply & Restart
**2. Port 9200 bereits belegt**
```
Address already in use
Lösung:
bash
<em># Benutze anderen Port</em>
docker run -d --name elasticsearch --net elastic -p 9201:9200 ...
<em># Dann: http://localhost:9201</em>
```
---
<em>### Problem: "Cannot connect to Docker daemon"</em>
**Lösung:**
- **Windows/Mac:** Starte Docker Desktop
- **Linux:** `sudo systemctl start docker`
---
<em>### Problem: Download schlägt fehl</em>
```
Error pulling image
Lösung:
bash
<em># Netzwerk-Probleme? Andere Registry versuchen:</em>
docker pull elasticsearch:8.11.0
<em># Oder ältere, kleinere Version:</em>
docker pull docker.elastic.co/elasticsearch/elasticsearch:8.10.0
Problem: Browser zeigt „This site can’t be reached“
Checkliste:
- Läuft Container?
docker ps - Port richtig gemappt? Sollte
0.0.0.0:9200->9200/tcpzeigen - Elasticsearch fertig gestartet?
docker logs elasticsearch | grep started - Warte 30 Sekunden länger und versuche erneut
Notfall: Alles neu starten
bash
<em># Container stoppen und löschen</em>
docker stop elasticsearch
docker rm elasticsearch
<em># Neu starten</em>
docker run -d --name elasticsearch --net elastic -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e "xpack.security.enabled=false" -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" docker.elastic.co/elasticsearch/elasticsearch:8.11.0
Zusammenfassung
Was du geschafft hast:
✅ Docker installiert und getestet
✅ Docker-Netzwerk „elastic“ erstellt
✅ Elasticsearch Container heruntergeladen und gestartet
✅ Elasticsearch antwortet auf Port 9200
✅ Erste REST-API Anfrage erfolgreich
Wichtige Befehle die du gelernt hast:
bash
docker network create elastic <em># Netzwerk erstellen</em>
docker run ... <em># Container starten</em>
docker ps <em># Laufende Container anzeigen</em>
docker logs elasticsearch <em># Logs anschauen</em>
docker stop elasticsearch <em># Container stoppen</em>
docker start elasticsearch <em># Container wieder starten</em>
```
**Elasticsearch-Endpunkt:**
```
http://localhost:9200

Author: Andreas Lang
Andreas Lang konzentriert sich seit zwei Jahrzehnten auf die Webentwicklung und Webdesign mit dem Schwerpunkt PHP, Laravel und Javascript und betreut seine Kunden mit Herz und Seele in allen Bereichen von Entwicklung, Design, Suchmaschinenoptimierung, IT-Recht, IT-Sicherheit etc.

