Docker Logo

Docker auf Raspberry Pi sinnvoll?

Docker ist ja in aller Munde und vereinfacht die Bereitstellung von Anwendungen, da Container, die alle nötigen Pakete enthalten, leicht als Dateien transportieren und installieren lassen. Container gewährleisten die Trennung und Verwaltung der auf einem Rechner genutzten Ressourcen wie z.B Code, Laufzeitmodul, Systemwerkzeuge, Systembibliotheken und noch mehr.

Durch ein Video von Andreas Spiess wurde das Thema wieder mal direkt getriggert, dass ich mir das Thema dann doch angesehen habe. Das Ergebnis ist wirklich sehr zufriedenstellend, aber dazu gleich mehr im Artikel.

Als Hardware kam der Raspberry Pi 4 mit 4GB RAM zum Einsatz mit einer 16GB SD-Karte. Der hat somit auch ordentlich Speicher was dem ganzen Aufbau wirklich sehr hilfreich ist. Ein schlankes Raspian OS ist vollkommen ausreichend, es benötigt kein spezielles Image für die Installation von Docker.

Hardware

Zuerst installieren wir “git” damit das notwendige Software Paket installiert werden kann.

sudo apt install git
git clone https://github.com/SensorsIot/IOTstack.git
cd IOTstack/
bash ./menu.sh

Installation Docker auf dem Raspberry Pi

Danach wird Docker installiert mit “Install Docker” über das Menü:

Wenn die Installation fertig ist geht es daran Anwendungen zu installieren unter dem Menüpunkt “Build Stack”. Dort findet man schon sehr viele Anwendungen die installiert werden können. Hier ein kleiner Auszug der zu Anwendungen die zur Auswahl stehen:

  • Portainer
  • Portainer-CE
  • NodeRED
  • InfluxDB
  • Grafana
  • Eclipse Mosquitto
  • Telegraf
  • MariaDB
  • openHAB
  • Pi-Hole
  • Nextcloud
  • Gitea
  • Wireguard
  • und noch vieles mehr …

Installation Portainer auf dem Raspberry Pi

Nun geht es an die Installation von “Portainer-CE” und nicht Portainer da diese nicht aktuell ist. Portainer-CE steht für die Dockerverwaltung als Community Edition mit der Version 2.0.0 zur Verfügung.

Dazu wählt man die Software mit der Leertaste aus und wird dann automatisch installiert mit all seinen Abhängigkeiten, Festplatten, Webservices, Ports, IP-Adressen usw. Es muss nichts mehr gemacht werden außer “docker-compose up -d”. Mit diesem Kommando wird die Datei “docker-compose.yml eingelesen und ein Docker Container gebaut, direkt auf dem Raspberry Pi.

Wenn der Container fertig erstellt wurde kann man mit dem Befehl “docker ps” nachsehen welche Docker Container derzeit laufen. Zu sehen ist der Prozess mit dem Image “portainer/portainer-ce” .

Nun rufen wir das Webinterface von Portainer auf, welches dann erst noch einen Benutzernamen und ein Passwort zur Erstellung des Zugangs erstellt. Hierzu folgenden Aufruf im Browser eingeben :
http://raspberrypi.local:9000 – unter der Portnummer 9000 ist die Anwendung Portainer dann immer erreichbar. 

Nach erfolgreicher Anmeldung sollte Portainer wie hier abgebildet in etwa aussehen. In diesem Beispiel sind schon ein paar mehrere Anwendungen zu sehen die bereits installiert sind. Zu sehen ist auch dass hier zwei NodeRED Container laufen. Ich beschreibe nun wie man NodeRED auf den Rapsberry Pi zweimal installiert. Ist zum Beispiel sinnvoll wenn 2 Leute gleichzeitig in NodeRED programmieren wollen, aber jeder seine eigene Umgebung haben möchte, damit es nicht zu einem Code-Konflikt kommt.

Portainer Container

Einrichtung NodeRED mit Docker und 2 Container

Im Prinzip kann man über “bash ./menu.sh” der ersten Container für NodeRED installieren. Die Installation wird dann in die Datei “docker-compose.yml” geschrieben im Verzeichnis “/home/pi/IOTstack”.
Schauen uns wir die Datei kurz an.

 nodered:
    container_name: nodered
    build: ./services/nodered/.
    restart: unless-stopped
    user: "0"
    privileged: true
    env_file: ./services/nodered/nodered.env
    ports:
      - "1880:1880"
    volumes:
      - ./volumes/nodered/data:/data
      - /var/run/docker.sock:/var/run/docker.sock
      - /var/run/dbus/system_bus_socket:/var/run/dbus/system_bus_socket
    devices:
      - "/dev/ttyAMA0:/dev/ttyAMA0"
      - "/dev/vcio:/dev/vcio"
      - "/dev/gpiomem:/dev/gpiomem"

Unter Ports wird der Container mit der Portnummer “1880” definiert. Das ist der Port im Container wenn NodeRED dort gestartet wird. Die zweite Portnummer ist der Port am Raspberry Pi selbst, wie dieser über das lokale Netzwerk mit einen Browser erreichbar ist, wie z.B. http://192.168.1.25:1880 . Die Ports innerhalb der Container werden sozusagen nach außen mit der gleichen oder anderen Portnummer gemappt, da sonst der Container bzw. die Webanwendung im lokalen Netzwerk nicht erreichbar wäre per Browser.

Nun erstellen wir einen zweiten Container für NodeRED , hier das Beispiel welches in die Datei “docker-composer.yml” eingetragen wird. Danach “docker-compose up -d” eingeben damit der Container gebaut und gestartet wird.

 nodered2:
    container_name: nodered2
    build: ./services/nodered/.
    restart: unless-stopped
    user: "0"
    privileged: true
    env_file: ./services/nodered/nodered.env
    ports:
      - "1881:1880"
    volumes:
      - ./volumes/nodered/data2:/data
      - /var/run/docker.sock:/var/run/docker.sock
      - /var/run/dbus/system_bus_socket:/var/run/dbus/system_bus_socket
    devices:
      - "/dev/ttyAMA0:/dev/ttyAMA0"
      - "/dev/vcio:/dev/vcio"
      - "/dev/gpiomem:/dev/gpiomem"

Der beiden NodeRED Container sind dann über folgende Portnummern erreichbar:

  • http://raspberrypi.local:1880
  • http://raspberrypi.local:1881

So sieht dann die Umgebung aus wenn beide Container gestartet sind. Ich finde dass ist doch richtig schick und es können zwei Leute gleichzeitig auf dem Raspberry Pi mit NodeRED programmieren. Parallel könnte man noch NextCloud, MQTT-Broker (Mosquitto) und eine Datenbank (InfluxDB) installieren.

Fazit:

Die Performance ist sehr gut und es können durchaus mehrere Container parallel installiert und gestartet werden. Der Raspberry Pi 4 macht das ohne größere Probleme, selbst wenn Nextcloud/ownCloud installiert ist. Über Portainer können sehr komfortabel Container gestoppt werden die gerade nicht benötigt werden, was die Performance für laufende Container erhöht. Das wirklich gute daran ist dass man Anwendungen schon mal installieren kann, aber nicht gestartet werden müssen. Den Container startet man wenn dieser benötigt wird. Es können über das Webinterface neue Container hinzugefügt werden, Images, Volumes und Netzwerk verwaltet werden.

Positiver Nebeneffekt:

Ein anderer positiver Nebeneffekt der hier zum tragen kommt ist, dass es manchmal eine Herausforderung sein kann eine Webanwendung mit all seinen Abhängigkeiten, Schnittstellen, Datenbanken und Benutzern zum laufen zu bekommen. Mit Docker installiert man einfach die Anwendung wie z.B. Nextcloud startet den Browser und fertig. Es braucht hier nicht die Komplexität mit Webserver, PHP-Versionen, Datenbanken im einzelnen. Wenn der Container erfolgreich läuft kann man sich via Portainer per Console  verbinden und sich die Installation der einzelnen Komponenten ansehen. Dadurch lernt man viel und kann es dann auch nativ in einer VM-Umgebung installiert werden.

NodeRED Port 1880
NodeRED Port 1881

Anbei das Video von Andreas Spiess in Englisch

Wir benötigen Ihre Zustimmung um den Inhalt von YouTube laden zu können.

Mit dem Klick auf das Video werden durch den mit uns gemeinsam Verantwortlichen Youtube [Google Ireland Limited, Irland] das Video abgespielt, auf Ihrem Endgerät Skripte geladen, Cookies gespeichert und personenbezogene Daten erfasst. Damit kann Google Aktivitäten im Internet verfolgen und Werbung zielgruppengerecht ausspielen. Es erfolgt eine Datenübermittlung in die USA, diese verfügt über keinen EU-konformen Datenschutz. Weitere Informationen finden Sie hier.

PHA+PGlmcmFtZSBzcmM9Ii8vd3d3LnlvdXR1YmUuY29tL2VtYmVkL2E2bWp0OHRXVXdzIiB3aWR0aD0iNTYwIiBoZWlnaHQ9IjMxNSIgZnJhbWVib3JkZXI9IjAiIGFsbG93ZnVsbHNjcmVlbj0iYWxsb3dmdWxsc2NyZWVuIj48L2lmcmFtZT48L3A+

Bei Frage wie immer die Kommentarfunktion bitte nutzen.

Viel Spaß beim ausprobieren und/oder basteln wünscht Joachim

Die mit Sternchen (*) gekennzeichneten Verweise sind sogenannte Provision-Links. Wenn du auf so einen Verweislink klickst und über diesen Link einkaufst, bekomme ich von deinem Einkauf eine Provision. Weiterführende Infos gibt es hier unter Punkt 8 in der Datenschutzerklärung  https://blog.unixweb.de/datenschutzerklaerung/

3 Kommentare

  1. Danke Joachim, ein wirklich interessanter Artikel, ich mache ja momentan nur sehr viel mit Openhab auf dem Raspi, wäre hier auch eine Container Installation von Nutzen?

    Liebe Grüße aus Tirol,
    Karl-Heinz (OE7WKT)

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.