Mehrere Docker-Hosts mit einem Stack verwalten

Mehrere Docker-Hosts mit einem Stack verwalten

Ab zwei Docker-Servern stellt sich die Frage: Wie managed man mehrere Hosts effizient, ohne sich jedes Mal per SSH einzuloggen?

Option 1: Docker Context — der einfachste Weg

Docker Context erlaubt es, mit einem einzigen CLI zwischen mehreren Docker-Hosts zu wechseln — ohne zusätzliche Software.

# Context für Remote-Server anlegen (via SSH)
docker context create myserver \
  --docker "host=ssh://deploy@192.168.1.10"

# Verfügbare Contexts anzeigen
docker context ls

# Context aktivieren
docker context use myserver

# Jetzt gehen alle docker-Befehle an den Remote-Server
docker ps
docker compose up -d

# Zurück zum lokalen Docker
docker context use default

Einzelne Befehle ohne Context-Wechsel:

docker --context myserver ps
docker --context myserver compose -f stack.yml up -d

Option 2: DOCKER_HOST Umgebungsvariable

export DOCKER_HOST="ssh://deploy@192.168.1.10"
docker ps   # → Remote-Host

unset DOCKER_HOST
docker ps   # → lokaler Host

Nützlich für Skripte die einen bestimmten Host ansprechen sollen.

Option 3: Ansible für Compose-Deployments

Ansible kann Compose-Dateien auf mehrere Hosts deployen und Befehle parallel ausführen:

# playbook.yml
- hosts: docker_servers
  tasks:
    - name: Compose-Datei kopieren
      copy:
        src: docker-compose.yml
        dest: /opt/myapp/docker-compose.yml

    - name: Stack starten
      community.docker.docker_compose_v2:
        project_src: /opt/myapp
        state: present
ansible-playbook playbook.yml -i inventory.yml

Option 4: Docker Swarm

Wenn Hochverfügbarkeit und Load Balancing benötigt werden, ist Swarm die Docker-native Lösung:

docker swarm init
docker stack deploy -c compose.yml mystack

Swarm verteilt Services automatisch auf verfügbare Nodes.

Option 5: Portainer Business

Portainer Business Edition bietet eine Web-GUI für Multi-Host-Management — jeder Docker-Host wird als "Environment" hinzugefügt und ist über eine zentrale Oberfläche verwaltbar.

Contexts im Team teilen

Docker-Contexts liegen in ~/.docker/contexts/. Sie lassen sich exportieren:

# Context-Konfiguration anzeigen
docker context inspect myserver

# Für Team: Context-Daten in ein gemeinsames Repo legen
# und als Setup-Skript bereitstellen:
docker context create myserver \
  --docker "host=ssh://deploy@server.example.com"

SSH-Keys müssen auf dem Remote-Host hinterlegt sein — Docker Context nutzt OpenSSH für den Verbindungsaufbau.

SSH-Key für Deploy-User einrichten

# Key generieren (einmalig)
ssh-keygen -t ed25519 -C "docker-deploy"

# Public Key auf Remote-Host installieren
ssh-copy-id -i ~/.ssh/id_ed25519.pub deploy@192.168.1.10

# Verbindung testen
ssh deploy@192.168.1.10 docker ps

Empfehlung

Für 2-5 Hosts: Docker Context — minimal, kein Extra-Tool, funktioniert mit bestehenden Compose-Workflows. Für größere Flotten oder Teams: Portainer oder Ansible. Für Hochverfügbarkeit: Swarm.