docker stack 部署无需停机

docker stack 部署无需停机

我正在按照 Docker 教程并使用我自己的版本进行操作

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:

每当我更改某些代码时,我都会重建新的docker镜像并运行更新。

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

然后我注意到有一些停机时间。他们会一次启动一个新容器,一次停止一个旧容器。问题是下载新镜像需要几分钟,并且 Web 服务器运行也需要时间。

我想到的一个解决方案是在这两个 Web 服务器副本前运行 Nginx 负载平衡。但是还有更好的解决方案吗?

答案1

您应该将重启策略和 stop_grace_period 放在您的撰写文件中:

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

答案2

然后我注意到有一些停机时间。他们会一次启动一个新容器,一次停止一个旧容器。问题是下载新镜像需要几分钟,并且 Web 服务器运行也需要时间。

您需要为镜像/容器定义健康检查。如果没有健康检查,docker 就不知道您的应用程序何时准备好处理请求,并将请求发送到“尚未准备好”的容器,并在替换第一个容器后不久关闭剩余的正在运行的容器。

healthcheck 定义了一个在容器内运行的命令,用于识别应用程序是否健康。请参阅本文档有关如何在图像中配置健康检查。

相关内容