2016-10-10 94 views
5

我一直在关注Docker以及如何在服务器上托管多个网站(“Docker方式”)。据我所知,理想情况下,一切都应该运行自己的容器,这些容器不应该共享。托管PHP网站的Docker体系结构

我的问题是下面的概述是否是一个有效的容器设置,请求会进入一个反向代理,将请求转发给底层的Web服务器以处理实际的请求。

另外,在下面的三种情况下,我详细介绍了包含应用程序源文件的不同方法,并且想知道哪三种最常用/最好使用。

我的愿望是能够在Docker中的单个服务器上运行不同的网站。这些网站可以有不同的要求,如图中不同的PHP-FPM版本所示。网站的部署本身对我来说有点不清楚,因为我不确定是否应该将源文件与nginx/PHP-FPM一起包含或单独部署。

Docker architecture overview

我的当前设置如下:

搬运工-compose.yml

version: '2' 
services: 
    nginx: 
     image: nginx:alpine 
     restart: always 
     ports: 
      - '80:80' 
     links: 
      - example_com 
      - example_org 
      - example_net 
     volumes: 
      - ./nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf:ro 

    example_com: 
     image: php:7.0-fpm-alpine 
     restart: always 
     volumes: 
      - ./sites/example_com:/var/www/example_com:ro 

    example_org: 
     image: php:7.0-fpm-alpine 
     restart: always 
     volumes: 
      - ./sites/example_org:/var/www/example_org:ro 

    example_net: 
     image: php:7.0-fpm-alpine 
     restart: always 
     volumes: 
      - ./sites/example_net:/var/www/example_net 

nginx的/ conf.d/default.conf

server { 
    listen  80; 
    server_name www.example.com example.com; 

    location ~ \.php$ { 
     fastcgi_pass example_com:9000; 
     fastcgi_index index.php; 
     fastcgi_param SCRIPT_FILENAME /var/www/example_com$fastcgi_script_name; 
     include  fastcgi_params; 
    } 
} 

server { 
    listen  80; 
    server_name www.example.org example.org; 

    location ~ \.php$ { 
     fastcgi_pass example_org:9000; 
     fastcgi_index index.php; 
     fastcgi_param SCRIPT_FILENAME /var/www/example_org$fastcgi_script_name; 
     include  fastcgi_params; 
    } 
} 

server { 
    listen  80; 
    server_name www.example.net example.net; 

    location ~ \.php$ { 
     fastcgi_pass example_net:9000; 
     fastcgi_index index.php; 
     fastcgi_param SCRIPT_FILENAME /var/www/example_net$fastcgi_script_name; 
     include  fastcgi_params; 
    } 
} 

这并非如上述概述所示,但概述中的情况对我来说似乎是理想情况。

如何设置反向代理和不同的PHP-FPM容器,以及如何部署我的网站及其后续更新?

对此的任何输入将不胜感激!

+0

我认为“dinghy”是反向代理,可能对此很有用 –

回答

0

我认为连接到主要nginx服务器的三个nginx服务器是没有必要的。 php-fpm进程监听套接字,以便您可以直接连接到主nginx服务器上的每个php-fpm进程

+0

所以我想让反向代理直接与不同的PHP-FPM容器通信,我在哪里放置源文件? – Revell

+0

你可以把它们放在一个单独的卷中,并给你想要访问的容器。 –

+0

@ChrisTanner那么这将如情况1所述? – Revell

0

我有一个几乎类似的场景,只运行一个Web服务器。首先,我认为你的设置很好,使用一个容器作为反向代理,另一个用于每个Web服务器。

我不确定是否需要在自己的容器中运行PHP。我使用的,而不是nginx的阿帕奇(仇敌会讨厌),并创造了两个给我一个自己的形象以下搬运工,compose.yml

version: '2' 

services: 
    webproxy: 
    image: myown/webproxy:x.y 
    [...] 

    webserver: 
    image: myown/webserver:x.y 
    [...] 

关于你提到的第二个问题:我一直对这个问题我自己和我从未见过使用数据容器的一点。数据使用相同的磁盘空间,但您不知道它存储的位置。我认为备份有点棘手。这就是我使用第一种方法将数据卷挂载到主机磁盘的原因。