Swarm-Modus
Docker OnlyDozzle unterstützt den Docker-Swarm-Modus. Im Swarm-Modus erkennt Dozzle Services und eigene Gruppen automatisch. Intern nutzt Dozzle die Swarm-API nicht, da sie eingeschränkt ist. Stattdessen gruppiert Dozzle selbst anhand von Swarm-Labels. Zusätzlich führt Dozzle die Statistiken der Container einer Gruppe zusammen. Damit siehst du Logs und Statistiken aller Container einer Gruppe in einer Ansicht. Das bedeutet allerdings, dass Dozzle auf jedem Host eingerichtet sein muss.
Wie funktioniert das?
Im Swarm-Modus baut Dozzle ein gesichertes Mesh-Netzwerk zwischen allen Knoten des Swarms auf. Über dieses Netzwerk kommunizieren die Dozzle-Instanzen miteinander. Das Mesh-Netzwerk basiert auf mTLS mit einem privaten TLS-Zertifikat. Die gesamte Kommunikation zwischen den Dozzle-Instanzen ist damit verschlüsselt und kann überall betrieben werden.
Dozzle unterstützt Docker-Stacks, Services und eigene Gruppen, um Logs zusammenzuführen. Zur Gruppierung der Container werden die Labels com.docker.stack.namespace und com.docker.compose.project genutzt. Bei Services verwendet Dozzle den Service-Namen als Gruppennamen, also com.docker.swarm.service.name.
Wie aktiviert man den Swarm-Modus?
Um Dozzle auf jedem Knoten im Swarm bereitzustellen, nutzt du mode: global. Damit landet Dozzle auf jedem Knoten des Swarms. Hier ein Beispiel mit Docker Stack:
services:
dozzle:
image: amir20/dozzle:latest
environment:
- DOZZLE_MODE=swarm
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /opt/dozzle/data:/data
ports:
- 8080:8080
networks:
- dozzle
deploy:
mode: global
networks:
dozzle:
driver: overlayBeachte, dass die Umgebungsvariable DOZZLE_MODE auf swarm gesetzt ist. Damit weiß Dozzle, dass es andere Dozzle-Instanzen im Swarm automatisch finden soll. Das overlay-Netzwerk bildet das Mesh-Netzwerk zwischen den Dozzle-Instanzen.
Das Volume /data wird eingebunden, um Dozzles Konfiguration (Benachrichtigungen, Cloud-Einstellungen, eigene Stacks) dauerhaft zu speichern. Da Dozzle global auf jedem Knoten läuft, solltest du auf jedem Knoten einen Host-Pfad einbinden, damit jede Instanz ihren lokalen Zustand über Neustarts hinweg behält.
WARNING
Socket-Proxy lässt sich im Docker-Swarm-Modus nicht verwenden. Diese Einschränkung kommt von Docker selbst, nicht von Dozzle. Im Swarm-Modus können Services nur mit anderen Services kommunizieren, Dozzle braucht aber direkte Verbindungen zu einzelnen Proxy-Instanzen, was nicht unterstützt wird. Wenn du eine Lösung für Socket-Proxy im Swarm-Modus hast, hören wir gerne davon!
Einfache Authentifizierung im Swarm-Modus einrichten
Für die einfache Authentifizierung kannst du die Datei users.yml in einem Docker-Secret ablegen. Hier ein Beispiel mit Docker Stack:
services:
dozzle:
image: amir20/dozzle:latest
environment:
- DOZZLE_LEVEL=debug
- DOZZLE_MODE=swarm
- DOZZLE_AUTH_PROVIDER=simple
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /opt/dozzle/data:/data
secrets:
- source: users
target: /data/users.yml
ports:
- "8080:8080"
networks:
- dozzle
deploy:
mode: global
networks:
dozzle:
driver: overlay
secrets:
users:
file: users.ymlIn diesem Beispiel liegt die Datei users.yml in einem Docker-Secret. Sie entspricht dem Beispiel unter einfache Authentifizierung.
Eigenständige Agents zum Swarm-Modus hinzufügen
Dozzle kann im Swarm-Modus auch eigenständige Agents einbinden.
Füge den entfernten Agent einfach genauso zu deiner Swarm-Compose-Datei hinzu, wie du es sonst tun würdest.
NOTE
Entfernte Agents werden unterstützt, entfernte Verbindungen wie Socket-Proxy dagegen nicht.
services:
dozzle:
image: amir20/dozzle:latest
environment:
- DOZZLE_MODE=swarm
- DOZZLE_REMOTE_AGENT=agent:7007
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /opt/dozzle/data:/data
ports:
- 8080:8080
networks:
- dozzle
deploy:
mode: global
networks:
dozzle:
driver: overlayDie entfernten Agents erscheinen nun neben den anderen Knoten in Dozzle.