Portainer zur Verwaltung von Docker auf der Synology DiskStation

In Vorbereitung auf ein paar weiterführende Projekte im Zusammenhang mit Docker habe ich mich nun endlich mal mit Portainer (https://portainer.io) als Docker Weboberfläche zur Administration befasst.

Da ich mit dem Docker-Paket auf meiner DS1515+ bereits eine laufende Docker-Instanz besitze, wollte ich zuerst einmal versuchen mit Portainer eben diese Instanz zu verwalten.

Zwar besitzt die Docker-Instanz auf der DiskStation bereits eine Weboberfläche für die Administration, jedoch bietet diese, sehr einfach gehaltene Oberfläche innerhalb des DSM nicht einmal einen Bruchteil der Möglichkeiten, die Docker eigentlich von Haus aus mit sich bringt. Warum also nicht die Möglichkeiten mit Portainer um ein Vielfaches erweitern?

Die folgenden Schritte bringen also Portainer als Docker-Container auf der DS zum Laufen.

Wie immer habe ich dabei versucht das Ganze ohne „lästige Kommandozeile“ umzusetzen, um zu beweisen dass Docker nicht nur etwas für IT-Pros und Software-Entwickler ist. 🙂

Mal schauen ob das klappt. 😉

Schritt 1: Vorbereitungen

Ich gehe mal davon aus, dass das Docker-Paket von Synology bereits auf eurer DS läuft und Ihr Zugriff auf die Weboberfläche der DS habt. Falls ihr noch kein Docker habt, hier noch einmal der Link inkl. der unterstützten DS-Modelle:
https://www.synology.com/de-de/dsm/packages/Docker

Für das Starten eines Containers benötigt ihr wie üblich ein Image. Dieses kann man sich entweder selbst zusammenbauen oder wie in unserem Fall einfach auf ein fertiges, offizielles Image aus dem Docker Hub zurückgreifen.
Über den Punkt “Registrierung” sucht ihr also nach “portainer” und ladet euch das Image “portainer/portainer:latest” herunter.

Anschließend müssen wir noch ein Verzeichnis auf der DS anlegen, welches wir in den Portainer-Container einbinden um dort persistente (Konfigurations-)Daten speichern zu können. Wer bereits mein Tutorial zum Thema Docker und ioBroker gelesen hat, kennt das schon. Das ist der Ort, außerhalb des Containers, an dem die Daten nicht verloren gehen wenn man den Container löscht oder updatet. 😉
Bei mir wird das, analog zum ioBroker Container, der Ordner “portainer_data” unter “docker” (/volume1/docker). Anlegen lässt sich das Verzeichnis ganz einfach über die FileStation der DS. So wie hier zu sehen:

Damit sind dann die Vorbereitungen auch schon abgeschlossen.

Schritt 2: Container starten

Wie ihr vielleicht schon wisst, muss nun aus dem heruntergeladenen Image noch ein Container gestartet werden. Normalerweise geht dies komfortabel über die Weboberfläche von Docker auf der DiskStation.

In diesem Fall treffen wir aber auf ein Problem. Da wir mit Portainer später die lokale Docker-Instanz verwalten und administrieren wollen, müssen wir dafür sorgen, dass der Container auf die Datei “portainer.sock” zugreifen kann. Diese Datei ist die Zentrale API-Schnittstelle von Docker über die die Docker-Befehle an die Docker-Instanz übergeben werden. Leider liegt die Datei unter “/var/run/” auf dem Root-Filesystem der DiskStation, auf das wir natürlich aus der Docker-Oberfläche der DS nicht zugreifen können.
Ob wir wollen oder nicht, wir können den Container auf der DS wohl nur per Kommandozeile erzeugen.
Falsch. Oder zumindest nur zum Teil richtig. Es gibt nämlich einen Weg, über den wir den Befehl zum einmaligen Anlegen des Containers ganz einfach, ohne Verbindung per SSH o. Ä. auf der DS ausführen können. Der Aufgabenplaner.
Über den Aufgabenplaner ist es unter Anderem möglich benutzerdefinierte Skripte zeitgesteuert ausführen zu lassen. Diese Funktion wollen wir nun also zweckentfremden um unseren initialen Container mit Zugriff auf das Root-Filesystem der DS zu deployen.

Der Befehl, den wir dazu verwenden lautet:

docker run -d -p 9000:9000 --name portainer --restart always -v /var/run/docker.sock:/var/run/docker.sock -v /volume1/docker/portainer_data:/data portainer/portainer

Kurze Erläuterung was der Befehl tut:

  • “docker run” zum Starten des Containers
  • “-d” Container läuft im “detached mode”
  • “-p 9000:9000” öffnet Port 9000 für den zugriff auf die Weboberfläche
  • “–name portainer” Name des Containers
  • “–restart always” Aktiviert automatischen Restart des Containers
  • “-v /var/run/docker.sock:/var/run/docker.sock” bindet die angesprochene docker.sock Datei ein
  • “-v /volume1/docker/portainer_data:/data” bindet das Data-Verzeichnis ein
  • “portainer/portainer” verwendetes Image für den Container
Hinweis: Es kann sein, dass der Port 9000 auf der DS bereits in Verwendung ist. Sollte dies der Fall sein kann man den Port ganz einfach umleiten. Dazu im docker-run-Befehl einfach „-p 9000:9000“ durch z.B. „-p 8889:9000“ ersetzen. Die Portainer-Weboberfläche (siehe weiter unten) ist dann natürlich unter „http://[IP_oder_Name_der_DS]:8889“ zu erreichen.

Profis hauen den Befehl nun einfach in die Kommandozeile, auf die Sie sich vorher per Putty und SSH verbunden haben (Muss auf der DS allerdings vorab eingerichtet werden).

Wir versuchen es mal über den Weg “Systemsteuerung > Aufgabenplaner” auf der Weboberfläche der DS und erstellen eine neue “geplante Aufgabe > benutzerdefiniertes Skript”. Im Register “Allgemein” geben wir dem Vorgang einen Namen und lassen den Benutzer unter dem der Befehl ausgeführt wird auf “root”. Den Haken “Aktiviert” entfernen wir:

Auf der Registerkarte “Zeitplan” können wir zu Sicherheit “Am folgenden Datum ausführen” auswählen und ein Datum aus der Vergangenheit konfigurieren.

Auf der Registerkarte “Aufgabeneinstellungen” kopieren wir den oben aufgeführten Startbefehl in das Feld unter “Benutzerdefiniertes Skript”. Mit OK wird gespeichert und die Aufgabe ist erstellt:

Die neu erstellte Aufgabe können wir nun auswählen und über den Button “Ausführen” den Container starten.

Anschließend sollte nach wenigen Sekunden in der Docker-Oberfläche der Container “portainer” auftauchen.

Schritt 3: Auf Portainer zugreifen und Erstkonfiguration durchführen

Nachdem der Container jetzt gestartet ist, ist die neue Weboberfläche unter folgendem Link erreichbar:

http://[IP_oder_Name_der_DS]:9000

Beim ersten Aufruf möchte Portainer einen Benutzer und ein Kennwort zum Schutz anlegen. Die Daten können natürlich frei gewählt werden.

Nachdem der erste Benutzer angelegt ist, möchte Portainer wissen welche Instanz wir damit verwalten wollen. Wir wählen hier “Local” aus und bestätigen mit “Connect”.

Dann gelangen wir schließlich auf die Übersichtsseite der Portainer-Weboberfläche. Unten sehen wir den Host (local) mit einem grünen Symbol (up) daneben. Dies bedeutet, dass die Verbindung zur Docker-Instanz erfolgreich hergestellt wurde.

Portainer ist nun Einsatzbereit. Viel Spaß.

Bei Fragen und Anregungen zum Tutorial freue ich mich auf eure Kommentare. Bitte berücksichtigt, dass ich keinen individuellen Support per E-Mail leisten kann. Nutzt also bitte die öffentlichen Kanäle wie Kommentare, Foren oder Social Media. Gerne könnt ihr mich bei Bedarf auch per E-Mail oder Direktnachricht auf einen Post/ Thread/ Kommentar aufmerksam machen. Danke.

MfG,
André

About the author: André

André
Familienvater und bekennender Technik-Nerd. Beruflich unterwegs als Fachinformatiker für Systemintegration bei einem deutschen IT-Dienstleister. In der Freizeit begeisterter "Home-Automatisierer" bzw. "Smarthome-Bastler" und (zumindest bei schönem Wetter) gerne mit der Familie in verschiedenen Outdooraktivitäten unterwegs.

2
Hinterlasse einen Kommentar

avatar
10000
1 Kommentare
1 Antworten
0 Abonnenten
 
Meiste Antworten
Beliebtester Kommentar
2 Kommentatoren
AndréDirk Letzte Kommentatoren
  Abonnieren  
Benachrichtige mich zu:
Dirk
Gast
Dirk

Hallo Andre, vorab möchte ich sagen, dass mir Dein Tutorial zu ioBroker zum EInen den A… gerettet hat, zum Anderen hat es mir wesentlich zum Verständnis des Dockers beigetragen. Ich verstehe die Mechanismen nun deutlich besser, auch wenn es da „nur“ um den ioBroker ging. Du hast hier ganz tolle Beschreibungen geliefert, die man sonst quasi nicht in den Weiten des Internets findet. Nun zum Eigentlichen. Ich habe die Installation wieder nach Deiner tollen Anweisung durchgeführt. Leider hatte ich nach der Anmeldung an den portainer keine Verbindung zu local. Es kam immer „so-und-so ist unreachable“. Nach kleiner Recherche im Internet… Mehr lesen »