GeoServer in wenigen Minuten mit Docker

9. März 2022

GeoServer ist einer der meist genutzten Kartenserver, was unter anderem an seinem großem Funktionsumfang und seiner einfach bedienbaren Benutzeroberfläche liegt. Die klassische Installation von GeoServer ist im Gegensatz dazu etwas anspruchsvoller. Ein moderner Ansatz ist GeoServer als Docker Container laufen zu lassen. Wie das funktioniert, wird im folgenden beschrieben.

Docker ist eine Software zur “Containervirtualisierung”. Dies bedeutet im Grunde dass alle Abhängigkeiten einer Software, in unserem Falle GeoServer, in einem “Image” gekapselt werden. Dieses Image wird auf dem Host-Betriebssystem als Container gestartet und kann, je nach Konfiguration, auf bestimmte Dateien oder Ports zugreifen.

meggsimum hat ein solches Docker-Image für GeoServer erstellt und bereits in vielen Projekten eingesetzt. Um dieses zu nutzen, müssen Sie erst Docker auf Ihrem System installieren und darauf in der Kommandozeile/Terminal zugreifen können.

Die einfachste Variante, um GeoServer lokal ohne besondere Konfiguration zu starten ist:

docker run \
  -p 8080:8080 \
  meggsimum/geoserver:2.20.3

Nach etwa einer halben Minute ist die Initialisierung abgeschlossen und Sie können mit Ihrem Webbrowser auf localhost:8080/geoserver die Admin-Oberfläche von GeoServer zugreifen. Einloggen können Sie sich mit den Standard-Zugangsdaten: Nutzername: admin Password: geoserver

Das GeoServer Image von meggsimum bietet viele Einstellungsmöglichkeiten, z.B. die Nutzung vorinstallierter Extensions oder CORS. Diese sind in der README-Datei des Projekts beschrieben und können über Umgebungsvariablen aktiviert werden. Im folgenden Beispiel wird CORS und die Nutzung der Vektor-Kachel-Extension aktiviert:

docker run \
  -p 8080:8080 \
  -e USE_CORS=1 \
  -e USE_VECTOR_TILES=1 \
  meggsimum/geoserver:2.20.3

Um Docker den Zugriff auf bestimme Ordner im Hostsystem zu erlauben, müssen diese “gemounted” werden. Dies geschieht mit dem Paramter -v was für “Volume” steht. Die Notation ist: -v /pfad/auf/hostsystem:/pfad/im/docker/container. Den Pfad auf Ihrem Hostsystem müssen Sie individuell anpassen. Auf Linux und Mac können Sie mit der Notation $(pwd) den Pfad von dem Ordner aus angeben, in dem Sie sich gerade mit Ihrem Terminal befinden. Der Pfad im Docker-Container sollte im Falle des GeoServer Images /opt/geoserver_data/ lauten:

docker run \
  -p 8080:8080 \
  -v $(pwd)/geoserver-data:/opt/geoserver_data/ \
  meggsimum/geoserver:2.20.3

In der Praxis werden Docker Container meist nicht allein gestartet, sondern im Zusammenspiel mit anderen Docker Containern. Dafür wird häufig das Werkzeug docker-compose benutzt. Dieses ist ebenfalls über die Kommandozeile verfügbar und kann mit Anleitung von diesem Link installiert werden. docker-compose kümmert sich darum, dass die referenzierten Docker Container miteinander kommunizieren können und ggf. gemeinsamen Zugriff auf bestimmte Ordner haben. Konfiguriert wird docker-compose über eine Textdatei im YAML Format namens docker-compose.yml. Beispielhaft ist hier eine solche Konfigurationsdatei, die einen GeoServer als docker-compose “Service” bereitstellt:

version: '3'

services:

  geoserver:
    image: meggsimum/geoserver:2.20.3
    ports:
     - 8080:8080
    volumes:
      - ./geoserver-data:/opt/geoserver_data/:Z
    environment:
      - EXTRA_JAVA_OPTS=-Xms1g -Xmx2g
      - USE_VECTOR_TILES=0
      - USE_CORS=0

Nachdem Sie diese Datei lokal erstellt haben, können Sie GeoServer über folgenden Befehl starten:

docker-compose -f docker-compose.yml up

Dies started ähnlich wie in den vorherigen Beispielen eine GeoServer Instanz. Der Unterschied ist, dass nun leicht weitere Docker-Container hinzugefügt werden können. Im Geo-Bereich würde sich etwa eine Postgres/PostGIS Datenbank oder eine Webmapping-Anwendung anbieten.

Falls Sie eine bestehende, frei verfügbare GeoServer Instanz zum Testen suchen, können Sie gerne den GeoServer von meggsimum nutzen. Diesen finden Sie unter services.meggsimum.de/geoserver.

Sprechen Sie uns gerne an, wenn Sie dazu Fragen haben.