docker stack implantar sem tempo de inatividade

docker stack implantar sem tempo de inatividade

Estou seguindo o tutorial do Docker e faço isso na minha própria versão

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:

Sempre que altero algum código, reconstruo a nova imagem do docker e executo a atualização.

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

Então notei algum tempo de inatividade. Eles iniciarão um novo contêiner, um de cada vez, e interromperão o contêiner antigo, um de cada vez. Então o problema é que leva alguns minutos para baixar a nova imagem e leva tempo para o servidor web ser executado.

Uma solução que eu estava pensando é executar o balanceamento de carga Nginx na frente dessas duas réplicas de servidor web. Mas existe alguma solução melhor?

Responder1

Você deve colocar a política de reinicialização e stop_grace_period em seu arquivo de composição:

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

Responder2

Então notei algum tempo de inatividade. Eles iniciarão um novo contêiner, um de cada vez, e interromperão o contêiner antigo, um de cada vez. Então o problema é que leva alguns minutos para baixar a nova imagem e leva tempo para o servidor web ser executado.

Você precisa definir uma verificação de integridade para sua imagem/contêiner. Sem isso, o docker não sabe quando seu aplicativo está pronto para atender solicitações e enviará solicitações para o contêiner "ainda não pronto" e retirará o contêiner restante em execução logo após substituir o primeiro.

O healthcheck define um comando a ser executado dentro do seu contêiner para identificar se o seu aplicativo está íntegro. Veresta documentaçãopara saber como configurar a verificação de integridade dentro de sua imagem.

informação relacionada