gdal Container erneuern

12.07.2016 peter.korduan@gdi-service.de
GDAL die Bibliothek zur Konvertierung zahlreicher Geodatenformate ist ja in ständiger Weiterentwicklung. Im Projekt kvwmap wird auf Docker Container gesetzt. Wenn GDAL aktualisiert werden soll muss der Container ausgetauscht werden. In diesem Block wird beschrieben wie das geht.
Vorher aber noch mal kurz zum Verständnis eine Übersicht:
Der GDAL-Container der zum Einlesen der NAS-Daten verwendet wird, ist vom Docker Image pkorduan/gdal-sshd:2.1.0 abgeleitet. Darin befindet sich neben gdal auch ein sshd, damit man sich mit dem Container auch über ssh verbinden kann. Das gdal-sshd Image wiederum nutzt das Image geometalab/gdal-debian:2.1.0. Beim build dieses Images wird die Datei gdal-checkout.txt ausgelesen. Diese befindet sich in dem git Repository das für den build des images verwendet wird. Je nach eingestelltem branch steht da "trunk" (branch master) oder "tags/2.1.0" (branch 2.1.0) etc. drin. Und genau diese Texte bestimmen welche Resource beim build vom gdal svn Server geladen werden. Wen das interessiert, der kann im Makefile nachsehen. Hier ausschnittsweise:

GDAL_VERSION := $(shell cat ./gdal-checkout.txt)
... checkout --quiet "http://svn.osgeo.org/gdal/$(GDAL_VERSION)/" ...

Das Starten und Stoppen von Containern funktioniert für kvwmap-server mit dem Script dcm, siehe git Repository pkorduan/kvwmap-server
So nun haben wir alles zusammen und können beschreiben wie ein Update für den GDAL-Container funktioniert.

  1. gdal-sshd container stoppen
    dcm stop gdal
  2. gdal-sshd container löschen
    dcm remove gdal
  3. gdal-sshd image löschen
    dcm rmi pkorduan/gdal-sshd:2.1.0
  4. nach home wechseln
    cd /home/gisadmin
  5. Projekt mit Dockerfile für den gdal Container holen (falls noch nicht vorhanden)
    git clone https://github.com/geometalab/gdal-docker.git
  6. gdal image neu builden
    docker build -t geometalab/gdal-docker:2.1.0 /home/gisadmin/gdal-docker
    Damit wird ein Image mit der neuesten Version von gdal (trunk) erzeugt (weil nach dem clone defaultmäßig branch master eingestellt ist). Hier wird allerdings mit 2.1.0 getagged. Man könnte wenn man den Branch master nimmt auch mit latest taggen. Achtung! Jetzt kann man Kaffee trinken gehen.
  7. Projekt mit Dockerfile für gdal-ssh container holen (falls noch nicht vorhanden)
    git clone https://github.com/pkorduan/gdal-sshd.git
  8. gdal-sshd image neu builden
    docker build -t pkorduan/gdal-sshd:2.1.0 /home/gisadmin/gdal-sshd/2.1.0
    Damit wird das Image auf Basis des vorher gerade erzeugten lokalen Images geometalab/gdal-docker:2.1.0 erzeugt.
  9. gdal-sshd container starten
    dcm run gdal

Hinweis: Auf Schritt 5 und den zeitintensivsten Schritt 6 kann man auch verzichten, wenn einem die Update-Zyklen des Maintainers des gdal-Containers reichen. Wie alt die letzte Version des gdal-Images von geometalab/gdal-debian:2.1.0 ist kann man in den build details auf Dockerhub unter Last Updated sehen. Wenn einem das reicht was da steht, kann man auch auf Schritt 5 und 6 verzichten. Im Schritt 8 holt sich der docker image builder das image von dockerhub, wenn er es nicht lokal findet. Die hier geschriebene Anleitung gilt auch für spätere Versionen. Man muss halt nur die Versionsnummern im tag austauschen.
Entscheidend für die richtige Version ist der Eintrag in gdal-checkout.txt. Den Wert kann man selbst modifizieren wenn man das Git Repository von geometalab/gdal-docker cloned und selber den Branch festlegt oder den Eintrag in der Datei selbst festlegt.