多个网站运行在docker容器里,如何实现?

多个网站运行在docker容器里,如何实现?

我正在运行两个 docker 容器,使用以下 docker-composer 脚本:

db:
  image: cofoundry/mysql
  environment:
    - MYSQL_USER=wordpress
    - MYSQL_PASS=wordpress
    - MYSQL_DB=wordpress
  ports:
    - "3306:3306"
  privileged: true

web:
  image: cofoundry/nginx-phpfpm
  volumes:
    - ../bedrock:/app
  environment:
    - DOCROOT=/app/web
  links:
    - db
  ports:
    - "80:80"
  privileged: true

但是我无法找到如何为不同的站点运行多个 nginx-phpfpm web 和 mysql 容器,例如 web_1 - db_1、web_2 - db_2 等?

此外,我还更改了 /etc/hosts 文件以列出所需的所有域,使用 boot2docker ip,但如何为它们运行容器?我无法在相同的端口 80 和 3306 上运行容器。

请提供建议,谢谢!

答案1

想象一下,网络端口是系统中某些服务的地址。那么,如果多个服务具有相同的地址,哪一个会收到“邮件”? :) 问题是只有一个进程可以绑定到某个网络端口。要解决 nginx 容器的问题,您必须配置一些前端代理(例如 haproxy)。您需要将其绑定到 :80 端口以接受所有传入连接。之后,在 haproxy.cfg 中定义 acls 和后端。例如: acl web1 hdr_beg(Host) www.web1.com acl web2 hdr_beg(Host) www.some_other_web.com .... use_backend web1_backend if web1 use_backend web2_backend if web2 .... backend web1_backend ... server web1_server localhost:<random port of nginx container> backend web2_backend ... server web2_server localhost:<other random port of nginx container>

因此,当连接到:80 端口时,haproxy 会解析主机头并将连接代理到匹配的后端。

使用 MySQL,您可以为每个实例定义不同的绑定端口,并配置您的 php 应用程序以建立与所需端口的连接。例如: web_1 would use db_1 (port 3306) web_2 would use db_2 (port 3307) 等等

相关内容