Docker – Engine API aktivieren

Die Docker Engine stellt eine Engine API zur Verfügung, welche die Möglichkeit bietet, Befehle, welche auch mit dem Client verfügbar sind, über externe Anwendungen auszuführen. Auch viele Befehle des Clients verweisen direkt auf die Befehle der Engine API. Die API kann von Anwendungen oder aber auch über verschiedene Programmiersprachen und SDK’s verwendet werden. Um die API über externe Anwendungen im Netzwerk nutzen zu können, muss der Zugang zu dieser noch ermöglicht werden.

Ich habe die Docker Community Edition in der Version 17.03.0-ce auf einem Raspberry PI 3 mit dem Betriebssystem Raspbian Jessie Lite in der Kernel Version 4.4 installiert. Die Installation dieser Version von Docker auf einem Raspberry PI 3 habe ich in diesem Artikel bereits erklärt.

Diese Version von Raspbian Jessie Lite verwendet systemd zur Prozessverwaltung, sodass mit den folgenden Befehlen Docker (neu)gestartet und beendet werden kann:

Da wir nun auch die Möglichkeit schaffen möchten, die Docker Engine von einem anderen Computer im Netzwerk zu erreichen, müssen wir externe Verbindungen zulassen. Hierfür kann der Daemon der Docker Engine auf verschiedene Arten konfiguriert werden. Nachfolgend werden zwei Möglichkeiten zur Konfiguration beschrieben.

Möglichkeit Nr. 1 – Direkte Konfiguration über die Prozessverwaltung

Die Konfiguration kann direkt über die Prozessverwaltung erfolgen. Hierzu muss das Verzeichnis /etc/systemd/system/docker.service.d über den folgenden Befehl erstellt werden, da dieses direkt nach der Installation von Docker noch nicht existiert:

In diesem Verzeichnis können wir nun die Konfigurationsdatei erstellen, welche wir in diesem Fall „remote-api.conf“ nennen. Diese Datei müssen wir über einen beliebigen Editor öffnen und mit dem folgenden Inhalt speichern:

Diese Konfiguration ermöglicht den Zugriff auf die Engine API über die IP-Adresse des Raspberry PI sowie den Port 2375. Um die Konfiguration zu verwenden, müssen die Daemon-Definitionen über den Befehl sudo systemctl daemon-reload neu geladen werden. Nachdem die Docker Engine (neu)gestartet, wurde sollte die Möglichkeit bestehen über den Browser oder andere Anwendungen (z.B. PHPStorm) von außen auf die API zuzugreifen. Für einen schnellen Test kann im Browser die URL  http://<IP>:2375/containers/json aufgerufen werden, welche eine Liste aller Container im JSON-Format liefern sollte.

Dieser Weg der Konfiguration ist sehr einfach. Sollte jedoch die Absicht bestehen weitere Einstellungen an der Docker Engine zu verändern, empfehle ich die Verwendung der JSON-Konfiguration, deren Einrichtung im nachfolgenden Abschnitt beschrieben wird.

Möglichkeit Nr. 2 – JSON-Konfiguration

Die JSON-Konfiguration bietet die Möglichkeit die Docker Engine über eine Datei sehr einfach zu konfigurieren. Neben den Sockets können auch weitere Einstellungen von Docker über nur eine Konfigurationsdatei, im JSON-Format, vorgenommen werden. Um die Konfiguration der Sockets über die JSON-Konfiguration vornehmen zu können, müssen jedoch zuvor die Startparameter des Daemon entfernt werden, da diese Parameter das Hinzufügen weiterer Sockets über die JSON-Datei nicht unterstützt. Sollten die Startparameter nicht entfernt werden, so kommt es zu Konflikten welche die Docker Engine nicht mehr fehlerfrei starten lassen. Die Start-Konfiguration der Docker Engine kann in der Datei /lib/systemd/system/docker.service jederzeit selbst eingesehen werden. In dieser Datei befindet sich eine Zeile mit dem Befehl den Daemon direkt mit einem Socket zu starten:  ExecStart=/usr/bin/dockerd -H fd://. Wir könnten nun natürlich direkt in dieser Datei den Parameter entfernen, was allerdings nicht zu empfehlen ist da diese Einstellungen dem Hersteller vorbehalten sind und Änderungen bei einem Update evtl. wieder rückgängig gemacht werden könnten.

Da wir diese Datei nicht verändern möchten bzw. auch nicht verändern sollten, müssen wir diesen Aufruf durch eine Konfigurationsdatei in der Prozessverwaltung überschreiben. Wir erstellen oder bearbeiten mit dem Befehl

die Konfigurationsdatei und speichern folgenden Inhalt in dieser (evtl. muss zuvor das Verzeichnis erstellt werden – siehe Möglichkeit Nr. 1):

Durch diese Konfiguration wird der Daemon nun blank, ohne Parameter, gestartet, sodass wir die Sockets über die JSON-Konfiguration angeben können. Da die Konfiguration in der Prozessverwaltung geändert oder erstellt wurde, müssen die Daemon-Definitionen über den Befehl sudo systemctl daemon-reload neu geladen werden. Nachdem wir nun den Dienst der Docker Engine (neu)gestartet haben, können wir die JSON-Konfiguration erstellen. Die JSON-Konfiguration sollte unter dem Pfad /etc/docker/daemon.json zur Verfügung stehen und muss mit dem folgenden Inhalt gespeichert werden:

Nachdem die JSON-Konfiguration gespeichert und die Docker Engine neu gestartet wurde, ist die Engine API über die IP-Adresse des Raspberry PI sowie dem Port 2375 verfügbar. Auch in diesem Fall können wir über den Browser einen schnellen Test mit der URL  http://<IP>:2375/containers/json durchführen.

Es sollte beachtet werden, dass durch diese hier beschriebenen Möglichkeiten die Sicherheit vor unberechtigten Zugriffen über die API nicht gegeben ist. Dieser Artikel soll nur zeigen, welche Konfiguration vorgenommen werden muss, um die Engine API überhaupt für andere Computer im Netzwerk erreichbar zu machen.

sebastianbrosch

Ich bin gelernter Fachinformatiker und konnte Erfahrungen in HTML, CSS, JavaScript, jQuery, PHP sowie VB.NET sammeln. In diesem Blog schreibe ich über meine Probleme und Erfahrungen sowie Aritkel aus dem Gebiet der Anwendungsentwicklung.

Das könnte Dich auch interessieren...

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.