Als je met PHP werkt en je wilt een enkel proces per container, dan raad ik je aan om Nginx te gebruiken en PHP-FPM te gebruiken, omdat het aanzienlijk eenvoudiger te configureren is dan Apache voor dit type setup (dat is tenminste wat ik heb gevonden).
Je moet ervoor zorgen dat je een gemeenschappelijk gedeeld volume hebt voor zowel de Nginx- als de PHP-containers. In dat volume zou je je index.php
. hebben . Hier is een grof voorbeeld docker-compose.yml:
services:
php7:
image: "php:7.1.10-fpm"
container_name: "prefix-php"
volumes:
- "./your/local/dir:/var/www/html"
nginx:
image: "nginx:1.13.6"
container_name: "prefix-nginx"
ports:
- "80:80"
- "443:443"
links:
- "php7"
volumes:
- "./your/local/dir:/var/www/html"
U zou dan dit volgende commando uitvoeren in de map waar de docker-compose.yml
bestand is:
$ docker-compose -p prefix
De reden voor "prefix" is dat u een projectgroepering voor uw containers maakt om niet te botsen met andere containernamen.
Natuurlijk heb je dan een nginx-siteconfiguratie nodig die verwijst naar /var/www/html
. U heeft weinig tot geen configuratievereisten voor de php-fpm-container.
Een kanttekening met betrekking tot de nginx-configuratie. De bovenstaande docker-compose.yml is onvolledig zonder de verwijzing naar de php-container in de nginx-configuratie. Dit zou er ongeveer zo uitzien (grofweg):
server {
listen 80 default_server;
# ...more config, like root, index, server_name, etc
location ~* \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass prefix-php:9000; # Note the container name here.
fastcgi_index index.php;
fastcgi_hide_header X-Powered-By;
fastcgi_read_timeout 300s;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location / {
try_files $uri $uri/ /index.php?$query_string;
}
# ...more rules
}
Je zult merken dat ik de container "php7" heb genoemd, je zou eigenlijk nog een "php5" container kunnen toevoegen aan deze docker-compose.yml
en dan kun je nginx-sites definiëren die verschillende versies van PHP gebruiken die allemaal op dezelfde docker-compose-setup draaien.
Ik waardeer het dat dit je vraag niet direct beantwoordt, omdat het het niet oplost met apache, maar het is een alternatief om te overwegen.
Hopelijk geeft dit je in ieder geval ideeën om je setup op te lossen.