Wie man Docker auf dem Raspberry Pi in 15 Minuten einrichtet

Docker ist ideal, wenn auf einem Raspberry Pi mehrere Anwendungen und Dienste parallel ausgeführt werden sollen. Die Einrichtung ist in 15 Minuten erledigt.

In Pocket speichern vorlesen Druckansicht 111 Kommentare lesen

Empfohlener redaktioneller Inhalt

Mit Ihrer Zustimmmung wird hier ein externes YouTube-Video (Google Ireland Limited) geladen.

Ich bin damit einverstanden, dass mir externe Inhalte angezeigt werden. Damit können personenbezogene Daten an Drittplattformen (Google Ireland Limited) übermittelt werden. Mehr dazu in unserer Datenschutzerklärung.

Lesezeit: 16 Min.
Von
  • Johannes Börnsen

Docker ist eine großartige Lösung für alle, die mehrere Anwendungen und Dienste parallel auf einem Raspberry Pi ausführen möchten. Das Tutorialvideo von Make erklärt die Installation von Docker und Portainer, einer übersichtlichen GUI-Containerverwaltung.

Zu diesem Zweck bietet Docker eine einfache Verwaltung von Anwendungen und Diensten auf einem Raspberry Pi. Container können schnell erstellt, ausgeführt und beendet werden, ohne dass man sich um Konflikte mit anderen Anwendungen sorgen muss. Für Raspi-Neulinge können die ersten Schritte allerdings etwas abschreckend wirken. Das Video von Make-Redakteur Johannes Börnsen und Make-Chefredakteur Daniel Bachfeld gibt auch Raspi-Neulingen einen schnellen Einstieg – komprimiert auf das Wesentliche in 15 Minuten.

Wir beginnen mit der Installation des Raspberry Pi OS, installieren dann Docker und Portainer und zeigen dann mithilfe des Home Assistant, wie man weitere Container in der grafischen Containerverwaltung Portainer installiert und verwaltet.

Karte konfigurieren (im Pi Imager)

  • Hostname
  • ssh aktivieren
  • Passwort setzen
  • Tastaturlayout

per SSH Verbindung aufnehmen (Putty)

Docker installieren in Shell

curl -fsSL https://get.Docker.com -o get-Docker.sh

sudo sh get-Docker.sh

sudo usermod -aG docker $USER

newgrp docker

docker run hello-world

docker volume create portainer_data

docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest

Portainer starten

in Browser Portainer aufrufen https://localhost:9443 (erster Aufruf mit Warnung)

Nutzer Passwort vergeben

Getting started anklicken

Environment anklicken

Container anklicken (links)

HASS installieren

Rechts oben Add Container

Image auswählen und Namen vergeben (HASS, homeassistant)

Unter Advanced Settings

  • Network -> Host
  • Restart Policy -> Always
  • dann Deploy Container klicken und warten

HASS aufrufen docker:8123

Nutzer einrichten

(Hinweis: Es handelt sich hier um einen Bonusinhalt für Menschen, die das Video oben nicht schauen können oder wollen. Die Informationen auf der Bildspur gibt das Transkript nicht wieder.)

Es gibt jede Menge coole Dienste für Raspberry Pi. Mit Home Assistant könnt ihr alle Geräte zu Hause vernetzen, mit PiHole Werbung und Tracking blockieren, ihr könnt ein NAS auf einem Raspi betreiben und vieles mehr. Das Problem ist nur: Raspis sind im Moment verdammt teuer, wenn man sie überhaupt bekommt. Man kann jedoch mehrere dieser Dienste auf einem Raspi betreiben, nämlich mit Docker-Containern. Wie man das genau macht, auch ohne super viel Ahnung von Raspis, zeigen euch mein Kollege Daniel und ich heute in diesem Video. Viel Spaß!

Ein Raspi 4 mit 4 GB RAM hat vor zwei Jahren noch 60 Euro gekostet. Jetzt muss man über 200 Euro dafür auf den Tisch legen, wenn man überhaupt einen bekommt. Ihr braucht für dieses Tutorial aber gar nicht unbedingt den neuesten Raspi. Daniel, auf welchem Raspi kann man Docker Container benutzen? Also, es funktioniert auf jeden Fall auf einem Raspberry 4 und einem 3. Auch auf einem Raspberry 2 kann man es ausprobieren, jedoch gibt es dort eingeschränkten Speicher. Man kann auf einem Raspberry 3 oder 4 diverse Container nebeneinander laufen lassen. Letztendlich ist der interne Hauptspeicher die limitierende Größe, aber bei 8 Gigabyte kann man schon etliche Container nebeneinander laufen lassen, und sie verbrauchen auch nicht so viel CPU-Zeit.

Docker Container sind eine super praktische Sache. Docker wird auf dem Raspi installiert, und dann könnt ihr mehrere Docker Container anlegen und in jedem solchen Container einen Dienst installieren. Diese laufen dann völlig unabhängig von dem, was auf dem Raspi noch so los ist, einfach nebeneinander her. Ihr könnt einzelne Container anschalten, stoppen, neu machen, löschen, auf einen anderen Raspi übertragen und so weiter. Das funktioniert alles ziemlich gut und kommt eigentlich eher aus dem Profi-Serverbereich. Aber auch auf dem Raspi macht das halt super viel Sinn, weil man damit experimentieren kann, ohne Reue zu haben. Wenn man irgendwo einen Dienst kaputtspielt, kann man den Container einfach löschen, einen neuen Container anlegen und den Dienst neu installieren. Alle anderen Container, die auf demselben Raspberry Pi laufen, sind davon komplett unberührt. Wir benutzen für dieses Tutorial einen Raspberry Pi 3. Außerdem braucht ihr natürlich eine für den Raspi ausreichend starke Stromversorgung und eine Micro-SD-Karte. Unsere hat für dieses Tutorial 16 GB, was vollkommen ausreichend ist, um mehrere Container darauf zu speichern. Ganz einfach: Je größer die Karte, desto mehr Container passen darauf.

Wir installieren das ganz normale Raspberry Pi OS auf die Speicherkarte und nutzen dafür den Raspberry Pi Imager. Über das Zahnrad können wir einige Feinheiten einstellen. Als Hostnamen wählen wir 'Docker', damit wir später leichter über das Netzwerk darauf zugreifen können, ohne extra die IP-Adresse herauszufinden. Wir aktivieren SSH, damit wir uns später mit dem Pi verbinden können und nutzen das einfach zu verwendende Passwort 'Docker' für den Benutzernamen 'pi'. Ihr könnt dies später natürlich ändern. Wir lassen die WLAN-Konfiguration an dieser Stelle unkonfiguriert, da wir einfach das normale LAN benutzen. Wir legen auch die Spracheinstellungen und das Tastaturlayout fest und wählen das deutsche Tastaturlayout aus.

Dann speichern wir die Einstellungen ab. Anschließend klicken wir auf "Schreiben" und bestätigen, dass wir alles auf der SD-Karte überschreiben möchten. Es kann eine Weile dauern, bis alle Daten auf die Karte geschrieben wurden. Dann stecken wir die Karte in den Raspberry Pi, verbinden ihn mit Netzwerk und Strom und starten den Raspberry. In der Regel wird der Raspberry Pi zweimal gestartet, da beim ersten Mal das Dateisystem auf die Größe der Karte erweitert werden muss. Sobald dieser Prozess abgeschlossen ist, können wir uns per SSH auf den Raspberry Pi verbinden. Wir können in der Zwischenzeit schon einmal prüfen, ob alles funktioniert, indem wir einen Ping auf „docker“ senden und auf eine Antwort warten. Wenn wir eine Antwort erhalten, wissen wir, dass der Raspberry Pi gestartet ist.

Und jetzt können wir weitermachen. Der Raspi läuft und Raspberry Pi OS ist gebootet. Jetzt brauchen wir eine Möglichkeit, um auf dem Raspi Shell-Befehle auszuführen. Man könnte dafür jetzt einen Monitor, eine Maus und eine Tastatur anschließen. Eleganter ist es jedoch per SSH, da man sich das Anstöpseln spart und stattdessen die Kommandozeile des Raspi übers Netzwerk auf seinem normalen Windows-PC öffnen kann. Dort kann man dann Shell-Befehle eingeben, die dann auf dem Raspi ausgeführt werden. Dafür benötigt man einen entsprechenden SSH-Client. Unter Windows ist das z. B. Putty. Den Link zu Putty findet ihr unten in der Videobeschreibung. In Putty gibt man einfach "Docker" als Ziel an, zumindest wenn man eine Fritzbox benutzt. Ansonsten muss man die IP-Adresse des Raspi eingeben, die man in seinem Router nachschauen kann.

Dann hat man schon die Kommandozeile des Raspi offen. Als dritte Möglichkeit könntet ihr auch noch eine VNC-Verbindung zum Raspi herstellen. Da bekommt ihr dann die Desktop-Oberfläche vom Raspi auf eurem Windows-PC angezeigt und könnt dann darin die Kommandozeile öffnen. Das müsstet ihr aber auch erstmal in der Config vom Raspi über SSH aktivieren, also ganz genau so über Putty. Dann gebt ihr in die Kommandozeile "sudo raspi-config" ein, geht dann auf "Interface options", aktiviert da VNC und stellt dann in den "Display options" noch ein, in welcher Auflösung der Desktop übertragen werden soll. Jetzt könnt ihr z.B. mit dem VNC Viewer (Link auch unten in der Videobeschreibung) den Raspi-Desktop öffnen. Wir machen es hier aber einfach über die SSH-Verbindung über Putty. Die Befehle zum Installieren von Docker und Containern und so weiter sind aber immer exakt dieselben, ganz egal, wie ihr jetzt die Kommandozeile öffnet. Und jetzt können wir auf dem Raspi Docker installieren. Dafür braucht man zwei Befehle, die ihr einfach nacheinander ausführt.

Alle Befehle, die wir in diesem Tutorial benutzen, findet ihr unten in der Videobeschreibung zum Rauskopieren. Das dauert jetzt einen Moment und wenn das fertig ist, gibt es einen Trick, damit wir nicht jedes Mal wieder "sudo" vor jedem Befehl eingeben müssen. Dafür fügen wir dem User "pi", den wir bei der Raspberry-Installation angelegt haben, die User-Gruppe "docker" hinzu mit diesem Befehl und dann gibt es einen zweiten Befehl, der die Änderung sofort wirksam macht. Jetzt können wir einmal testen, ob Docker korrekt installiert ist. Um zu gucken, ob die ganze Docker-Installation jetzt auch funktioniert, gibt es sozusagen einen Test-Image, ein kleines für Docker, und das installieren wir mal eben. "Unable to find Image" heißt immer nur, dass er lokal nicht das aktuelle Image zum Bauen des Containers gefunden hat und deshalb nachlädt.

Wir sehen hier, dass alles funktioniert hat - er hat das Image aus dem Internet nachgeladen, einen Container erstellt und eine Ausgabe generiert. Perfekt, es scheint zu funktionieren. Damit wir nicht immer alles über die Kommandozeile machen müssen, installieren wir Portainer. Portainer ist selbst ein Docker-Container und bietet eine grafische Benutzeroberfläche für Docker. Das bedeutet, dass ihr eine normale Browseroberfläche von eurem Windows-PC, Mac oder was auch immer aufrufen könnt, um Docker-Container bequem zu installieren, löschen, starten usw. Wir legen zusätzlich ein Volume für die Konfiguration an.

Ein Volume ist sozusagen ein Ordner, der sowohl vom eigentlichen Raspberry OS als auch von dem Container aus sichtbar ist. Das bedeutet, dass Daten zwischen diesem Container und dem normalen Betriebssystem ausgetauscht werden können. Wir legen dieses Volume mit dem folgenden Befehl an, und damit ist es erledigt. Dann kommt ein etwas längerer Befehl. "Docker run" bedeutet, dass ein Container anhand eines Images gebaut wird, das zuvor heruntergeladen wurde. Die Ports 8000 und 9443 werden aus dem Container nach außen sichtbar gemacht, damit wir später per Netzwerk darauf zugreifen können. Es werden noch ein paar Sachen festgelegt, wie zum Beispiel "Start always", was bedeutet, dass dieser Container automatisch nach jedem Reboot neu gestartet wird. Außerdem gibt es noch ein paar weitere Einstellungen, wie zum Beispiel die Verwendung von TCP Sockets für die interne Verbindung. Am Schluss gibt es noch "-v portainer_data", damit Docker weiß, dass ein Volume vorhanden ist mit dem es über das Dateisystem kommunizieren kann.

Lassen wir das Ganze nun starten, das wird wieder einen kleinen Moment dauern. Das Image wird heruntergeladen, entpackt und gestartet. Sobald das passiert ist, verbinden wir uns per Webbrowser mit Portainer und werden weitere Container wie Home Assistant und Node-RED installieren. Um auf Portainer zugreifen zu können, geben wir im Browser "Docker:9443" ein. Es wird eine Meldung erscheinen, dass die Verbindung unsicher ist. Das macht aber nichts, normalerweise würde ich mich per HTTP verbinden, also ohne verschlüsselte Verbindung. Portainer leitet das Ganze dann auf eine verschlüsselte Verbindung um, hat jedoch nur ein selbstgeneriertes Zertifikat. Um eine sichere Verbindung herzustellen, benötigt man ein Zertifikat im Browser. Portainer stellt sich selbst eins aus, was von einer öffentlichen Instanz nicht akzeptiert wird. Deshalb gibt es diese Fehlermeldung, aber man kann sie einfach ignorieren. Wir sind nun in der ersten Oberfläche von Portainer und müssen einen Benutzernamen und ein Passwort angeben bzw. festlegen. "Admin" ist bereits vorgegeben. Ich gebe einfach mal "PortainerAdmin" als Passwort ein, weil Portainer sehr streng ist und es mindestens 12 Zeichen lang sein muss. Ehrlich gesagt, nerven mich immer solche Passwortvorschriften, aber an dieser Stelle kommen wir nicht drumherum.

Dann erstellen wir den Benutzer und sind nun in der Portainer-Oberfläche. Links sehen wir einige Menüpunkte. Hier können wir verschiedene Benutzer erstellen, Registries legt fest, woher Portainer später weitere Images zum Containerbau herunterlädt. Das zeige ich euch gleich noch. Zunächst zu diesem Punkt hier: Man kann weitere Benachrichtigungen anzeigen lassen, also quasi Log-Dateien, was schiefgelaufen ist. "Settings" brauchen wir im Moment erstmal nicht. Wir klicken erstmal auf "Jetzt starten" und bekommen ein sogenanntes "Environment" zu sehen. Das bedeutet, dass wir einen Docker-Server lokal eingerichtet haben. Man könnte jetzt hier noch eine weitere Umgebung hinzufügen, die auf einem anderen Raspberry Pi läuft, und dann mit einer Bedienoberfläche quasi mehrere Docker-Server bedienen können. Wir haben jedoch nur die eine, deshalb klicken wir jetzt hier drauf.

Links erscheinen weitere Menüpunkte, von denen uns im Moment erstmal nur "Container" interessiert. Wir klicken darauf und sehen eine Übersicht aller Container, mit denen wir im Moment zu tun haben. Portainer läuft selbst in einem Container, deshalb läuft das. „Naughty Einstein“ ist der Name des ersten Containertests, den wir am Anfang gemacht haben und der nur "Hello World" ausgibt. Der heißt so, weil wir selber keinen Namen vergeben haben. Den können wir löschen, indem wir ihn vorne anklicken und dann in den Mülleimer verschieben. Jetzt können wir damit beginnen, weitere Container bzw. Dienste zu installieren, die dann in ihren eigenen Containern laufen. Wir möchten jetzt noch Home Assistant installieren. Wir klicken auf "Container" oben rechts und geben einen Container-Namen ein. Üblicherweise ist die Abkürzung „HASS“. Es ist wichtig, dass hier oben keine Sonderzeichen oder Leerzeichen drinstehen, da sonst der Container nicht gebaut wird. Die Fehlermeldungen bei Portainer sind nicht sehr ausführlich, man muss sie in den Logs suchen, daher vermeiden wir Leerzeichen. Wir geben nun oben den Namen ein und klicken hier rechts auf "Search" und landen nun bei Docker Hub. Das ist eine zentrale Plattform, auf der verschiedene Community-Projekte ihre Docker-Images hinterlegen, aus denen man sich Container bauen kann. Wir sehen hier an zweiter Stelle das offizielle Docker-Image der Home-Assistant-Community. Ich klicke einfach darauf und hier sehen wir noch ein paar Anleitungen, Dokumentationen und Tutorials. Wichtig ist der Name hier oben, den kopieren wir jetzt einfach und gehen zurück zu unserem Portainer.

Jetzt haben wir also den richtigen Namen angegeben und müssen nur noch den Restart-Policy-Button auf "always" setzen. Das sorgt dafür, dass der Raspberry Pi nach jedem Start automatisch den Container startet und wir uns nicht manuell mit Portainer verbinden und den Container starten müssen. Die Netzwerk- und Portkonfiguration macht das Docker-Image oder der Container selbst beim Anlegen. Am sichersten ist es, "Host" auszuwählen, damit der Container einfach das Netzwerk des Raspberry Pi übernimmt. Wenn wir dann auf "Deploy the Container" klicken, dauert es eine Weile, bis das Image heruntergeladen ist. Leider gibt es bei Portainer keinen Fortschrittsbalken für die Installation. Wenn wir aber wieder auf "Container" klicken, sehen wir den gerade installierten Home-Assistant-Container. Wenn dort "running" steht, ist die Installation abgeschlossen. Jetzt können wir Home Assistant aufrufen, indem wir im Browser auf "Docker:8123" gehen. So gelangen wir zur Einrichtung von Home Assistant, die dann exakt genauso abläuft, als hätten wir Home Assistant nativ auf dem Raspberry Pi installiert. Auf hub.docker.com können wir jetzt nach weiteren Containern suchen und diese genau auf die gleiche Art und Weise installieren, wie Daniel es gerade gezeigt hat, zum Beispiel Nextcloud oder OctoPrint. Ich wünsche euch viel Spaß beim Containern. Bis nächste Woche, ciao!

(jom)