Php 将Docker部署到生产环境中:零停机
我无法理解如何使用Docker实现零停机部署 假设我有一个运行MyWebApp的PHP容器,它由同一台服务器上的Nginx容器提供服务。然后我更改了一些代码,因为Docker容器是不可变的,所以我必须使用代码更改再次构建/部署MyWebApp容器。在执行此操作所需的时间内,MyWebApp已停止计数 以前我会使用Ansible或类似工具来部署我的代码,然后将新的发布目录符号链接到web目录。。。零停机时间 使用Docker和单服务器应用程序是否可以实现零停机部署?您可以使用nginxPhp 将Docker部署到生产环境中:零停机,php,deployment,docker,continuous-integration,ansible,Php,Deployment,Docker,Continuous Integration,Ansible,我无法理解如何使用Docker实现零停机部署 假设我有一个运行MyWebApp的PHP容器,它由同一台服务器上的Nginx容器提供服务。然后我更改了一些代码,因为Docker容器是不可变的,所以我必须使用代码更改再次构建/部署MyWebApp容器。在执行此操作所需的时间内,MyWebApp已停止计数 以前我会使用Ansible或类似工具来部署我的代码,然后将新的发布目录符号链接到web目录。。。零停机时间 使用Docker和单服务器应用程序是否可以实现零停机部署?您可以使用nginxupstre
upstreams对您的容器执行某种操作:
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启动上一种颜色
并docker停止最新的颜色
由于您使用Ansible,因此您可以使用它来协调此过程,甚至可以将冒烟测试添加到混合中,以便在出现问题时自动触发回滚。这与我的原始想法非常接近。虽然最后我使用了类似的东西,在运行docker的两台服务器之间安装了一个Nginx负载平衡器。这样,我还可以实现硬件故障切换和数据中心故障切换。非常感谢。