Durch einen Post von Joachim Hummel wurde ich auf IOTstack aufmerksam – eine Art Installer für Docker sowie diverse Images für den Heimgebrauch wie z.B. Nextcloud, Pi-Hole, Traefik, Nodered, etc.

Was ist Docker?

Einfach ausgedrückt handelt es sich bei Docker um eine Software zur Containervirtualisierung. Jeder Container wird aus einem Image erzeugt. Ein Image kann man sich vorstellen als eine Art ZIP Archiv der fertigen Installation eines Softwaresystems wie z.B. Nextcloud. Images sind i.d.R. in einem öffentlichen Repository abgelegt und können auf das Host System (hier: auf den Raspi) heruntergeladen werden. Jeder Container wird von Docker in einem isolierten Prozessraum betrieben. Ein Container erhält vom Host System Zugriff auf Ressourcen wie CPU, Festplatte, Speicher etc. Auf einem Host parallel laufende Container „sehen“ sich standardmässig aber nicht.

Weitere Details findest du in diesem Eintrag auf Wikipedia oder direkt auf docker.io

Die Installation sonst komplexer bzw. umfangreicher Softwaresysteme reduziert sich mit IOTstack bzw. Docker auf ein paar wenige Schritte und ist dadurch selbst für Linux Anfänger einigermassen gut zu bewerkstelligen. Zudem ist es möglich, ein und das gleiche Software System mehrfach zu installieren – z.B. als Test-/ Produktions System oder für unterschiedliche Zwecke/ Kunden, etc. Da Docker (einfach ausgedrückt) zwischen internem und externem Netzwerk unterscheidet, kann dies mittels unterschiedlicher Port Mappings erreicht werden.

Raspi für die Installation vorbereiten

Als Basis für die Installation reicht eine SD Karte mit min. 8 GB sowie ein aktuelles Raspberry Pi OS Lite (Download siehe hier) absolut aus (für das Raspberry Pi NAS verwende ich stattdessen eine SSD). Ich empfehle dir, das OS nach dem ersten Start zuerst auf den aktuellsten Stand zu bringen mit

sudo apt -y update && sudo apt -y full-upgrade

Der Parameter -y sorgt dafür, dass die Installation ohne deine erneute Zustimmung durchgeführt wird. Je nachdem wie lange das Image bereits verfügbar ist und je nach Internetverbindung kann das Update mal eben bis zu 10 oder 20 Minuten in Anspruch nehmen.

Wenn du eine SD Karte verwenden solltest vergiss nicht, mittels raspi-config das Raspberry Pi OS die gesamte SD Karte nutzen zu lassen:

sudo raspi-config

Dies erreichst du über den Menüpunkt 6 Advanced Options / A1 Expand Filesystem sowie einen anschliessenden Reboot.
Wichtig: bei der Verwendung einer SSD funktioniert dieses Vorgehen nicht. Hierfür bootest du am besten einen PC mit GParted von CD oder USB, schliesst die SSD an und vergrösserst die entsprechende Partition entsprechend auf die maximale Grösse.

Installation

Die Installation von IOTStack ist am komfortabelsten, wenn du diese per Script startest. Da das Skript in Github im Repository von IOTStack abgelegt ist, benötigst du zuerst das Softwarepaket cURL, um das Script herunterladen zu können. Das erforderliche Paket kannst du installieren mit

sudo apt install -y curl

Jetzt kannst du die Installation von IOTStack starten mit

curl -fsSL https://raw.githubusercontent.com/SensorsIot/IOTstack/master/install.sh | bash

Ein Dialog fragt dich, ob Python 3 und diverse weitere benötigte Pakete installiert werden sollen. Die Frage beantwortest du mit Yes, da IOTStack ohne diese nicht funktioniert:

Installation Python und weitere Packages

Nach einigen Minuten wirst du gefragt, ob Docker installiert werden soll. Auch diese Frage solltest du besser mit Yes beantworten

Installation von Docker starten

Die Installation dauert nochmal weitere 4-5 Minuten (je nach Internetverbindung und Performance deines Raspis). Zwischendurch sieht es länger mal so aus, als würde die Installation einfach stehen bleiben. Hab einfach ein wenig Gelduld … sie läuft durch 😉

Jetzt musst du den Raspi neu booten

sudo reboot

Hinweis: Wenn du die bisherigen Schritte mit einem Tablet durchgeführt hast, könnten die nachfolgenden Schritte zu Darstellungsproblemen des Menüs führen. Auf meinem iPad passiert das zumindest sowohl mit dem Termius SSH Client sowie mit SSH Term Pro. Dies liegt an der Anzahl der zur Verfügung stehenden Zeilen, die dargestellt werden können. Auch die Anpassung der App Einstellungen haben in meinem Fall nichts gebracht.

Installation Portainer

Im Anschluss an den Neustart startest du IOTStack

cd ~/IOTstack
./menu.sh

Du siehst nun das Hauptmenü von IOTStack.
Navigiere mit den Pfeiltasten auf den Eintrag Build Stack und betätige dann die Enter Taste, um zu installierende Images mittels der Leertaste auszuwählen:

IOTStack Hauptmenü

Ich würde dir auf jeden Fall empfehlen, Portainer-ce zu installieren. Es handelt es sich dabei um ein sehr gutes System zur Verwaltung von Docker Containern. Du kannst sie damit administrieren – also starten, stoppen, Ports oder Logs einsehen, löschen, etc.

Anschliessend betätigst du die Enter Taste, um zurück in das Hauptmenü zu gelangen. Du siehst nun auch die Info, dass die Datei docker-compose.yml erstellt worden ist.

Ausgabe nach Auswahl der zu installierenden Images

Diese YAML Datei enthält neben der Netzwerkkonfiguration auch einen Konfigurationsabschnitt zu jedem Image (Service), das du zuvor ausgewählt hast.

Je nachdem, welche Images du ausgewählt hast, müssen ggf. in der YAML Datei weitere Konfigurationen gemacht werden. Für Portainer-ce ist dies allerdings nicht erforderlich.

Du kannst nun mittels Exit IOTStack verlassen und danach die Container von Docker Compose bauen lassen

docker-compose up -d

Die Aufgabe von docker-compose ist es, die von dir selektierten Images aus einem öffentlichen Repository herunterzuladen, zu entpacken und als Container zu starten. Bis auf den Start des Containers geschieht dies ausschliesslich beim initialen Aufruf von docker-compose. Alle nachfolgenden Aufrufe aktualisieren nur noch die Konfiguration eines bestehenden Containers – solltest du diese verändert haben. Neue Images werden nur heruntergeladen, wenn du die zu verwendende Version eines Images in docker-compose.yml angepasst hast oder wenn du ein Image explizit z.B. via Portainer gelöscht hast. Du hast jederzeit die Möglichkeit, Services aus dem YAML zu löschen oder neue hinzuzufügen. Du kannst auch ohne weiteres Services hinzufügen, die nicht im Build Stack enthalten sind.

Hinweis: Wichtig beim Bearbeiten der YAML Datei ist, dass du nie die Tab Taste verwendest sondern generell nur die Space Taste, um Einrückungen zu machen. Orientiere dich bei Änderungen oder Ergänzungen am besten immer an den vorhergehenden oder nachfolgenden Zeilen und deren Einrückung.

Die Ausgabe von Docker Compose auf der Konsole sieht ungefähr so aus:

Ausgabe von docker compose up -d

Sobald Docker Compose durchgelaufen ist, kannst du prüfen, ob deine Container korrekt erzeugt und gestartet wurden

docker ps

Die Ausgabe sollte ungefähr so aussehen

Ausgabe von docker ps

Portainer einrichten

Nun kannst du den Browser öffnen und z.B. die URL 192.168.2.82:9000 in die Adresszeile eingeben. Du gelangst so auf die Anmeldeseite von Portainer und wirst aufgefordert, dort ein Passwort für das Administrator Konto festzulegen:

Vergabe des Admin Passworts beim ersten Start von Portainer

Danach klickst du erst links im Navigationsmenü auf den Punkt Endpoints und dann auf Add endpoint:

Portainer einen neuen Endpoint hinzufügen

Du wählst Docker als Environment type und gibst dem Endpoint einen beliebigen Namen. Nachdem du den Schalter connect via socket aktiviert hast, gibst du in das Textfeld Public-IP localhost ein und fügst den Endpoint mittels Add endpoint hinzu:

Einen Docker Endpoint zu Portainer hinzufügen

Fertig … Wenn du jetzt in der Navigation auf Container klickst siehst du die Übersicht aller Container, die aktuell vorhanden sind. Da aktuell lediglich ein Portainer Container läuft sollte die Seite so aussehen:

Container Liste von Portainer

Herzlichen Glückwunsch!
Du hast auf deinem Raspberry Pi IOTStack mit einem ersten Docker Container aufgesetzt. Gar nicht so schwer, oder? Zur Sicherheit würde ich dir jetzt empfehlen z.B. mit Win32 Disk Imager eine Sicherheitskopie deiner SD Karte anzulegen oder diese auf eine zweite Karte zu clonen.

Jetzt kannst du z.B. mit der Installation von Nextcloud im Rahmen des Raspberry NAS Projekts fortfahren.
Sobald der Beitrag fertig ist, werde ich diesen hier verlinken.

Dieser Beitrag hat 4 Kommentare

  1. Heinz Hansen

    Hallo, habe nach der obigen Anleitung auf meinem “nackten” Raspi PI 4, aktuelles PI OS 64 bit lite installiert. Leider zeigt die LOG vom Portainer an Fehler an:
    INFO 2022/03/07 15:59:19 Encryption key file `portainer` not present
    INFO 2022/03/07 15:59:19 Proceeding without encryption key
    INFO 2022/03/07 15:59:19 Loading PortainerDB: portainer.db
    level=info msg=”2022/03/07 15:59:19 [INFO] [internal,ssl] [message: no cert files found, generating self signed ssl certificates]”
    level=info msg=”2022/03/07 15:59:20 [INFO] [main,compose] [message: binary is missing, falling-back to compose plugin] [error: docker-compose binary not found]”
    2022/03/07 15:59:20 server: Reverse tunnelling enabled
    2022/03/07 15:59:20 server: Fingerprint be:dd:a1:07:bb:9e:8d:fd:1f:df:6e:32:0a:e7:a9:b2
    2022/03/07 15:59:20 server: Listening on 0.0.0.0:8000…
    INFO 2022/03/07 15:59:20 [INFO] [cmd,main] Starting Portainer version 2.11.1

    level=info msg=”2022/03/07 15:59:20 [DEBUG] [chisel, monitoring] [check_interval_seconds: 10.000000] [message: starting tunnel management process]”
    level=info msg=”2022/03/07 15:59:20 [DEBUG] [internal,init] [message: start initialization monitor ]”
    level=info msg=”2022/03/07 15:59:20 [INFO] [http,server] [message: starting HTTPS server on port :9443]”
    level=info msg=”2022/03/07 15:59:20 [INFO] [http,server] [message: starting HTTP server on port :9000]”

    Was fehlt noch bei der Installation noch oder wo liegt der Fehler. Danke für Deine Hilfe.
    Gruß Heinz Hansen
    PS: hier noch docker ps8000/tcp, 0.0.0.0:9000->9000/tcp, 9443/tcp portainer-ce

    1. christian

      Hallo Heinz

      Seltsam …

      Was kommt denn wenn du Portainer aufrufst z.B. mit http://[raspi-ip-adresse]:9000?
      Prüfe auch mal, ob Docker korrekt läuft mit docker stats. Wenn Docker richtig läuft sollte eine Übersicht kommen mit CONTAINER ID, NAME, CPU, etc.
      Schau auch mal nach, welches Image von portainer-ce im docker-compose.yml hinterlegt ist (m.E. Verwendet IOTStack grundsätzlich latest – stattdessen sollte man latest grundsätzlich mit einer aktuellen Versionsnummer ersetzen). Ich verwende die Version 2.11.1 – Das sieht im docker-compose.yml dann so aus: image: portainer/portainer-ce:2.11.1-alpine. Nach dem Ersetzen musst du docker-compose up -d nochmals ausführen, um die Änderung anzuwenden. Denk auch dran nie sudo zu verwenden, wenn du mit IOTStack arbeitest!

      Lass mich wissen, was du herausfinden konntest bzw. ob du erfolgreich warst.

      Viele Grüsse
      Christian

  2. Heinz Hansen

    Hallo Christian,
    der Portainer und und andere Container laufen, alle lassen sich bearbeiten nur Portainer nicht, das Kästchen zum ankreuzen ist grau hinerlegt. Ich kann den Portainer über Desk nicht löschen, ebenfalls alle Buttons sind grau hinterlegt.
    Auch bei “Docker stats”sieht alles gut aus, Version Portainer: 2.11.1
    Gruß
    Heinz

    1. christian

      Hallo Heinz

      jetzt verstehe ich das Problem. Das Log sieht bei mir genauso aus.
      Und ich kann dich beruhigen … Du hast kein Problem 🙂
      Die Meldungen kommen vermutlich nur aus dem Grund weil kein Zertifikat für HTTPS gefunden wird.
      Dass Portainer nicht anwählbar ist, ist wohl neu. Stellt aber auch sicher, dass du dich nicht aus Versehen aussperren kannst indem du den Container löschst oder stoppst. Updates an Portainer würde ich nur im docker-compose.yml machen und dann mit docker-compose um -d neu bauen.

      Viele Grüsse
      Christian

Schreibe einen Kommentar

You are currently viewing Docker auf Raspberry Pi mit Portainer installieren