Docker

Homeassistant Nov 22, 2019

Ich denke ich brauche nicht all zu viel ├╝ber Docker berichten. Denn das Netz ist vvoll davon, warum als nochmal das Thema durchkauen? Kommen wir zum wesentlichen ­čśë.

Das Problem

Mein Problem war, das ich eine alte Ubuntu Version besa├č. Diese wurde mir bei meinem VDR (opens new window)beigelegt. Ich habe speziell easyvdr verwendet, da ich hier wenig Aufwand bei viel Nutze hatte.

Dies ganze ist schon eine Weil her, damals gab es Docker nicht so wie heute und es wurde alles im Haupt-/ Hostsystem installiert. Das ist aber schon gut 10 Jahre her. Ja... 10 Jahre... lief das Ger├Ąt Pausenlos... bis Heute.

Nach 10 Jahren, dachte ich mir "Mach ich mal ein Update" und es kommt, wie es kommen muss. Es klappt nicht wie es sollte, nach einer Neuinstallation war alles super... neue Ubunut Version... alles fix eingerichtet und dann am richtigen Platz, alles angeschlossen und schon ging der Rechner nicht mehr an.

Ich also bei Ebay Kleinanzeigen einfach mal ein g├╝nstigen Minipc rausgesucht, denn f├╝r meine Heimautomatisierung musste ich folgende Programme nur laufen haben:

  • FHEM
  • IoBroker
  • Mosquitto

Nun bei Ebay habe ich dann eine Winbox DC100 von MSI gew├Ąhlt.

Winbox DC 100

Diese hat 4 GB Hauptspeicher ne kleine Festplatte und vom Prozessor (i3 reicht das allemal aus.

Nun gut die Hardware ist gekauft, dass Ziel gesteckt. Es kann losgehen

Einrichtung

Ich habe die Grundlage mit der neuen Ubuntu Bionic Weaver (opens new window)Version gelegt. Dies ist aktuell und sollte auch das unters├╝tzen was ich ben├Âtige. Eine detaillierte Installation muss ich denke ich nicht aufzeigen, weil das bei ubuntu schon sehr gut beschrieben ist.

Installation Docker

Als n├Ąchstes installiere ich Docker, denn ich will los von der Hostinstallation und mich hin zu Docker bewegen. Damit kann ich auch einmal etwas experimentieren, ohne etwas kaputt zu machen.

Dazu reicht es aus die foelgneden Befehl also Root User auszuf├╝hren.

  1. Einmal die notwendigen Pakete installieren:
apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
  1. Das Zertifikat f├╝r den Source Sever einrichten
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
  1. Das Repo in den Sourcelisten hinzuf├╝gen
add-apt-repository
"deb [arch=amd64] https://download.docker.com/linux/ubuntu
$(lsb_release -cs) \n stable"
  1. Nun noch einmal die Paketlisten aktualisieren
apt-get update
  1. Docker installieren
apt-get install docker-ce docker-ce-cli containerd.io

Anschlie├čend ist Docker komplett installiert und kann somit auch verwendet werden. Nun starten wir mit der Einrichtung, denn von einer Installation kann man jetzt nicht mehr sprechen denn es werden ja fertige Abbilder "kopiert" und verwendet. Klasse! ­čśâ

Vorbereitungn

Je stopp! Bevor ich nun alles Zeige wie ich das Containergeraffel aufgebaut habe, wollte ich noch etwas loswerden... ­čśë Mir war aufgefallen, dass die Container auch eine unterhalten m├╝ssen. Beispielsweise muss ioBroker mit Fhem Kommunizieren. Damit das passieren kann, muss ein Netzwerk in der Containerstruktur erstellt werden. Soweit ich das verstehe ist das ein Virutelles Netz, in dem dann die Container eingehangen werden k├Ânnen.

Ich habe ein Netzwerk mit den Namen homeautomation mit folgendem Befehl erstellt

docker network create homeautomation

Dies ist die simpelste Form des Netzwerks, das kann noch viel mehr. Was alles m├Âglich ist steht hier (opens new window)weiter beschrieben.

Installation FHEM

Jeder fragt sich was Fhem ist. Fehm ist eine auf Perl basierte Umgebung, die mit den g├Ąngisten Heimautomatisierungs Ger├Ąten sprechen kann. Natprlich brauch man dazu entsprechende Hardware wie ein CUL Stick von Busware (opens new window)oder ein Jeelink Interface (opens new window).

Das kann ich, wenn der Bedarf besteht, auch gern weiter erl├Ąutern, hier soll es aber Grunds├Ątzlich nur um die Einrichtung der Software gehen.

Erstellung eines Containers

Ich habe rausgefunden, das f├╝r FHEM auch schon ein Docker Image (opens new window)existiert. Das verwende ich einmal. Dazu habe ich nach etwas bastelei folgenden Befehl erstellt

docker run -d -e HOST_HOSTANME='FHEM' --device=/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_AI04PIH9-if00-port0 --device=/dev/serial/by-id/usb-busware.de_CUL433-if00 --device=/dev/serial/by-id/usb-busware.de_CUL868-if00 --name fhem -p 8083:8083 -p 7072:7072 -v /docker/fhem:/opt/fhem fhem/fhem --net homeautomation

Was bedeutet das nun?

WertEigenschaft
-e HOST_HOSTNAME='FHEM'Dies definiert den Hostname des Images
--device=/dev...../Dies sagt dem Image, das es das Ger├Ąt vom HostSystem in den Conainer verbinden soll. Damit FHEM auf die Hardware zugreifen kann.
--name fhemDies ist der Name des Containers, der erstellt werden soll.
-p 8083:8083Das Fehm Webfrontend habe ich auf den Port 8083 gestellt, dieser Port muss somit auch freigegeben werden, so dass auch von au├čen auch darauf zugreifen kann.
-v /docker/fhem:/opt/fhemDamit beim Neustarten eines Containers nicht immer die kompletten Einstellungen erneut durchgef├╝hrt werden m├╝ssen. Ist das Verzeichniss, in dem die Einstellungen abgespeichtert sind, nach au├čen hin gemapped. So dass man diese Daten wegsichert.
-net homeautomationDie ist das Netzwerk, in dem sich die Container befinden werden.

Fhem ist nun nach absetzen des Befehls einsatzbereit und duch die Option -d ist dies auch im Hintergrund gestartet.

Konfiguration

Nun FHEM kann verwendet werden, ich habe noch eine Konfiguration aus meinem Altsystem. Damit ich das nicht alles h├Ąndisch ├╝bertragen muss, werde ich die Konfiguration in dem Konfigurationsverzeichnis einf├╝gen und FHEM neustarten.

Somit habe ich die Inhalte in /docker/fhem/fhem.cfg mit denen aus meiner gesicherten ├ťberschrieben. Ein Neustart des Images habe ich dann wie folgt erledigt

  1. Container Stoppen / Killen (Frag mich warum es den Stop Befehl gibt ­čśë )
docker kill fhem
  1. Entfernen des Containser
docker rm fhem
  1. Starten des Containers
docker run -d -e HOST_HOSTANME='FHEM' --device=/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_AI04PIH9-if00-port0 --device=/dev/serial/by-id/usb-busware.de_CUL433-if00 --device=/dev/serial/by-id/usb-busware.de_CUL868-if00 --name fhem -p 8083:8083 -p 7072:7072 -v /docker/fhem:/opt/fhem fhem/fhem --net homeautomation

L├Ąuft!

FHEM

Installation ioBroker

Fhem hat lange f├╝r mich vieles automatisiert. Jedoch ist die Syntax teilweise komplex und ehrich gesagt wurde vieles in einer Datei geschrieben und die Module (Perl) waren auch nicht so dolle.

Daher habe ich nach Alternativen gesucht, heraus kamen einige Systeme wie NodeRed usw. Jedoch habe ich gesehen das ioBroker mittlerweile eine sehr gro├če Comunity besitzt. Somit habe ich angefangen das einzusetzen. Da es auf eine Bustechnologie arbeitet war das Thema f├╝r mich auch interessant geworden, da hier auch andere Szenarien m├Âglich waren, als nur das einschalten eines Lichts.

Ab einsatz dessen, habe ich auch viel mehr Sensoren im Einsatz, neben fertig gekauften auch mal selbst gebauten Sensoren. Zuerst kommt aber erst mal die Einrichtung.

Container Erstellung

Hier gibt es auch ein fertiges Image f├╝r ioBroker (opens new window). Dieses hat aber div. Einstellungen. Ich habe mich aber daf├╝r entschlossen nur ein Standart zu betreiben. Die zus├Ątzlichen Module halten sich dabei in grenzen.

Folgender Befehl ist dabei herausgekommen

docker run -d -e HOST_HOSTANME='IOBROKER' --name=iobroker -p 1880:1880 -p 1887:1887 -p 8081:8081 -p 8082:8082 --restart=always -e PUID=1000 -e PGID=996 -e TZ=Europe/Berlin -v /docker/iobroker:/opt/iobroker/ buanet/iobroker:latest --net homeautomation

Viele Einstellungen sind wie oben auch definiert, nur das hier mehr Umgebungsvariablen eingestellt werden:

WertErl├Ąuterung
-e PUID=1000Dies ist die BenutzerID f├╝r die Benutzergruppe aus dem Root systen. Das ist wichtig wenn ein interne Prozess auf die externen Resourcen zugreifen will (sofern freigegeben)
-e PGID=996Dies ist die GruppenID f├╝r die Benutzergruppe aus dem Root systen. Das ist wichtig wenn ein interne Prozess auf die externen Resourcen zugreifen will (sofern freigegeben)
-e TZ=Europe/BerlinDie Zeitzone f├╝r Deutschland.

Die Konfigurationen werden hier auch ebenfalls au├čerhalb des Containers abgelegt. Somit im verzeichsni /docker/iobroker. Beim Start des Containers erstellt das Startup Skript automatisch die Grundinstallation und setzt somit ein Minimalsetz in das Verzeichnis. Der Start dauert etwas (bei mir ca 5 minuten), danach ist das Frontend ├╝ber http://server:8081 erreichbar.

Konfiguration

Auch hier habe ich noch vom Ursprungssytem mithile des Befehls

iobroker backup

Eine Backupdatei erstellt, dies macht nichts anderes, als das gesammte Verzeichnis (welches sich bei mir aktuell unter /docker/iobroker befindet) in ein Archiv zu komprimieren.

Dieses habe ich somit im neuen System r├╝berkopiert, und die Inhalte in das Zielverzeichnis /docker/iobroker extrahiert. Anschlie├čend habe ich iobroker noch mal neu gestartet mit folgenden Befehlen

  1. Container Stoppen / Killen
docker kill iobroker
  1. Entfernen des Containers
docker rm iobroker
  1. Starten des Containers
docker run -d -e HOST_HOSTANME='IOBROKER' --name=iobroker -p 1880:1880 -p 1887:1887 -p 8081:8081 -p 8082:8082 --restart=always -e PUID=1000 -e PGID=996 -e TZ=Europe/Berlin -v /docker/iobroker:/opt/iobroker/ buanet/iobroker:latest --net homeautomation

Nun l├Ąuft auch das schon mal ­čĹŹ.

iobroker

Jedoch kann es FHEM nicht auffinden? Warum?

iobroker Fhem

Ach ja stimmt, FHEM l├Ąuft nicht auf einen Hostsystem, es l├Ąuft in einem Container, der eine eigene IP-Adresse besitzt. Diese muss ich nun in iobroker eintragen.

FHEM Anbinden

Ich muss zuerst einmal rausfinden, welche IP der Container besitzt. Dazu kann ich mit docker inspect fhem alles abfragen.

In meinem Fall war das die IP 172.20.0.3

IP-Adresse

Diese habe ich dann in der Konfiguration der FHEM Instanz eingegeben. Und anschlie├čend hat sich iobroker dann auch direkt verbunden. Hurra! ­čÄë

Fehm Konfiguriert

Nun kann ioBroker auch mit FHEM kommunizieren und Befehle absetzen. FHEM kann hingegen dirket mit den Ger├Ąten sprechen, wie wir uns erinnern haben wir auch Ger├Ąte gemapped, auf die FHEM zugreifen will.

Mosquitto

ioBroker bringt einen MQTT Dienst mit, jedoch ist dieser etwas beschrnkt in der Anwendung. Es kann nur Nachrichten empfangen und jemand anderes kann es auslesen. Quais nur eine Queue.

Moswuitto bringt dort den Topic Ansatz mit. Das bedeutet das eine eingehende Nachricht gleichzeitig an mehrere Empf├Ąnger gehen kann.

Erstellung eines Containers

Na hier gibt es auch wieder nen fertiges docker Image (opens new window). Dieses liefert das komplette Set mit, welches den Broker und dessen Konfiguration anlegt. Auch hier gilt es, dass ich die Konfiguation nicht immer wieder neu erstellen mag, daher wird das Verzeichnis mit der Konfiguration wieder auf dem Host-System gemappt.

Folgender Befehl kam somit dabei heraus:

docker run -d -e HOST_HOSTANME='MOSQUITTO' -p 1883:1883 -p 1886:1886 -v /docker/mosquitto:/mosquitto/ eclipse-mosquitto --net homeautomation

Ich werde hier die Tabelle sein lassen, da hier auch nicht viele neuigkeiten auftreten. Grunds├Ątzlich wird nur das /docker/mosquitto Verzeichnis zugewiesen. Ebenso der Port 1883 und 1886 nach au├čen freigegeben und dem Netzwerk homeautomation angef├╝gt.

Eine konfiguratin habe ich erst mal nicht direkt vorgenommen, weil der Broker schon auf dem richtigen Port liegt und somit auch dann sofort Einsatzbereit ist.

Fazit

Ich hatte erst leichte Bef├╝rchtungen gehabt was docker mit iobroker angeht. Auch die Unterst├╝tzung der Hardware Peripherie mit FHEM, doch das hat sich eifnach in Luft aufgel├Âst. Mir ist klar geworden das Docker sehr m├Ąchtig ist. Auch die Kommunikation unter den Containern ist problemlos verlaufen, somit kann alles miteinander reden und es verh├Ąlt sich so. Ist wie im Hostsystem nur gekapselt in Container und kann immer von au├čen aktualisiert werden. Wenn etwas nicht klappt, dann wird die Version zur├╝ckgedreht.

Des Weiteren ist es mir auch m├Âglich eine Skalierung forzunehmen mit Kubernetes, wenn ich das will. Aber naja, f├╝r den Heimgebrauch ist das nicht notwendig.

Tags