gpt4 book ai didi

php - 使用 Docker 部署到生产环境 : Zero downtime

转载 作者:行者123 更新时间:2023-12-04 22:14:53 26 4
gpt4 key购买 nike

我看不到如何使用 Docker 实现零停机部署。

假设我有一个运行 MyWebApp 的 PHP 容器,由同一服务器上的 Nginx 容器提供服务。然后我更改了一些代码,因为 Docker 容器是不可变的,所以我必须通过代码更改再次构建/部署 MyWebApp 容器。在执行此操作所需的时间期间,MyWebApp 数不胜数...

以前我会使用 Ansible 或类似工具来部署我的代码,然后将新的发布目录符号链接(symbolic link)到 web 目录...零停机时间!

是否可以使用 Docker 和单个服务器应用程序实现零停机部署?

最佳答案

你可以做一些 blue-green deployment使用您的容器,使用 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

要部署绿色,请更改颜色名称和端口映射。

你可能想摆弄upstream server entry parameters加快切换速度,或在堆栈中使用 haproxy 并手动(或通过管理套接字自动)管理后端。

如果出现问题,只需 docker start the_previous_colordocker stop the_latest_color

由于您使用 Ansible,您可以使用它来编排此过程,甚至可以添加冒烟测试,以便在出现问题时自动触发回滚。

关于php - 使用 Docker 部署到生产环境 : Zero downtime,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34106964/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com