2016-04-20 8 views
1

Ich habe eine Anwendung, die ich derzeit auf einem einzigen Host über eine Docker Compose-Datei ausgeführt habe. Die Container kommunizieren miteinander über einen RabbitMQ-Container (sie sind also alle miteinander verbunden). Die App benötigt mehr Ressourcen, als mein einzelner Host bereitstellen kann. Daher dachte ich, dass Docker Swarm ideal wäre, da ich in der Lage sein sollte, dieselben Container über die gleiche Compose-Datei, aber auf verteilten Knoten hochzufahren.Docker Swarm + Docker Compose: Ausführen von verknüpften Containern auf verschiedenen Knoten?

Offenbar befinden sich verknüpfte Container jedoch auf demselben Knoten. Daher führt das Einrichten von Docker Swarm auf mehreren Knoten nicht zu der Containerverteilung, nach der ich suche.

Das Ambassador-Muster scheint der empfohlene Weg zu sein, um verknüpfte Container zu trennen (indem Proxies für die verknüpften Container auf jedem Knoten eingerichtet werden), aber ich habe Probleme, es in einer Docker-Compose-Datei zu verwenden, da die Beispiele I ' Ich habe gesehen, wie man jeden Knoten mit Andocklauf einrichtet und dann die IP des Knotens verwendet, auf dem der Shared Service läuft (RMQ in meinem Fall), um eine Umgebungsvariable zu setzen, um dem Botschaftscontainer des Clients mitzuteilen, wohin Daten für den verknüpften Dienst weitergeleitet werden sollen https://docs.docker.com/engine/admin/ambassador_pattern_linking/). Wie kann dies in eine Compose-Datei übersetzt werden, so dass ich die IP nicht wissen muss, auf der der Dienst ausgeführt wird (da Docker Swarm entscheiden wird, nachdem die Compose-Datei abgeschlossen ist)?

Antwort

3

Verwenden von Links ist deprecated. Stattdessen können Sie create a new network und fügen Sie alle Ihre Container zu diesem Netzwerk:

$ docker network create myapp 

Beachten Sie, dass nach dem Networking documentation for Compose, ein solches Netzwerk automatisch für Ihre compose Datei erstellt wird.

Dies bedeutet, dass Sie keine Links oder Netzwerke einrichten müssen, da Compose bereits automatisch ein Netzwerk erstellt und alle Container innerhalb dieses Netzwerks mit ihren Containernamen erreichbar sein müssen.

Werfen Sie auch einen Blick auf Using Compose with Swarm für einige Einschränkungen.