Kurze Antwort:
Führen Sie Ihr Programm als ein einzigen Docker-Container. Stellen Sie sich einen Andock-Container als eine leicht isolierte Umgebung vor, ähnlich einer virtuellen Umgebung, in der Sie ein Programm/einen Dienst ausführen können. Dieser Dienst kann mehrere Threads ausführen, die alle vom übergeordneten Programm gestartet wurden - es ist immer noch ein Dienst, der auf einem einzelnen Andockcontainer ausgeführt wird.
Erläuterung:
Nehmen wir an, Sie ein Programm, das Themen laicht zu so etwas Arbeit - dieses Programm könnte einen Thread-Pool, einige Berechnung auf eine Reihe von Stücken zu tun, oder es könnte ein Web-Server sein, wie Apache. Es könnte sogar ein Python-Code sein, der einen Prozesspool instanziiert, um die Chunch-Berechnung durchzuführen. In all diesen Fällen gehören alle Threads und Prozesse zu einem Master-Prozess, der als ein einzelnes Programm oder Dienst betrachtet werden kann. Dieses einzelne Programm wird durch einen einzelnen Benutzerbefehl ausgelöst, den Sie in der DOCKER-Datei ENTRYPOINT eingeben.
Zum Beispiel können Sie einen Apache-Server-Container mit dem offiziellen Apache-Bild auf Docker Nabe docker hub ref) laufen:
docker run -dit --name my-apache-app -v "$PWD":/usr/local/apache2/htdocs/ httpd:2.4
Und das wird den Apache-Web-Server als einen einzelnen Behälter, und zwar unabhängig davon, wie viele Threads laufen Es wird ausgeführt, auf das leicht zugegriffen werden kann, wenn der Bediener es mit den Andockbefehlen anhalten, neu starten, löschen usw. möchte. Und das ist bequemer, da wir uns keine Gedanken darüber machen müssen, wie Sie Volumina anhängen, Ports öffnen und eine Vielzahl von Containern miteinander verbinden, so dass sie miteinander kommunizieren.
Der Hauptpunkt ist also, dass Sie einen Container für jede Dienstinstanz erzeugen möchten. Wenn Sie beispielsweise doppelte Instanzen des übergeordneten Prozesses starten möchten. Führen Sie Apache auf zwei Computern als Teil einer Konfiguration mit Lastenausgleich aus, dann würden Sie zwei Container ausführen, einen auf jedem Host.
Außerdem, wenn Sie einen Anwendungsfall haben, wo Sie verschiedene Jobs im Batch-System ausführen mussten, wo jeder Job eine bestimmte Bibliotheken benötigt, dann würde diese Art von Anwendungsfall von der Umgebungsisolierung profitieren Das würde man erreichen, wenn man verschiedene Container fährt. Aber das ist nicht das, was Sie gefragt haben. Ihre Frage bezieht sich speziell auf einen Webserver, der Threads und Prozesse erzeugt, die Threads verwenden, um an Chunks zu arbeiten, und in diesen Fällen spawnen Sie einen einzelnen Container für den Service/das Programm.