Docker Context - mehrere Docker-Hosts über die CLI verwalten

Docker Context - mehrere Docker-Hosts über die CLI verwalten

Docker Context ist ein eingebautes Feature, das mehrere Docker-Hosts über die gewohnte CLI erreichbar macht — ohne SSH-Aliasse, ohne extra Tools.

Wie Docker Context funktioniert

Jeder Context speichert eine Verbindungskonfiguration: welcher Docker-Daemon soll angesprochen werden? Docker unterstützt SSH, TCP und Unix-Socket als Transport.

# Aktuellen Context anzeigen
docker context ls

# Ausgabe:
# NAME        DESCRIPTION   DOCKER ENDPOINT
# default *                 unix:///var/run/docker.sock

Context erstellen

Via SSH (empfohlen)

docker context create myserver \
  --description "Produktionsserver" \
  --docker "host=ssh://deploy@192.168.1.10"

Docker nutzt OpenSSH — SSH-Keys müssen eingerichtet sein:

# Key auf Remote-Server installieren
ssh-copy-id deploy@192.168.1.10

# Verbindung manuell testen
ssh deploy@192.168.1.10 "docker ps"

Via TCP (mit TLS)

docker context create myserver \
  --docker "host=tcp://192.168.1.10:2376,ca=/certs/ca.pem,cert=/certs/cert.pem,key=/certs/key.pem"

Context nutzen

# Dauerhaft wechseln
docker context use myserver

# Alle Docker-Befehle gehen jetzt an myserver
docker ps
docker images
docker compose up -d

# Zurück zu lokalem Docker
docker context use default

Einmalig ohne Context-Wechsel

docker --context myserver ps
docker --context myserver images
docker --context myserver compose -f prod.yml up -d

Nützlich in Skripten: kein Zustand wird verändert, der Context bleibt auf default.

Compose mit Context

Docker Compose v2 unterstützt Context vollständig:

# Stack auf Remote-Host deployen
docker --context myserver compose -f docker-compose.prod.yml up -d

# Logs vom Remote-Stack lesen
docker --context myserver compose logs -f myapp

Context-Details anzeigen und löschen

# Alle Contexts
docker context ls

# Details eines Context
docker context inspect myserver

# Context entfernen
docker context rm myserver

Context-Konfiguration

Contexts werden unter ~/.docker/contexts/ gespeichert. Der aktive Context steht in ~/.docker/config.json:

{
  "currentContext": "myserver"
}

DOCKER_HOST als Alternative

Für einmalige Aktionen oder CI/CD-Pipelines ist die Umgebungsvariable einfacher:

export DOCKER_HOST="ssh://deploy@192.168.1.10"
docker ps   # → Remote
unset DOCKER_HOST
docker ps   # → lokal

DOCKER_HOST überschreibt den aktiven Context.

Mehrere Server im Alltag

# Contexts anlegen
docker context create prod --docker "host=ssh://deploy@prod.example.com"
docker context create staging --docker "host=ssh://deploy@staging.example.com"

# Zwischen Servern wechseln
docker context use prod
docker ps

docker context use staging
docker ps

docker context use default

Zusammenfassung

Docker Context ist das am meisten unterschätzte Docker-Feature. Wer mehrere Server managed, spart sich SSH-Sessions und manuelle Host-Angaben. Der SSH-Transport ist dabei die empfohlene Option — sicher, ohne offene Ports, und mit bestehenden SSH-Keys direkt nutzbar.