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 伺服器副本之前運行 Nginx 負載平衡。但還有更好的解決方法嗎?

答案1

您應該將重新啟動策略和 stop_grace_period 放在您的撰寫文件中:

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

答案2

然後我注意到一些停機時間。他們將立即啟動新容器一併停止舊容器一。然後問題是下載新映像需要幾分鐘,並且網頁伺服器運行也需要時間。

您需要為您的映像/容器定義健康檢查。如果沒有這個,docker 不知道你的應用程式何時準備好服務請求,並將請求發送到「尚未準備好」的容器,並在替換第一個容器後不久刪除剩餘的正在運行的容器。

健康檢查定義了一個在容器內運行的命令,以確定您的應用程式是否健康。看本文檔了解如何在映像內配置運作狀況檢查。

相關內容