Развертывание с Docker в производство: нулевое время простоя

Я не понимаю, как можно добиться развертывания без простоев с помощью Docker.

Допустим, у меня работает контейнер PHP MyWebApp обслуживаемый Nginx Контейнер на том же сервере. Затем я изменяю некоторый код, так как контейнеры Docker являются неизменяемыми, я должен собрать / развернуть MyWebApp Контейнер снова с изменениями кода. За время, необходимое для этого MyWebApp вниз на счет …

Ранее я использовал Ansible или аналогичный для развертывания моего кода, а затем вставил символическую ссылку на новый каталог выпуска в веб-каталог … нулевое время простоя!

Можно ли достичь нулевого времени простоя развертывания с помощью Docker и приложения с одним сервером?

2

Решение

Вы могли бы сделать какой-то сине-зеленое развертывание с вашими контейнерами, используя nginx upstreams«S:

upstream containers {
server 127.0.0.1:9990;  # blue
server 127.0.0.1:9991;  # green
}

location ~ \.php$ {
fastcgi_pass containers;
...
}

Затем при развертывании ваших контейнеров вам придется переключаться между отображениями портов:

# assuming php-fpm runs on port 9000 inside the container
# current state: green container running, need to deploy blue
# get last app version
docker pull my_app
# remove previous container (was already stopped)
docker rm blue
# start new container
docker run -p 9990:9000 --name blue my_app
# at this point both containers are running and serve traffic
docker stop green
# nginx will detect failure on green and stop trying to send traffic to it

Чтобы развернуть зеленый, измените имя цвета и сопоставление портов.

Вы можете возиться с параметры входа вышестоящего сервера сделать переключение быстрее или использовать haproxy в вашем стеке и вручную (или автоматически через сокет управления) управлять бэкэндами.

Если что-то пойдет не так, просто docker start the_previous_color а также docker stop the_latest_color,

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

7

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]