Hallo,
auf
Docker Hub stehen ab sofort 2 fertige Basis Docker Images für FHEM bereit:
- latest --> die aktuelle Stable Version des Docker Images, zusammen mit einem up-to-date FHEM.
- dev --> die aktuelle Entwickler Version des Docker Images, zusammen mit einem up-to-date FHEM.
Alle Images werden für unterschiedliche Plattformen angeboten. Derzeit sind dies für Linux:
- x86-64/AMD64
- i386
- ARM32v5, armel
- ARM32v7, armhf
- ARM64v8, arm64
Die richtige Plattform wird automatisch gewählt, wenn man das Image über das Meta-Repository läd:
docker pull fhem/fhem
Ohne die Angabe eines Tags am Ende wird das "latest" Image geladen. Wenn man hinten ":dev" anhängt, bekommt man entsprechend das andere Image.
Statt über das Meta-Repository zu gehen, kann man auch direkt aus einem der Plattform-spezifischen Repositories das Image laden. Dort stehen dann auch weitere Tags bereit, beispielsweise wenn man eine ganz bestimmte Version fest verwenden möchte statt über die "Rolling Tags" zu gehen.
Der Source Code wird auf Github unter
github.com/fhem/fhem-docker verwaltet.
Was bedeutet Basis Image?Die Idee ist, dass FHEM in dem Image möglichst unverändert ausgeliefert wird und nur solche Voreinstellungen gemacht werden, die für ein Docker Image generell sinnvoll sind. Auf dieser Grundlage kann jeder dann bei Bedarf seine eigenes Dockerfile schreiben und dort "FROM fhem/fhem" als Ausgangslage verwenden. Vermutlich ist das aber selten notwendig, denn Zusatzmodule sind soweit bereits im Image integriert. Sollte etwas fehlen, wird es zentral für alle ergänzt.
Wie benutze ich das Image?Das FHEM Installationsverzeichnis /opt/fhem wird (sicherlich nicht überraschend für die, die Docker kennen) als eigenes Volume definiert. Man kann also seine bestehende FHEM Installation beim starten des Containers über "-v /pfad:/opt/fhem" mit angeben. Wenn man das nicht tut, dann wird die FHEM Installation nach Zerstörung des Containers gelöscht. Ist das beim Start angegebene FHEM Verzeichnis leer, so wird FHEM dort aus dem Docker Image heraus installiert. Mit dieser Vorgehensweise kann man also seine Grundinstallation starten.
Was bietet das Image?Neben vorinstallierten Paketabhängigkeiten sind folgende Dinge verfügbar:
- Healthcheck über Port 7072, der auch die FHEMWEB Instanzen überwacht
- Automatischer Neustart im Falle eines plötzlichen Absturzes (unabhängig von Docker "restart always")
- Anzeige der verwendeten Docker Image Version direkt in FHEM über integriertes FHEM Modul "DockerImageInfo"
- Möglichkeit ARM Images auf einem x86-64 System zu starten (über QEMU)
- Änderung der UID/GID, unter der FHEM läuft
Folgende FHEM Einstellungen werden automatisch vorgenommen:
- attr global commandref modular
- attr global dnsServer <DNS_aus_resolv.conf>
- attr global mseclog 1
- attr global nofork 0
- attr global pidfilename ./log/fhem.pid
- attr global updateInBackground 1
- define DockerImageInfo DockerImageInfo
Dabei wird die dnsServer Einstellung bei jedem Neustart automatisch aktualisiert.
Wie kann ich das Image für mein eigenes FHEM Image verwenden?Wenn du selbst ein FHEM Image baust, dann kannst du dich in die Start und Konfigurationslogik des Basis Images einklinken.
Die folgenden Scripte werden an den entsprechenden Stellen im Ablauf ausgeführt, wenn sie vorhanden sind:
- /pre-init.sh - Wird beim allerersten Start des Containers noch vor der FHEM Installation ausgeführt.
- /post-init.sh - Wird beim allerersten Start des Containers direkt nach der FHEM Installation ausgeführt.
- /pre-start.sh - Wird bei jedem Start von FHEM vor dem eigentlichen Start ausgeführt, auch mehrfach während ein Container läuft.
- /post-start.sh - Wird bei jedem Start von FHEM direkt nach dem Start ausgeführt, auch mehrfach während ein Container läuft.