Startseite>Docker einsetzen auf dem Raspberry Pi
Aus Raspberry Pi Geek 06/2017

Docker einsetzen auf dem Raspberry Pi (Seite 3)

Die spezielle Architektur des RasPi bedingt, dass die selbst gebauten Container in der Regel nur auf anderen RasPi-Geräten laufen. Um ein erstes Image zu bauen, erstellen Sie auf dem Raspberry Pi einen Ordner im Home-Verzeichnis:

$ mkdir ~/simple_website

Wechseln Sie in das Verzeichnis und erstellen Sie dort die Datei index.html, die Sie anschließend mit beliebigem HTML-Code füllen. Erstellen Sie im gleichen Verzeichnis die Datei Dockerfile und übernehmen Sie den Inhalt aus Listing 2. Zeile 1 beschreibt, auf welchem Image der Container basiert. Beim Bau lädt Docker das entsprechende Image herunter und beginnt, alle weiteren Schritte darauf aufzubauen.

Das RUN in Zeile 2 markiert einen Aufruf, der intern via /bin/sh -c Kommandos zur Installation des Nginx-Pakets übergibt. Im Anschluss sorgt die COPY-Anweisung für die Platzierung der Datei index.html im Container, wobei Docker davon ausgeht, dass sich die Datei im selben Verzeichnis befindet wie das Dockerfile.

Listing 2

 

FROM resin/rpi-raspbian:jessie-20160831
RUN apt-get update; apt-get install -y nginx
COPY index.html /var/www/html/
ENTRYPOINT ["/usr/sbin/nginx", "-g", "daemon off;"]
EXPOSE 80

Existiert das Zielverzeichnis nicht, legt Docker es automatisch an. Damit der Webserver Nginx im Container läuft, definiert ENTRYPOINT den passenden Befehl inklusive Parameter, der den Dienst im Vordergrund startet. Docker ruft dieses Kommando nach dem Start des Containers auf, wobei die Schreibweise mit eckigen Klammern dafür sorgt, dass das Ausführen ohne /bin/sh -c gelingt.

Die Zeile EXPOSE 80 bewirkt, dass der Container den Port 80 öffnet, über den Sie eine Verbindung zu Nginx herzustellen. Übrigens hält der im Vordergrund laufende Webserver den Container offen. Docker killt den Container erst, wenn Nginx stoppt.

Rufen Sie aus dem Verzeichnis ~/simple_website/ heraus nun das Kommando für den Bau des Containers auf (Listing 3, Zeile 1). Die Option build leitet die Aktion ein, der Schalter -t akzeptiert die Angabe eines symbolischen Namens (Tag). Üblicherweise besteht dieser aus einem Benutzernamen und einer kurzen Bezeichnung, zwischen denen ein Schrägstrich steht. Der Punkt am Ende gibt das Build-Verzeichnis an.

Listing 3

 

$ sudo docker build -t "rpi-geek/simple_website" .
$ sudo docker run -d --name simple_website -p 80:8080 "rpi-geek/simple_website"

Wenn Sie das Image zum ersten Mal bauen, führt Docker alle Schritte aus und speichert die Zwischenschritte ab. Leiten Sie den Vorgang erneut ein, läuft er unter Umständen um einiges schneller ab und erzeugt weniger Ausgaben (Abbildung 5).

Abbildung 5: Haben Sie das Image einmal komplett gebaut, speichert Docker die Zwischenschritte und sorgt so dafür, dass ein späterer Build unter Umständen weniger Zeit in Anspruch nimmt.

Abbildung 5: Haben Sie das Image einmal komplett gebaut, speichert Docker die Zwischenschritte und sorgt so dafür, dass ein späterer Build unter Umständen weniger Zeit in Anspruch nimmt.

Mit sudo docker images verifizieren Sie, dass die Software das selbst erstellte Image kennt und in der Lage ist, es als Grundlage für einen Container zu verwenden. Mit dem Kommando aus der zweiten Zeile von Listing 3 bewirken Sie, dass Docker nun eine Umgebung auf Basis des eben gebauten Images bereitstellt.

Durch den Schalter -d läuft der Container im Hintergrund, --name sorgt für eine leicht zu identifizierende Benennung. Vergeben Sie keinen Namen, verwendet Docker beim Start einen Hash als Namen – im Alltag etwas unhandlich. Bei nachträglichen Aktionen am Container suchen Sie immer erst via sudo docker ps den Namen heraus und geben diesen dann in den Kommandos an.

Mit dem Schalter -p 80:8080 schleifen Sie den Container-Port 80 auf Port 8080 des lokalen Systems durch. Sie erreichen den Container im Browser entsprechend unter http://localhost:8080 (Abbildung 6). Beim Aufruf der Adresse erscheint die Ausgabe der zuvor ins Image kopierten Datei index.html.

Abbildung 6: Dank Port Forwarding schleifen Sie die Ausgabe des Webservers im Container auf den lokalen Rechner durch.

Abbildung 6: Dank Port Forwarding schleifen Sie die Ausgabe des Webservers im Container auf den lokalen Rechner durch.

Das Kommando sudo docker ps listet alle laufenden Container inklusive der gemappten Ports auf, während sudo docker port simple_website nur die Ports zeigt. Die Tabelle “Docker-Kommandos” fasst die essenziellen Befehle zum Verwalten von Containern zusammen. Wenn Sie nicht als Administrator arbeiten, erfordern diese Kommandos ein vorangestelltes sudo. An die Stelle des Platzhalters Name setzen Sie den Namen des gewünschten Containers.

Docker-Kommandos

Kommando

Wirkung

docker start Name

Container starten

docker stop Name

Container stoppen

docker top Name

im Container laufende Prozesse anzeigen

docker stats Name

Ressourcenverbrauch ermitteln

docker logs Name

Logfiles des Containers öffnen

docker rm Name

Container löschen

docker rm -f Name

Container löschen, selbst wenn er gerade läuft

docker rmi Name

Image-Datei löschen

docker history Name

Verlauf des Containers anzeigen

docker exec -t -i Name /bin/bash

Bash im Container starten

Wollen Sie tiefer in die Materie eintauchen, seien an dieser Stelle ein paar Stichpunkte für die Recherche genannt: Der Befehl docker networking erlaubt das Zusammenschalten von mehreren Containern innerhalb eines Netzwerks, was diesen ermöglicht, Daten auszutauschen. Da sich Docker auf Iptables und Bridge-Interfaces verlässt, setzt dieses Thema fortgeschrittene Kenntnisse im Umgang mit diesen Komponenten voraus.

Im Bereich Daten ermöglicht docker volumes das Einhängen von Ordnern des Hosts in die Container, womit diese selbst keine Daten vorzuhalten und zu speichern brauchen. Löschen Sie einen Container, so überdauern die Daten die Aktion und stehen für andere Umgebungen bereit.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 8 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
€0,99 – Kaufen
RASPBERRY PI GEEK KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS
Deutschland