Packen Sie wichtige Anwendungen einfach in einen Container, den Sie komfortabel mit Docker verwalten.
Seit 2013 hilft die Software Docker [1] dabei, Container zu verwalten, und sorgt so für einen hohen Automatisierungsgrad im Rechenzentrum. Wer sich für die Technologie interessiert und sie mit dem sparsamen RasPi kombiniert, erhält eine flexible Spielwiese für zu Hause und unterwegs.
Anders als typische virtuelle Maschinen enthalten Container kein eigenes Betriebssystem und starten so prinzipiell innerhalb von wenigen Augenblicken. Meist verfrachten Administratoren einzelne Anwendungen in Container, wie etwa Web- oder Fileserver. Durch die Möglichkeit, den Verbrauch an Ressourcen pro Container zu reglementieren, kommen sie häufig bei Hostern zum Einsatz.
Zudem stellt die Isolation eines Containers vom Rest des Systems eine große Hürde dar, wenn Angreifer über einen Prozess Zugriff auf das System erhalten wollen. Container und Docker sind in der Wahrnehmung vieler mittlerweile eng miteinander verwoben, obwohl Container und die zugrunde liegenden Konzepte schon lange Teil der IT-Landschaft sind. Näheres dazu erklärt der Kasten “Container im Rückblick”.
Container im Rückblick
Abstrakt formuliert stellt ein Container eine isolierte Umgebung auf einem System bereit. Unter Linux sorgt der Kernel dafür, dass der Container in einem eigenen Namensraum lebt und dadurch vom Rest der Vorgänge auf dem System nichts mitbekommt. Aus Sicht des Containers findet dagegen ein voller Zugriff auf das System und die Hardware statt. Dank der Kernel Namespaces [13] besitzt der Container ein eigenes Root-Dateisystem und eigene Umgebungen für Prozesse, Netzwerk und andere Ressourcen. Durch Cgroups [14] stellt der Kernel sicher, dass ein Container dedizierte Ressourcen erhält, wie CPU und Arbeitsspeicher.
Die ersten Ansätze für Container reichen bis Ende der 1970er-Jahre zurück: Damals war es lediglich möglich, Change-Root-Umgebungen [15] auf Unix-Systemen einzurichten. Das Unix-Derivat BSD übernahm das Konzept etwa 1982, ehe der Ableger FreeBSD um das Jahr 2000 herum das Konzept als Jails weiterentwickelte. Diese Jails zeigen erkennbare Parallelen zu den heutigen Linux-Containern und erlaubten das Ausführen eines Prozesses, ohne dass dieser Zugriff auf das übrige System erhielt. Jails besitzen ein eigenes Root-Dateisystem und erhalten bei Bedarf eine eigene IP-Adresse.
Im Jahr 2004 folgte Oracle mit Solaris Containers, die Dank des Dateisystems ZFS das Anfertigen von Snapshots erlaubten. 2005 ging Open Virtuozzo (Open VZ) an den Start, was die enorme Verbreitung von günstigen VPS (Virtual Private Servers) begünstigte. OpenVZ verließ sich auf einen gepatchten Kernel, um Virtualisierung und Ressourcenisolation anzubieten.
Ein Jahr später kündigte Google die Process Containers an, aus denen die heutigen Cgroups entstanden. Cgroups sind seit Version 2.6.24 im Kernel enthalten und bilden die Grundlage, um Prozesse und Prozessgruppen mit eigenen Ressourcen (“limits”) auszustatten. 2008 stand schließlich Linux Containers (LXC) bereit, das erstmals auf Basis von Cgroups und Namespaces vollwertige Container ohne eigens dafür angepassten Kernel anbot.
Container-Logistik
Oft sieht der Ablauf so aus, dass ein Admin Container unter Linux bei Bedarf frisch erstellt oder sie einmalig einrichtet und dann regelmäßig nutzt. Bei der Konfiguration eines Containers und dem Setup der darin laufenden Anwendung handelt es sich durchaus um einen aufwendigen Prozess.
Gerade Unternehmen hadern zudem damit, dass den üblichen Container-Lösungen von Haus aus Clustering- und Hochverfügbarkeitslösungen fehlen. Wie bei vielen anderen Open-Source-Projekten auch mangelt es zudem meist an grafischen Oberflächen, um die Technologie der breiten Masse von IT-Administratoren zugänglich zu machen.
Der große Siegeszug von Containern begann daher erst, als Docker (engl.: Hafenarbeiter) auf der Bühne erschien: Im März 2013 stellte die kalifornische Firma Dotcloud die Software auf einer Python-Konferenz vor, und sie fand schnell Anklang in der Community (siehe Kasten “Das Docker-Konzept”).
Das Docker-Konzept
Docker war schon in seiner Anfangszeit vor allem als Projekt zum Automatisieren von Abläufen gedacht, bei dem sich Container mit anderen Komponenten zu einem mächtigen Tool-Set vereinen. Während es beim Erstellen von Containern zu Beginn auf dieselbe Technologie setzte wie Linux Containers, stützt sich die Software heute auf die eigene, abstrahierte Implementation, die in die Bibliothek Libcontainer einfloss. Mittlerweile verwenden auch wieder andere Projekte diese Schnittstelle, um isolierte Umgebungen einzurichten.
Docker folgt einem Client-Server-Modell: Als Werkzeuge für die Kommandozeile fungieren Client-Tools, die mit dem entsprechenden Daemon (docker engine) kommunizieren. Dabei spielt es keine Rolle, ob Sie beide Komponenten auf ein und demselben System betreiben oder diese trennen. Erwartungsgemäß nimmt der Daemon Befehle entgegen und zeichnet für die eigentliche Umsetzung verantwortlich, wie beispielsweise das Starten und Stoppen von Containern.
Installation unter Raspbian
Docker steht für alle gängigen Distributionen bereit. Sie können die Software also aus den Paketquellen oder über andere Wege installieren. Für den Test auf dem RasPi empfiehlt sich der Einsatz eines offiziellen Skripts für die Installation, da es Ihnen viele Schritte abnimmt.
Auf gängigen Desktop-PCs und Servern stellt Docker keine allzu hohen Anforderungen an das darunterliegende System: Sie brauchen einen 64-Bit-Kernel, der Cgroups, Namespaces und AUFS unterstützt. Bei den gängigen Distributionen genügt es, wenn Sie dazu Kernel 3.10, besser 3.12 oder neuer, installieren.
Für den Betrieb von Docker auf dem RasPi empfiehlt sich der Einsatz eines Raspberry Pi 3: Der Quadcore-Prozessor Cortex-A53 mit einem Takt von 1,2 GHz und 1 GByte RAM sorgen für genug Power, um Container sinnvoll einzusetzen. Prinzipiell läuft Docker aber auch auf kleineren Modellen wie dem 2B oder Pi Zero. Für den Artikel verwendete der Autor einen RasPi 3 unter Raspbian 8. Alle im Artikel beschriebenen Kommandos und Beispiele beziehen sich auf dieses Testgerät.
Zur Installation melden Sie sich via SSH auf dem RasPi an. In einer Konsole bringen Sie das System zunächst als Root auf den aktuellen Stand (Listing 1, Zeile 1). Dann erfolgt die Installation über ein vom Projekt bereitgestelltes Skript. Damit die Installation klappt, brauchen Sie das Werkzeug Curl. Der Befehl lädt das Skript von der offiziellen Docker-Webseite herunter und speichert es unter dem Namen install-docker.sh. Anschließend ruft es einen Pager auf und bietet so die Möglichkeit, einen Blick in das Skript zu werfen. Beenden Sie diesen über [Q], startet das Skript direkt mit der Arbeit (Abbildung 1).

Abbildung 1: Die Installation von Docker auf einem Raspberry Pi setzt voraus, dass Sie das System über das Paketmanagement auf den aktuellen Stand bringen.
Der Autor rät daher dazu, diesen Weg nur in experimentellen und unkritischen Umgebungen zu verwenden. Um Docker mit dem Benutzer pi einzusetzen, müssen Sie diesen noch der frisch angelegten Docker-Gruppe hinzufügen (Listing 1, Zeile 6).
Falls Sie Docker auf andere Art und Weise installieren möchten, können Sie auf ein fertiges Image der Gruppe Hypriot zurückgreifen [2], das Programm selbst bauen [3] oder ein (allerdings veraltetes) Paket für den RasPi nutzen, das ebenfalls von Hypriot stammt.
Listing 1
# apt-get update && apt-get dist-upgrade # curl -sSL -o install.sh https://get.docker.com # less install.sh [... Beenden mit [Q] ...] # sh install.sh # usermod -aG docker pi
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.
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-fixed-version. 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.
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.
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.
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.
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.
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.
|
Kommando |
Wirkung |
|---|---|
|
|
Container starten |
|
|
Container stoppen |
|
|
im Container laufende Prozesse anzeigen |
|
|
Ressourcenverbrauch ermitteln |
|
|
Logfiles des Containers öffnen |
|
|
Container löschen |
|
|
Container löschen, selbst wenn er gerade läuft |
|
|
Image-Datei löschen |
|
|
Verlauf des Containers anzeigen |
|
|
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.
Die Anweisung HEALTHCHECK im Dockerfile gibt dem Daemon Hinweise darauf, wie er einen Container auf seinen Zustand hin überprüft und gegebenenfalls durchstartet. Das Kommando sudo docker inspect Name zeigt dagegen alle Details der Konfiguration des Containers Name. Viele weitere nützliche Informationen finden Sie in der Dokumentation [6].
Im Einsatz
Am häufigsten kommt Docker zweifelsohne in Rechenzentren zum Einsatz. Dort starten Admins bei Bedarf Anwendungen in Containern, die sie wieder verwerfen, sobald diese ihre Aufgaben erfüllt haben. Mächtige Werkzeuge wie Kubernetes [7] helfen beim Verwalten großer Container-Farmen und bieten zahlreiche Funktionen, um Docker-Hosts zu flexiblen Cloud-Umgebungen zu vernetzen.
Prinzipiell ist es möglich, alles, was auf normalen Linux-Systemen läuft, in Docker-Containern zu betreiben. Docker vereinfacht es aber, den Verbrauch an Ressourcen zu kontrollieren und Container – samt Applikation – auf andere Rechner zu verschieben. Viele Hoster nutzen Docker, um Kunden fertig eingerichtete Anwendungen bereitzustellen, wie etwa ein CMS, Blog oder Forum. Der Kunde benötigt keine Kenntnisse zum Einrichten oder Warten der im Container laufenden Software.
Abseits der großen Server-Farmen existieren jedoch genug Bereiche, in denen sich ein Einsatz ebenfalls lohnt. Oft nutzen Entwickler die Technik, um sich eine Entwicklungsumgebung aufzubauen. Einmal konfiguriert, schieben Sie ein Image leicht in eine Registry und verwenden dieses anschließend auf einem anderen Server weiter. Selbst zum Bauen von Software-Paketen und zum Teilen von Daten oder Anwendungen eignet sich die Software.
Auf dem Raspberry Pi ergibt der Einsatz gleich in mehrfacher Hinsicht Sinn: Zu Hause lohnt es sich, die typischen Anwendungen in Container zu packen: Samba, FTP-Server, Mediacenter, Owncloud und andere richten Sie so nur einmal ein und laden sie in einen privaten Hub hoch, mit dem Sie anschließend interagieren [8].
Wenn Sie einen RasPi neu aufsetzen, genügt es, Docker zu installieren und die zuvor gebauten Images wieder herunterzuladen. Das ermöglicht es außerdem, die Container auf andere RasPis zu übertragen, womit Sie etwa Ihr Gerät zu Hause mit einem im Büro oder bei Bekannten synchronisieren.
Wie bei vielen anderen Technologien ergeben sich beim Einsatz von Docker einige Nachteile. Viele Images stehen ungeprüft im Netz, was ein erhebliches Sicherheitsrisiko bedeutet. Von daher erscheint es ratsam, jedes Image genauer unter die Lupe zu nehmen, bevor Sie es starten, oder es gleich selbst zu bauen.
Wer amerikanischen Firmen nicht vertraut, sollte seine Images nicht im Docker Hub ablegen und stattdessen eine eigene Registry betreiben [9]. Docker-Container sind darüber hinaus prinzipiell weniger abgeschottet als virtuelle Maschinen und komplizierter zu betreiben, sofern Sie mehrere Anwendungen zusammenschalten möchten. Spätestens, wenn Sie einen anderen Kernel benötigen, ist es notwendig, auf KVM, Xen inklusive Qemu und andere Alternativen umsteigen.
In der Vergangenheit gab es zudem nur wenige grafische Oberflächen, um die Container zu verwalten. Wer Docker benutzen wollte, musste sich also etwas intensiver damit beschäftigen. Mittlerweile existieren allerdings mehrere Projekte, etwa Shipyard [10], Panamax [11] oder Portainer [12], die den Umgang mit Docker selbst den Anwendern ermöglichen, die sich weniger für die Shell begeistern.
Fazit
Obwohl Docker eine mächtige Software liefert, liegt die Hürde für den Einstieg vergleichsweise niedrig. Mit wenigen Befehlen verwandeln Sie vorgefertigte Images aus der Community in lauffähige Container. Sogar eigene Container erstellen Sie im Handumdrehen, wenn Sie sich auf die Materie einlassen.
Für den RasPi ergeben sich gleich mehrere Möglichkeiten: Wer oft genutzte Anwendungen in Container verpackt, spart beim erneuten Einrichten eines Geräts Zeit und hat zusätzlich die Möglichkeit, seine Anwendungen mit anderen zu teilen. Zudem sorgen Docker-Container für Reproduzierbarkeit: Einmal gebaut, setzen Sie einen Container immer gleich auf.
Wenn Sie allerdings ein höheres Maß an Systemsicherheit, einen eigenen Kernel oder gleich ein anderes Betriebssystem (wie Windows) benötigen, sollten Sie auf klassische Ansätze zur Virtualisierung zurückgreifen.
Der Autor
Valentin arbeitet derzeit als Senior IT Consultant für die open*i GmbH aus Stuttgart. Wenn er in seiner Freizeit nicht gerade am Kickertisch steht, wirft er einen Blick auf aktuelle Open-Source-Technologien oder twittert unter dem Account @xenuser.
Infos
-
Docker: http://www.docker.com
-
Docker bauen: https://blog.hypriot.com/post/building-docker-directly-on-a-raspberry-pi/
-
Alternative Installation: https://github.com/umiddelb/armhf/wiki/Get-Docker-up-and-running-on-the-RaspberryPi-(ARMv6)-in-four-steps-(Wheezy)
-
Offizielle Registry Docker Hub: https://hub.docker.com
-
Erklärung zu Commits (Englisch): https://docs.docker.com/engine/reference/commandline/commit/
-
Docker-Dokumentation: https://docs.docker.com
-
Kubernetes: http://kubernetes.io
-
Interaktion mit Docker Hub: https://docs.docker.com/engine/tutorials/dockerrepos/
-
Eigene Registry aufsetzen: https://docs.docker.com/registry/
-
Shipyard: https://shipyard-project.com
-
Panamax: http://panamax.io/get-panamax/
-
Portainer http://portainer.io
-
Linux Namespaces (Englisch): https://en.wikipedia.org/wiki/Linux_namespaces
-
Union Mount (Englisch): https://en.wikipedia.org/wiki/Union_mount






There is an mistake in listing 3.
I think instead of:
sudo docker run -d –name simple_website -p 80:8080 “rpi-geek/simple_website”
it should be:
sudo docker run -d –name simple_website -p 8080:80 “rpi-geek/simple_website”
This worked for me.