Implementación de la pila acoplable sin tiempo de inactividad

Implementación de la pila acoplable sin tiempo de inactividad

Estoy siguiendo el tutorial de Docker y lo hago en mi propia versión.

version: "3.1"
services:
    web:
        image: registry.gitlab.com/xxxx/xxxx:latest
        deploy:
             replicas: 2
        ports:
             - "8888:80"
    mysql:
        image: mysql:latest
        environment:
           MYSQL_ROOT_PASSWORD: password
           MYSQL_USER: user
           MYSQL_PASS: password
        ports:
             - "8889:3306"
        volumes: 
           - mysql-data:/var/lib/mysql
volumes:
   mysql-data:

Cada vez que cambio algún código, reconstruyo una nueva imagen de la ventana acoplable y ejecuto la actualización.

docker stack deploy --compose-file docker-compose.yml xxxx-learn 

Luego noté algo de tiempo de inactividad. Iniciarán un nuevo contenedor uno a la vez y detendrán el antiguo uno a la vez. Entonces el problema es que se necesitan unos minutos para descargar la nueva imagen y el servidor web necesita tiempo para ejecutarse.

Una solución en la que estaba pensando es ejecutar el equilibrio de carga de Nginx frente a esas dos réplicas del servidor web. ¿Pero hay alguna solución mejor?

Respuesta1

Debes poner la política de reinicio y stop_grace_period en tu archivo de redacción:

version: "3.1"
services:
    web:
        stop_grace_period: 10s
        deploy:
             replicas: 2
             restart_policy:
               condition: on-failure

Respuesta2

Luego noté algo de tiempo de inactividad. Iniciarán un nuevo contenedor uno a la vez y detendrán el antiguo uno a la vez. Entonces el problema es que se necesitan unos minutos para descargar la nueva imagen y el servidor web necesita tiempo para ejecutarse.

Debe definir una verificación de estado para su imagen/contenedor. Sin eso, Docker no sabe cuándo su aplicación está lista para atender solicitudes y enviará solicitudes al contenedor "aún no listo" y eliminará el contenedor en ejecución restante poco después de reemplazar el primero.

La comprobación de estado define un comando que se ejecutará dentro de su contenedor para identificar si su aplicación está en buen estado. Veresta documentaciónpara saber cómo configurar el control de salud dentro de su imagen.

información relacionada