Frasco, Gunicorn y Enjambre Docker

7

así que tengo esta agradable API de descanso implementada en Flask ejecutándose en Docker y estoy pensando en escalar. Así es como progresé:

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

y

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

funciona bien

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

y

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

Esto también funciona bien, Gunicorn proporcionó algo de escala a través del modelo de trabajador prefork en un solo contenedor, ahora quiero escalar a través de la replicación del enjambre Docker con controles de salud donde ambos

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

y

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

funciona bien con

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

Mi pregunta es ¿Todavía uso gunicorn cuando uso la replicación de enjambre de docker?

Ondra N.
fuente

Respuestas:

2

Sí, cuando use Docker Swarm, aún querrá usar Gunicorn en sus contenedores Docker.

Gunicorn es necesario para facilitar la comunicación entre el servidor y su aplicación web. En el caso de una aplicación Dockerized Flask, este sigue siendo el caso, ya que Gunicorn maneja la comunicación entre la aplicación Flask y el contenedor Docker. Agregar Docker Swarm a esta pila básicamente significa que tiene más instancias de su contenedor, y que Swarm se encargará de equilibrar las solicitudes entrantes en cada instancia.

Gunther
fuente