Jim*_*izz 11 php nginx php-fpm docker
我一直在玩 docker 和 docker-compose 并有一个问题。
目前我的 docker-compose.yml 看起来像这样:
app:
image: myname/php-app
volumes:
- /var/www
environment:
<SYMFONY_ENVIRONMENT>: dev
web:
image: myname/nginx
ports:
- 80
links:
- app
volumes_from:
- app
Run Code Online (Sandbox Code Playgroud)
应用程序包含端口 9000 上的 php-fpm 和我的应用程序代码。Web 是带有一些配置的 nginx。
这如何发挥我所期望的功能,但是为了将 nginx 连接到 php-fpm 我有这一行:
fastcgi_pass app:9000;
Run Code Online (Sandbox Code Playgroud)
我怎样才能有效地扩展它?例如,如果我想要运行一个 nginx 容器但运行三个应用程序容器,那么我肯定会有三个 php-fpm 实例都试图侦听端口 9000。
如何在不同的端口上拥有每个 php-fpm 实例,但仍然知道它们在任何给定时间在我的 nginx 配置中的位置?
我采取了错误的方法吗?
谢谢!
小智 5
一种解决方案是将额外的 php-fpm 实例添加到您的 docker-compose 文件中,然后使用其他答案中提到的 nginx 上游来平衡它们之间的负载。这是在这个示例 docker-compose repo 中完成的:https : //github.com/iamyojimbo/docker-nginx-php-fpm/blob/master/nginx/nginx.conf#L137
upstream php {
#If there's no directive here, then use round_robin.
#least_conn;
server dockernginxphpfpm_php1_1:9000;
server dockernginxphpfpm_php2_1:9000;
server dockernginxphpfpm_php3_1:9000;
}
Run Code Online (Sandbox Code Playgroud)
这并不是很理想,因为当您想放大或缩小时,它需要更改 nginx 配置和 docker-compose.yml。
请注意,9000 端口是容器内部的,而不是您的实际主机,因此在端口 9000 上有多个 php-fpm 容器并不重要。
Docker 在今年秋天收购了 Tutum。他们有一个解决方案,将 HAProxy 容器与他们的 api 相结合,以自动调整负载平衡器配置以适应正在运行的容器进行负载平衡。这是一个很好的解决方案。然后 nginx 指向分配给负载均衡器的主机名。或许 Docker 会在 Tutum 收购之后进一步将这种类型的解决方案集成到他们的工具中。这里有一篇关于它的文章:https : //web.archive.org/web/20160628133445/https : //support.tutum.co/support/solutions/articles/5000050235-load-balancing-a-web-service
Tutum 目前是一项付费服务。Rancher 是一个开源项目,提供类似的负载平衡功能。他们还有一个“rancher-compose.yml”,它可以在 docker-compose.yml 中定义服务设置的负载平衡和扩展。 http://rancher.com/the-magical-moment-when-container-load-balancing-meets-service-discovery/ http://docs.rancher.com/rancher/concepts/#load-balancer
2017 年 3 月 6 日更新:我使用了一个名为interlock的项目,它与 Docker 一起工作来自动更新 nginx 配置并重新启动它。另请参阅@iwaseatenbyagrue 的回答,其中有其他方法。
归档时间: |
|
查看次数: |
15003 次 |
最近记录: |