托pipe一个PHP网站的Docker体系结构

我一直在研究Docker,以及如何在服务器上托pipe多个网站“Docker的方式”。 据我所知,理想情况下,一切都应该运行自己的容器,这些容器不应该共享。

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

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

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

Docker体系结构概述

我目前的设置如下:

泊坞窗,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容器,以及如何部署我的网站及其后续更新?

任何input在这将不胜感激!

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

我有一个几乎类似的情况只运行一个网络服务器。 首先,我认为你的设置是正确的这种方式使用一个容器作为反向代理和另一个每个网络服务器。

我不确定是否有必要在自己的容器中运行PHP。 我使用Apache而不是nginx(仇恨会讨厌),并创建了一个自己的形象,给我跟随docker-compose.yml

 version: '2' services: webproxy: image: myown/webproxy:xy [...] webserver: image: myown/webserver:xy [...] 

关于你的第二个问题:我自己一直在回答这个问题,而且从来没有见过使用数据容器的一个观点。 数据使用相同的磁盘空间,但不知道存储的位置。 在我看来备份有点棘手。 这就是我使用第一种方法将数据卷挂载到主机磁盘的原因。