Flask, Gunicorn und Docker Swarm

7

Ich habe diese nette Rest-API in Flask implementiert, die in Docker ausgeführt wird, und ich denke über Skalierung nach. So bin ich vorangekommen:

CMD ["flask", "run", "--host=0.0.0.0"]

und

docker run -d -p 5000:5000 pyrest-alpine

funktioniert gut

CMD ["gunicorn", "-w", "4", "-b", "0.0.0.0:5000", "pyrest:app"]

und

docker run -d -p 5000:5000 pyrest-alpine

Dies funktioniert auch gut. Gunicorn hat eine gewisse Skalierung über das Prefork Worker-Modell in einem einzigen Container bereitgestellt. Jetzt möchte ich über die Replikation des Docker-Schwarms mit Healthchecks skalieren, bei denen beide vorhanden sind

CMD ["gunicorn", "-w", "4", "-b", "0.0.0.0:5000", "pyrest:app"]

und

CMD ["flask", "run", "--host=0.0.0.0"]

arbeiten gut mit

docker service create --name pyrest-swarm --replicas 2 -p 5000:5000 --health-interval=2s --health-timeout=10s --health-retries=3--health-cmd "curl 0.0.0.0:5000/status || exit 1" pyrest-alpine

Meine Frage ist: Benutze ich immer noch Gunicorn, wenn ich die Docker-Schwarm-Replikation verwende?

Ondra N.
quelle

Antworten:

2

Ja, wenn Sie Docker Swarm verwenden, möchten Sie Gunicorn weiterhin in Ihren Docker-Containern verwenden.

Gunicorn ist erforderlich, um die Kommunikation zwischen dem Server und Ihrer Webanwendung zu erleichtern. Bei einer Dockerized Flask-Anwendung ist dies immer noch der Fall, da Gunicorn die Kommunikation zwischen der Flask-Anwendung und dem Docker-Container übernimmt. Das Hinzufügen von Docker Swarm zu diesem Stapel bedeutet im Grunde nur, dass Sie mehr Instanzen Ihres Containers haben und dass Swarm den Ausgleich der eingehenden Anforderungen für jede Instanz übernimmt.

Gunther
quelle