Hauptmenü

Fhem Docker Image

Begonnen von Steffen, 10 November 2017, 18:21:49

Vorheriges Thema - Nächstes Thema

Steffen

Hallo!

Ich habe mich ein wenig in das Format Docker eingearbeitet und über eine Dockerfile ein Image mit Fhem erstellt und erfolgreich gestartet.
Ich weiß das wenn der Container sich beendet alle einstellungen verschwinden, nun dachte ich wenn man ein  "commit" nach ein einem "detach" ausführt speichert er die Fhem-Config von Fhem auch ins neue Image aber das tut docker leider nicht zumindest nicht mit der fhem-config, ein von mir erstellter Test ordner bleibt bestehen im neuen image.

Wie löst ihr das mit docker? Ich würde wirklich gerne ohne Volumen zu mounten nur mit image/container Arbeiten, gibt es da vielleicht einen Weg?

Mfg Steffen

Wernieman

Entweder mit Volumen oder mit "bind" außerhalb ...

Auch wenn ich fhem eher nativ laufen lasse ...
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

Steffen

Ich fand das Thema mit Docker ebend spannender mit unabhängigkeit gegenüber von Host oder Datei Systemen, mit gemounten Volumen ist man ja nun schon wieder deutlich gebundener ans Host System.

Was ich nicht verstehe das ein commit ebend die Test datei behält aber nicht die änderung in der cfg?!?

Mfg Steffen

ThoTo

Ich empfehle einen Umstieg auf configDB statt fhem.cfg und das DB-File dann vom Host zu mounten.
Die Daten im Container zu halten widerspricht ein wenig der Architektur von Docker.

D.h. du erzeugst das Image mit der aktuellen FHEM-Version, bereitest alles für configDB vor und startest dann einen Container:
Zitatdocker run -d -v /opt/configDB.db:/opt/fhem/configDB.db:rw -p 8083:8083 fhemimage

Dann liegt deine Config (+zB myUtils, gplots etc.) am Host unter /opt/configDB.db und ist vom Container unabhängig, du kannst sie von dort auch wegsichern.

LG Thomas
KNX | MQTT | Docker | Sonos | FHEMapp

"Zwei Dinge sind unendlich, das Universum und die menschliche Dummheit, aber bei dem Universum bin ich mir noch nicht ganz sicher." (Albert Einstein)

Wernieman

Also ob Du jetzt die fhem.cfg oder die configDB vom Host holst ... da ist nicht configDB die Lösung, sondern das "Bind" um Host.

Man sollte auch darauf hinweisen, das Änderungen innerhalb vom Docker nicht so performant sind, wie im volumen/bind. Siehe Doku zu Docker

Ich persöhnlich würde übrigens in dem Falle NICHT sqllight, sondern richtig mysql/mariasql in einem 2. Docker verwenden. Das wäre die Idee von Docker mit Microservices,
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

ThoTo

Zitat
Also ob Du jetzt die fhem.cfg oder die configDB vom Host holst ... da ist nicht configDB die Lösung, sondern das "Bind" um Host.
Das hat ja auch niemand behauptet und wie du sagst es sind zwei Paar Schuhe.
Der Threadersteller wollte Lösungen und eine ist MyUtils, Gplot-Files, fhem.cfg etc. durch configDB abzulösen und dann in den Container zu mounten, das kann auch von Anfängern leicht umgesetzt werden.

Zitat
Man sollte auch darauf hinweisen, das Änderungen innerhalb vom Docker nicht so performant sind, wie im volumen/bind. Siehe Doku zu Docker
Ich persöhnlich würde übrigens in dem Falle NICHT sqllight, sondern richtig mysql/mariasql in einem 2. Docker verwenden. Das wäre die Idee von Docker mit Microservices,
Da hast du natürlich recht und gerade auch darum ist es ja wichtig die Dateien aus dem Container rauszubekommen.
Ich sehe es immer wieder dass Container mit VMs verwechselt werden und die Daten im Container bleiben, was absolut falsch ist.
Persönlich nutze ich für die ConfigDB SQLite, weil es absolut ausreichend ist, dem Zweck Genüge tut und in so gut wie allen Fällen auch schneller als Mysql/MariaDB ist  ;)
Ist FHEM mit DbLog im Spiel, siehe die Sache natürlich anders aus und Mysql/MariaDB sind wie ich finde notwendig.
KNX | MQTT | Docker | Sonos | FHEMapp

"Zwei Dinge sind unendlich, das Universum und die menschliche Dummheit, aber bei dem Universum bin ich mir noch nicht ganz sicher." (Albert Einstein)

rudolfkoenig

Was passiert, wenn man im FHEM@Docker ein FHEM-update ausfuehrt?

ThoTo

Zitat von: rudolfkoenig am 11 November 2017, 16:42:26
Was passiert, wenn man im FHEM@Docker ein FHEM-update ausfuehrt?

Dann ist FHEM im Container up to date und solange dein Container läuft ist das alles kein Problem.

Ziel von Docker ist aber Daten und Applikationen zu trennen.
Darum soll es möglich sein problemlos einen neuen Container aus einem fhem-Image zu erzeugen, weil die Daten liegen ja am Host oder in einem Volume und werden nur in den Container gemountet.

D.h. du solltest genaugenommen das Image updaten und nicht den Container.
KNX | MQTT | Docker | Sonos | FHEMapp

"Zwei Dinge sind unendlich, das Universum und die menschliche Dummheit, aber bei dem Universum bin ich mir noch nicht ganz sicher." (Albert Einstein)

Wernieman

Ansonsten legst Du den fhem-Ordner eben als "bind" extern an. Dann ist auch ein update persistend.

@ThoTo
Zitat...eine ist MyUtils, Gplot-Files, fhem.cfg etc. durch configDB abzulösen und dann in den Container zu mounten, das kann auch von Anfängern leicht umgesetzt werden.
Bezüglich "für Anfänger" sind wir verschiedener Meinung.

Aber das guten bei Unix (und FHEM), viele Wege führen zum Ziel mit jeweils vor/nachteilen ;o)
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

cfranz

Zitat von: Wernieman am 11 November 2017, 20:34:37
Ansonsten legst Du den fhem-Ordner eben als "bind" extern an. Dann ist auch ein update persistend.
Und für was sollte er dann Docker nutzen? Das macht irgendwie wenig Sinn. Das Konzept ist ja gerade, dass man die Daten außerhalb des Containers speichert. Wenn ich die Software aktualisieren möchte, dann baue ich ein neues Image.

Wernieman

Das Du das Programm, bzw. deren Abhängigkeiten "kapselst" ... erst in Kombination mit "Docker Swarm", Kupernetis u.Ä. mach eine Komplette Kapselung mit "auch "Programm innerhalb des Containers" einen Sinn. Da machst Du aber auch update außerhalb von FHEM.

Warum soll man eigentlich immer wieder einen neuen Container bauen sollen?
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

Steffen

Hallo!

Danke für diese Informationen, ich muss mich da ebend wohl noch weiter einarbeiten.

Ich habe schon versucht mein selbst erstelltes FhemImage über docker run -d -v /opt/fhem:/opt/fhem xxxx zu mounten und dachte das es so eine Art Spiegelung wäre aber
er stellt das Host Verzeichnis dann direkt in den DC(dockercontainer) ab, aber dann ist ja alles von dem vorher installierten Fhem weg, wie könnte
man es denn lösen das er die Daten vom DC ins Host Verzeichnis übernimmt?

Mfg Steffen

Wernieman

In dem Du vorher ein Backup machst ...

Wenn Du ein Verzeichnis direkt einmountest, WILLST Du, das es nicht gespiegelt, sondern direkt verändert wird ...
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

Steffen

Hallo,

Ist es möglich in einer Dockerfile schon den befehl zum Volumen Mounten zu geben?!?

Mfg Steffen

Wernieman

Stichwort: docker-compose
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html