Docker auf dem Raspberry Pi installieren & erste Container starten einfach erklärt

Als Video ansehen
Bereitgestellt über YouTube

Docker auf dem Raspberry Pi installieren & erste Container starten einfach erklärt

In unserem vorherigen Beitrag/Video haben wir uns mit der Frage beschäftigt, ob Docker auf dem Raspberry Pi Sinn macht. Zusammengefasst war das Ergebnis: Es gibt durchaus einige sinnvolle Anwendungsfälle, um Containertechnologien wie Docker auf dem Pi einzusetzen. Wenn ihr euch dafür entschieden habt bzw. Docker ausprobieren möchtet, zeigt euch folgender Beitrag, wie man Docker auf dem Raspberry Pi installiert.

Vorbereitung: System auf den aktuellen Stand bringen

Wie vor jeglicher Softwareinstallation sollten wir zunächst die Paketquellen inklusive der Pakete aktualisieren, um mögliche Konflikte zu vermeiden:

sudo apt update && sudo apt upgrade

Docker auf dem Raspberry Pi installieren

Für die eigentliche Installation hat uns Docker ein Bash-Skript zur Verfügung gestellt. Es fügt automatisch die offiziellen Paketquellen hinzu und installiert die Pakete, wie z.B. docker-ce. Dieses Skript laden wir herunter und führen es aus:

curl -fsSL https://get.docker.com -o install-docker.sh
bash install-docker.sh

Damit Docker ohne Root-Rechte (also ohne sudo) ausgeführt werden kann, wird unser aktueller Benutzer in die gleichnamige Benutzergruppe aufgenommen. Anschließend mit newgrp die Gruppenmitgliedschaft neu laden – dadurch ist die Änderung sofort wirksam, ohne eine neue Konsolensitzung zu starten.

sudo usermod -aG docker $USER
newgrp docker

Starten unserer ersten Docker-Containers auf dem Raspberry Pi

Der Klassiker Hello World ist auch als Docker-Image verfügbar und bietet sich als erster Test an.

docker run hello-world

Ein sinnvolleres Beispiel ist dagen ein Webserver. Auf Basis des aktuellsten Nginx-Images starten wir einen gleichnamigen Container. Damit wir auf den Nginx Webserver zugreifen können, ist eine Portweiterleitung notwendig. In diesem Beispiel wird Port 80 des Containers auf Port 80 des Hosts weitergeleitet. Das Format ist Host:Container. Soll Port 80 des Containers auf Port 81 des Hosts bereitgestellt werden, ließe sich dies über -p 81:80 realisieren.

docker run --name webserver -p 80:80 nginx:latest

Rufen wir nun im Browser http:// gefolgt vom Hostname oder der IP-Adresse des Pi auf, erscheint die Standard-Willkommensseite des Nginx Webservers. Da wir den Container im Vordergrund gestartet haben, sehen wir auf der Konsole die Zugriffslog – mit unserer soeben durchgeführten Testabfrage.

Standardmäßig laufen Container im Vordergrund und können daher mit STRG + C beendet werden.

Bereitstellen eigener HTML-Dateien über den Webserver

Um eigene Dateien wie z.B. statische HTML-Seiten bereitzustellen, müssen wir ein Volume mounten. Docker-Container sind standardmäßig isoliert. Sie haben keinen Zugriff auf Ordner oder Dateien des Hostsystemes – außer wir stellen diese über ein Volume bereit. Dazu gibt es das Argument -v Hostpfad:Containerpfad – im Beispiel legen wir einen Ordner /tmp/www an. Dieser soll vom Webserver ausgeliefert werden. Beispielhaft mit einer kleinen index.html Seite:

mkdir /tmp/www
echo '<h1>Hallo vom ersten Nginx Webserver auf deinem Pi!</h1>' > /tmp/www/index.html

Da der Name eines Containers einmalig sein muss, ist es notwendig, zunächst den oben erstellten Container namens webserver zu löschen:

docker rm webserver

Nun kann ein neuer gestartet werden, dem wir /tmp/www in /usr/share/nginx/html bereitstellen. Der Container hat aus seiner Sicht ein eigenes Dateisystem, unabhängig vom Host. Nginx wurde in seinem Image so konfiguriert, dass alle Dateien und Ordner innerhalb von /usr/share/nginx/html ausgeliefert werden. Durch folgendes Volume hängen wir dort den Ordner /tmp/www des Hostsystemes ein:

docker run --name webserver -p 80:80 -v /tmp/www:/usr/share/nginx/html nginx:latest

Wie zuvor kann nun http:// gefolgt vom Hostname oder der IP-Adresse des Pi aufgerufen werden, um unsere Testseite im Browser anzuschauen.

Der Container läuft allerdings nur, so lange die Konsole geöffnet ist und der Befehl läuft. Schließen wir die Konsole oder beenden den laufenden docker run Befehl mit STRG + C, läuft der Webserver nicht mehr. Je nachdem was wir mit Docker machen möchten ist dies in Ordnung. Für Prozesse die ständig im Hintergrund laufen sollen, macht es wenig Sinn. Docker bietet dafür den sogenannten detach mode an: Er startete den Container im Hintergrund, völlig unabhängig von der aktuellen Konsolensitzung. In etwa vergleichbar, als würde der Prozess im Container als Systemd-Dienst oder mit screen gestartet werden.

Dafür genügt es, den Schalter -d an docker run anzuhängen

docker run -d --name webserver -p 80:80 -v /tmp/www:/usr/share/nginx/html nginx:latest

Die Ausgabe des Containers öffnet sich dadurch nicht mehr automatisch, da er ja im Hintergrund gestartet wird. Wir können sie mit docker log jedoch jederzeit öffnen:

docker logs -f webserver

Durch -f folgt Docker den Bildschirmausgaben, wir sehen also neue Einträge sofort auf der Konsole. Alternativ können wir den Befehl auch ohne -f verwenden. Dann erscheinen nur ältere Logs, die bis zum Aufruf des Befehles vorlagen.

Leave a Reply