pilha do docker implantar sem tempo de inatividade

1

Estou seguindo o tutorial do Docker e faço isso em 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 eu notei algum tempo de inatividade. Eles iniciarão um novo contêiner um no momento e interromperão o antigo contêiner um no momento. Então, o problema é que leva alguns minutos para baixar a nova imagem e leva tempo para o servidor ser executado.

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

    
por Monkey D Luffy 11.03.2018 / 03:17

2 respostas

0

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

version: "3.1"
services:
    web:
        stop_grace_period: 10s
        deploy:
             replicas: 2
             restart_policy:
               condition: on-failure
    
por 18.09.2018 / 19:26
0

Then I noticed some downtime. They will start new container one at the time and stop old container one at the time. Then problem is that it takes a few minutes to download new image and it takes time for web server to run.

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 a solicitações e enviará solicitações para o contêiner "ainda não está pronto" e removerá o contêiner de execução restante logo após a substituição do primeiro.

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

    
por 18.09.2018 / 21:29