Назад | Перейти на главную страницу

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

Я следую руководству 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 stack deploy --compose-file docker-compose.yml xxxx-learn 

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

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

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

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

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

Вы должны поместить политику перезапуска и stop_grace_period в свой файл создания:

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