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

Docker einsetzen auf dem Raspberry Pi (Seite 2)

Images und die Registry

Mit dem Befehl sudo docker info prüfen Sie, ob die Software nach der Installation erfolgreich gestartet wurde und betriebsbereit ist (Abbildung 2). Die dargestellten Informationen geben Auskunft über einige nützliche Parameter, wie die Anzahl der laufenden Container, die Server- und Kernel-Version sowie die Adresse der verwendeten Registry. Letztere dient als eine zentrale Bezugsquelle für die Images, die als Bausteine für die Container zum Einsatz kommen.

Abbildung 2: Docker meldet sich nach der Installation betriebsbereit.

Abbildung 2: Docker meldet sich nach der Installation betriebsbereit.

Im Normalfall genügt die Installation, weiterer Aufwand bei der Konfiguration erfordert der erste Test nicht. Einen Container starten Sie mit dem folgenden Aufruf auf der Kommandozeile:

$ sudo docker run -i -t resin/rpi-raspbian:jessie-20160831 /bin/bash

Die Option -i hält die Standardausgabe der neu erstellten Container offen. Das ermöglicht es Docker, mittels -t ein Pseudo-Terminal zu öffnen. So erhalten Sie über eine interaktive Shell Zugriff auf die normalerweise isolierte Umgebung.

Der Parameter resin/rpi-raspbian:jessie-20160831 weist die Software an, als Basis für den Container das Image rpi-raspbian zu verwenden. Bereitgestellt hat es ein Mitglied aus der Community, der sein gleichnamiges Repository resin im Docker-Hub, der offiziellen Registry, öffentlich zugänglich macht.

Oft stehen mehrere Versionen eines Images bereit, weshalb Docker die Angabe eines Datums erlaubt, in diesem Fall jessie-20160831. Für die ARM-Architektur des RasPi finden sich bislang nur wenige Images – betreiben Sie Docker dagegen auf gewöhnlicher x86-Hardware, steht Ihnen eine schier unendliche Auswahl an Images mit fertig gepackter Software offen.

TIPP

In der Registry des Docker-Projekts finden sich neben offiziellen Vorlagen zahlreiche, meist ungeprüfte Community-Beiträge. Beim Einsatz solcher Images sollten Sie mit Vorsicht vorgehen.

Nach dem Absetzen des Kommandos führt Docker die Bash innerhalb des Containers aus (Abbildung 3). Mittels exit verlassen Sie diese wieder. Da das auszuführende Kommando /bin/bash dadurch endet, stoppt der Container ebenfalls, was Sie mit sudo docker ps überprüfen.

Abbildung 3: Für einen ersten Test kommen ein vorbereitetes Image sowie eine einfache Shell als Parameter für den Container zum Einsatz. Das Image stammt aus der offiziellen Docker-Registry.

Abbildung 3: Für einen ersten Test kommen ein vorbereitetes Image sowie eine einfache Shell als Parameter für den Container zum Einsatz. Das Image stammt aus der offiziellen Docker-Registry.

Beim Start des Containers beobachteten Sie womöglich den Download-Vorgang. Die Software erledigt gleich mehrere Schritte, um einen einsatzbereiten Container zu erstellen: Unter anderem prüft sie, ob sich das gewünschte Image bereits im lokalen Dateisystem befindet.

Haben Sie Docker frisch installiert, leitet der Daemon zunächst das Herunterladen der erforderlichen Software für den Container ein. Das Image speichert es in einem Unterverzeichnis von /var/lib/docker/ und bildet damit die Grundlage für den frisch erstellten Container. Die Images unterscheiden sich in Bezug auf den Aufbau von anderen Ansätzen (siehe Kasten “Image-Format”).

Image-Format

Ein Docker-Image besteht aus mehreren Dateisystemen, die wie Ebenen übereinanderliegen. Die unterste Ebene stellt das Boot-Dateisystem (bootfs) dar, mit dem Sie in der Regel nie in Berührung kommen. Darüber legt Docker mit rootfs eine Umgebung für das Betriebssystem, das es beim Start des Containers nur mit Lesezugriff einhängt.

Dann macht die Software Gebrauch vom Linux-Feature Union Mount [16], mit dessen Hilfe es Dateisysteme übereinanderlegt und als eine Einheit präsentiert. Dieser Mechanismus ermöglicht es, dass im resultierenden Dateisystem Dateien und (Unter-)Verzeichnisse von allen darunter befindlichen Ebenen bereitstehen. Jedes der Dateisysteme heißt im Docker-Jargon etwas verwirrend Image, wobei die Ebene über bootfs den Namen Base-Image trägt. Typische Kandidaten dafür wären Ubuntu, Debian oder Fedora.

Erstellt Docker aus einem heruntergeladenen Image einen Container, legt es ein zusätzliches leeres Dateisystem mit Lese- und Schreibzugriff über alle anderen Ebenen. Alle Prozesse und Änderungen am Dateisystem aus Sicht von Anwendungen und Benutzern geschehen dort. Ändern Sie eine Datei aus einem darunterliegenden Dateisystem, kopiert das System diese zunächst in die oberste Ebene, ändert sie und speichert sie dann dort ab. Die bisherige Version der Datei, die schreibgeschützt bereitsteht, bleibt zwar erhalten, die Kopie überlagert diese aber (Abbildung 4).

Abbildung 4: Docker kombiniert mehrere Ebenen mit Dateisystemen zu einem Image. Die Schreibzugriffe geschehen dann auf einer neuen zusätzlichen Ebene, die Docker beim Start des Containers hinzufügt.

Abbildung 4: Docker kombiniert mehrere Ebenen mit Dateisystemen zu einem Image. Die Schreibzugriffe geschehen dann auf einer neuen zusätzlichen Ebene, die Docker beim Start des Containers hinzufügt.

Mit sudo docker images sehen Sie bereits heruntergeladene Images ein, mit dem Pull-Kommando laden Sie bei Bedarf auch selbst Images herunter:

$ sudo docker pull resin/rpi-raspbian:jessie-20160831

Ohne die Angabe eines Datums verwendet das Tool den Standardwert latest, womit Sie stets die aktuellste Version beziehen. Bei vielen Base-Images repräsentiert ein Tag die OS-Version, wie etwa ubuntu:16.04 oder fedora:22. Diese Bezeichnungen finden Sie direkt in der Registry [4], alternativ gehen Sie mittels sudo docker search imagename auf die Suche oder erstellen selbst ein angepasstes Image für Ihre Zwecke.

Im Eigenbau

Gerade für den RasPi fällt die Auswahl an vorbereiteten Images eher mager aus. Daher ergibt der Bau von eigenen Containern durchaus Sinn. Docker bietet dafür zwei Wege an, wobei sich nur einer davon empfiehlt.

Die unübliche Methode sieht vor, dass Sie einen Container mit einem fertigen Image starten, die gewünschten Änderungen vornehmen und die Daten im Anschluss mit commit speichern. Wie das im Detail funktioniert, erklärt die offizielle Dokumentation [5].

Die aufwendigere, aber besser strukturierte Variante besteht im Anlegen einer Konfiguration in Form eines Dockerfiles, das den Zusammenbau beschreibt. Je nach Bedarf schieben Sie so beim Bau zusätzlich eigene Dateien oder Ordner in den Container. Diese Methode sorgt für bessere Reproduzierbarkeit und erlaubt den Bau von Containern aus einem Git-Repository heraus.

Container kommen häufig bei Webanwendungen zum Einsatz. In diesem Kontext ist eine abgeschottete Umgebung sinnvoll. Zudem sorgt dieser Ansatz für ein gehöriges Maß an Portabilität: Ein Entwickler packt seine Anwendung in einen Container, lädt das Image in eine Registry hoch und auf einem anderen Rechner wieder herunter. Dass Docker mittlerweile über Tricks selbst auf Windows-Maschinen und Macs läuft, macht diese Vorgehensweise zusätzlich attraktiv.

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