Digital Eliteboard - Das Digitale Technik Forum

Registriere dich noch heute kostenloses um Mitglied zu werden! Sobald du angemeldet bist, kannst du auf unserer Seite aktiv teilnehmen, indem du deine eigenen Themen und Beiträge erstellst und dich über deinen eigenen Posteingang mit anderen Mitgliedern unterhalten kannst! Zudem bekommst du Zutritt zu Bereiche, welche für Gäste verwehrt bleiben

gelöst Portainer Stacks (docker-compose)

prisrak

Moderator
Teammitglied
Registriert
4. Mai 2010
Beiträge
5.006
Lösungen
18
Reaktionspunkte
15.704
Punkte
413
Hallo zusammen!

Vielleicht sind einige von euch bereits mit dieser Option vertraut, aber ich möchte sie dennoch hier noch einmal betonen und euch erneut zur Verfügung stellen, da sie einen Mehrwert bietet.

Obwohl das grafische Arbeiten mit Portainer angenehm ist, kann es frustrierend sein, jedes Mal dieselben Felder auszufüllen, wenn ein neuer Container erstellt wird.

Doch es gibt eine Lösung: Mit "docker-compose" können alle Containererstellungsparameter in einer Konfigurationsdatei festgelegt werden, sodass Container automatisch daraus erstellt werden können.

Im Portainer wird dies als "Stacks" bezeichnet, was letztendlich auf docker-compose zurückzuführen ist.

In diesem Tutorial werden wir anhand des ioBroker-Containers zunächst die Grundlagen von Portainer Stacks kennenlernen, bevor wir abschließend ioBroker und Redis gemeinsam erstellen. Wir werden also versuchen, zwei Container gleichzeitig zu verwenden.

Die folgenden Voraussetzungen gelten für dieses Verfahren:

- Selbstverständlich muss Portainer bereits ausgeführt werden, und wir müssen in der Lage sein, unseren Docker-Dienst entsprechend zu verwalten.

- Wir werden ein benutzerdefiniertes Bridge-Netzwerk in unser Beispiel integrieren. Da das Bridge-Netzwerk ebenfalls über den Stack erstellt wird, erfordert dies keine vorherige Arbeit. Es ist jedoch wichtig, sicherzustellen, dass der Adressbereich für das Bridge-Netzwerk idealerweise nicht bereits von einem anderen Netzwerk belegt ist.

- Da das ioBroker-Image besonders groß ist, ist es ratsam, das Image im Voraus über den Menüpunkt "Images" herunterzuladen. Dies spart Zeit beim späteren Bereitstellen des Stacks.

- Es werden auch wieder Volumes oder Verzeichnisse auf dem Host benötigt, um unsere persistenten Daten zu speichern. Für weitere Informationen dazu können Sie die Tutorials zur Bereitstellung des ioBroker- oder des Redis-Containers konsultieren.

Um das Stack-File für den ioBroker-Container zu erstellen, müssen wir beachten:

- Wie bereits erwähnt, enthält das Stack-File alle Informationen über die zu erstellenden Container, deren Netzwerke, Volumes usw. Es ist in YAML verfasst, einer Auszeichnungssprache aus derselben Familie wie das vielleicht bekanntere XML. Wie bei allen (Programmier-)Sprachen gibt es auch in YAML eine (wenn auch sehr einfache) Syntax. Aber keine Sorge, die Syntax kann leicht anhand von Beispielen aus dem Internet erlernt werden.

Tipp:

Für die Vorbereitung des Stack-Files bevorzuge ich den Notepad++ Editor. Dort kann das Syntax-Highlighting für YAML unter "Sprachen" aktiviert werden, was die Arbeit sehr übersichtlich macht.

Nun aber zurück zum Text. Die Informationen für den Stack können im Portainer auf verschiedene Arten bereitgestellt werden: über den "Web Editor", durch das Hochladen einer Compose-Datei oder über ein Git-Repository bzw. "Custom Template". Für den Einstieg empfehle ich, das Stack-File über den "Web Editor" zu schreiben oder zu kopieren. Obwohl dieser kein Syntax-Highlighting bietet, zeigt er Fehler zuverlässig mit einem roten X-Symbol an.

Um den Web Editor zu öffnen, klicken wir zunächst auf "Stacks" und dann auf "Add Stack" in der Web-Oberfläche von Portainer.

1708511945069.png

Wie üblich ist es nun an der Zeit, dem Kind (in diesem Fall dem Stack) einen Namen zu geben. Ich werde ihn einfach "iob" nennen.

Und dann nichts wie ran an den Web Editor.
Der erste Schritt im Compose-File besteht darin, die Format-Version anzugeben:

YAML:
Du musst dich Anmelden oder Registrieren um den Inhalt der Codes zu sehen!

Bitte beachten:

Portainer Stacks unterstützt derzeit nur das Compose-Dateiformat in Version 2. Eine ausführliche Dokumentation dazu findet sich in der Docker-Dokumentation.

Als Nächstes kommen wir zum Abschnitt der Services. Ein Service entspricht dabei einem Container. Für ioBroker definieren wir also:

YAML:
Du musst dich Anmelden oder Registrieren um den Inhalt der Codes zu sehen!
Dann fahren wir fort mit den Informationen zum Container, bis unser Compose-File folgendermaßen aussieht..

Container-Namen: iobroker # Bezeichnung des Containers
Image: buanet/iobroker:latest-v5 # Verwendetes Image
Hostname: iobroker # Hostname des Containers
Neustart: immer # Neustart-Politik
Netzwerke: # Netzwerke des Containers
intern: # Name des Netzwerks
ipv4_address: 172.18.0.2 # IP-Adresse im Netzwerk
Ports: # Weitergeleitete Ports nach außen
- "8081:8081" # Port für die ioBroker-Admin-Oberfläche
Volumes: # Volumes/Verzeichnisse
- /volume1/docker/iobroker_data:/opt/iobroker # Verzeichnis für ioBroker im Format: /Pfad/Auf/Dem/Host:/Pfad/Im/Container

Aber Moment mal. Da fehlt noch etwas.

Genau. Es fehlt noch die Definition des Netzwerks. Denn wie oben bereits erwähnt, möchten wir auch das Netzwerk durch den Stack erstellen lassen.

Das Netzwerk wird in einem separaten Block definiert. Um dies hinzuzufügen, fügen wir folgenden Block unterhalb ein und beginnen syntaktisch am Zeilenanfang.

YAML:
Du musst dich Anmelden oder Registrieren um den Inhalt der Codes zu sehen!

Ohne Kommentare und syntaktisch „copy & paste“-fähig sieht unser vollständiges Stack-File für den eigenständigen ioBroker-Container im Bridge-Netzwerk dann so aus:

YAML:
Du musst dich Anmelden oder Registrieren um den Inhalt der Codes zu sehen!

Stack erstellen

Soweit so gut. Jetzt ist es an der Zeit, unser Stack-File auszuprobieren. Dazu müssen wir im Portainer nichts weiter tun, als auf den Button „Deploy the stack“ zu klicken.

Achtung:

Wenn Sie eine Synology Disk Station als Host verwenden und Portainer beim Erstellen eines Stacks eine Fehlermeldung mit "bla bla mem_swappiness bla bla" anzeigt, fügen Sie bitte unterhalb der Volumendefinition, also am Ende der Containerdefinition von ioBroker, die folgende Definition ein (ein Beispiel ist auch weiter unten zu sehen):

YAML:
Du musst dich Anmelden oder Registrieren um den Inhalt der Codes zu sehen!

Dies umgeht einen bekannten Bug, der meines Wissens nur Besitzer von DiskStation betrifft.

Wenn etwas im Stack-File nicht stimmt, erscheint in der rechten oberen Ecke eine rote Fehlermeldung. Wenn alles reibungslos verläuft, landen wir in der Übersicht unserer Stacks. Mit einem Klick auf den Namen des gerade erstellten Stacks können wir einen Blick auf die Details werfen.

1708512360375.png

Unser Stack, und somit der darin enthaltene ioBroker-Container, ist nun einsatzbereit.

Mein Vorschlag ist nun, dass Sie sich ein wenig mit dem ioBroker-Stack vertraut machen. Probieren Sie doch einmal aus, was passiert, wenn Sie den Stack löschen und dann wieder neu erstellen. Schauen Sie dabei auch in den Menüpunkt "Networks".

Oder wie verhält es sich, wenn Sie das Stack-File während des laufenden Betriebs bearbeiten, zum Beispiel eine Umgebungsvariable hinzufügen? Probieren Sie es einfach mal aus.

Nun kommen wir zum nächsten Schritt: dem Hinzufügen eines weiteren Containers. Wie bereits versprochen, füge ich unserem ioBroker-Stack-File einen Redis-Container hinzu.

Hier ist das fertige Stack-File mit zwei Containern:

Ohne lang drum herum zu reden, so sieht mein fertiges Stack File mit zwei Containern aus:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
version: "2"
services:
iobroker:
container_name: iobroker
image: buanet/iobroker:latest-v5
hostname: iobroker
restart: always
networks:
internal:
ipv4_address: 172.18.0.2
ports:
- "8081:8081"
environment:
- IOB_STATESDB_HOST=redis
- IOB_STATESDB_PORT=6379
- IOB_STATESDB_TYPE=redis
volumes:
- /volume1/docker/iobroker_data:/opt/iobroker
depends_on:
- redis
mem_swappiness: -1

redis:
container_name: redis
image: redis:latest
hostname: redis
restart: always
networks:
internal:
ipv4_address: 172.18.0.3
ports:
- "6379:6379"
volumes:
- /volume1/docker/redis_data:/data
mem_swappiness: -1

networks:
internal:
driver: bridge
ipam:
config:
- subnet: 172.18.0.0/16
gateway: 172.18.0.1
ip_range: 172.18.0.1/24


Wenn Sie genauer hinschauen, werden Sie sehen, dass neben dem zusätzlichen "service" auch beim ioBroker weitere Definitionen hinzugekommen sind.

Zum einen haben wir jetzt die Definition "environment", in der die Umgebungsvariablen festgelegt sind. Zum anderen ist die Definition "depends_on" hinzugekommen, die die Konfiguration von Abhängigkeiten ermöglicht. Dadurch wird sichergestellt, dass der ioBroker-Container erst gestartet wird, wenn die Redis-Datenbank verfügbar ist.

Probieren Sie es einfach aus. Das Arbeiten mit Stacks ist in der Regel sehr komfortabel. Und wenn Sie Ihre Stack-Files regelmäßig sichern, können Sie Ihre Container im schlimmsten Fall in wenigen Minuten wiederherstellen.

Viel Spaß beim Testen!

Quelle: buanet.de
 
Zurück
Oben