5

Ich habe Docker Compose (v2) und haben eine Knoten-Service (Website) und Python-basierte API bereitgestellt mit Nginx sitzen vor ihnen.Docker Container automatisch an Upstream-Konfiguration von Nginx Load Balancer

Eine Sache, die ich tun möchte, ist in der Lage, die Dienste durch Hinzufügen weiterer Container zu skalieren. Wenn ich im Voraus weiß, wie viele Container ich haben werde, kann ich die nginx upstream config mit den Verweisen auf die IPs der Container fest codieren, die Docker zur Verfügung stellt. Das Problem ist jedoch, dass die Upstream-nginx-Konfiguration dynamisch sein soll, z. Wenn ich einen weiteren Docker-Container hinzufüge, wird einfach der Speicherort des Containers an die Upstream-Liste der IPs im Upstream-Block angehängt.

Meine Idee war, ein Skript zu erstellen, das automatisch die Upstream-Server mit Env-Variablen anhängen wird, wenn die Container ändern, aber ich bin unsicher, wo ich anfangen soll und kann kein gutes Beispiel finden.

Antwort

2

Es gibt mehrere Möglichkeiten, dies zu erreichen. Worauf Sie sich beziehen, wird normalerweise Serviceerkennung genannt und kommt in vielen Formen. Ich werde zwei von ihnen beschreiben, die ich vorher benutzt habe.

Die erste und einfachste (die für einzelne Server funktioniert oder nur Container lokal auf einem Server erkennt) ist ein lokaler Proxy, der den Docker-Socket oder die API verwendet. https://github.com/jwilder/nginx-proxy ist einer der beliebtesten und sollte gut für Prototyping skalierbare Dienste in Compose funktionieren.

Ein anderer Weg (der mehr Multi-Host-freundlich aber komplizierter ist) würde Dienste in einer Registrierung (wie etcd oder Consul) registrieren und dann dynamisch die Konfiguration schreiben. Zu diesem Zweck können Sie ein Registrierungssystem (z. B. https://github.com/gliderlabs/registrator) verwenden, um die Container und ihre Ports zu registrieren. Dann kann Ihr Proxy oder Ihre Anwendung eine Konfigurationsdatei verwenden, die mit einem Vorlagensystem wie https://github.com/kelseyhightower/confd geschrieben wurde.

+0

das scheint genau das zu sein, was ich gesucht habe, danke! – ExoticChimp