развертывание стека Docker без простоя

развертывание стека Docker без простоя

Я следую руководству 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 

Затем я заметил некоторое время простоя. Они запускают новый контейнер по одному и останавливают старый контейнер по одному. Затем проблема в том, что загрузка нового образа занимает несколько минут, а веб-серверу требуется время для запуска.

Одно из решений, о котором я думал, — запустить балансировку нагрузки Nginx перед этими двумя репликами веб-сервера. Но есть ли лучшее решение?

решение1

Вам следует добавить политику перезапуска и stop_grace_period в ваш файл Compose:

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

решение2

Затем я заметил некоторое время простоя. Они запускают новый контейнер по одному и останавливают старый контейнер по одному. Затем проблема в том, что загрузка нового образа занимает несколько минут, а веб-серверу требуется время для запуска.

Вам необходимо определить проверку работоспособности для вашего образа/контейнера. Без этого docker не будет знать, когда ваше приложение готово обслуживать запросы, и будет отправлять запросы в «еще не готовый» контейнер и завершит работу оставшегося работающего контейнера вскоре после замены первого.

Healthcheck определяет команду, которую нужно запустить внутри контейнера, чтобы определить, является ли ваше приложение работоспособным. См.эта документацияо том, как настроить проверку работоспособности внутри вашего образа.

Связанный контент