当前位置:  开发笔记 > 编程语言 > 正文

使用Docker部署到生产中:零停机时间

如何解决《使用Docker部署到生产中:零停机时间》经验,为你挑选了1个好方法。

我没有看到如何使用Docker实现零停机部署.

假设我有一个运行MyWebApp的PHP容器由同一服务器上的Nginx容器提供服务.然后我更改了一些代码,因为Docker容器是不可变的我必须再次使用代码更改来构建/部署MyWebApp容器.在执行此操作期间,MyWebApp已关闭计数...

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

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



1> leucos..:

您可以使用nginx 的容器对容器进行某种蓝绿色部署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 start the_previous_colordocker stop the_latest_color.

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

推荐阅读
路人甲
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有