Architettura Docker per l'hosting di un sito web PHP

Sto guardando Docker e come potrei ospitare più siti web su un server "il modo Docker". Per quanto ne capisco, idealmente tutto dovrebbe gestire i propri contenitori e questi contenitori non devono essere condivisi.

La mia domanda è se la panoramica qui sotto è una configuration valida del contenitore con le richieste che entrano in un unico proxy inverso che rilascia le richieste per sottodimensionare i webserver per gestire le richieste reali.

Inoltre, nelle tre situazioni sottostanti ho descritto diversi modi per includere i file di origine per l'applicazione e vorrei sapere quale dei tre è il più comune / meglio da usare.

Il mio desiderio è di poter eseguire diversi siti web su un singolo server in Docker. I siti web possono avere requisiti diversi come illustrato dalle diverse versioni PHP-FPM nel diagramma. La distribuzione del sito stesso è un po 'poco chiara perché non sono sicuro se dovrei includere i file di origine con nginx / PHP-FPM o distribuirlo separatamente.

Panoramica sull'architettura Docker

La mia configuration corrente è la seguente:

window mobile-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; } } 

Questo non è illustrato dalla panoramica precedente, ma la situazione nella panoramica è quella che sembra essere la situazione ideale per me.

Come faccio ad impostare questo con il proxy inverso ei diversi contenitori PHP-FPM e come faccio a distribuire i miei siti web ei loro aggiornamenti successivi?

Qualsiasi input su questo sarebbe molto apprezzato!

Penso che i tre server nginx collegati al server principale nginx non siano necessari. Il process php-fpm ascolta un socket in modo da poter collegarsi direttamente a ciascun process php-fpm dal server principale nginx

Ho uno scenario quasi simile che esegue solo un webserver. Prima di tutto penso che tu sia la configuration in questo modo utilizzando un unico contenitore come proxy inverso e un altro per each webserver.

Non sono sicuro se sia necessario eseguire PHP nel proprio contenitore. Sto utilizzando Apache invece di nginx (odio che odio) e ha creato una propria image per entrambi mi dà seguito docker-compose.yml

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

Per quanto riguarda la seconda domanda: sono stato a questa domanda e non ho mai visto un punto nell'uso dei contenitori dati. I dati utilizzano lo stesso spazio su disco ma non si sa where è memorizzato. Un po 'complicato per i backup a mio parere. Questo è il motivo per cui sto usando il tuo primo approccio per il assembly dei volumi di dati sul disco dell'ospite.