Jeśli pracujesz z PHP i chcesz mieć jeden proces w kontenerze, polecam używać Nginx i PHP-FPM, ponieważ jest znacznie łatwiejszy do skonfigurowania niż Apache dla tego typu konfiguracji (przynajmniej to jest to, co ja znalazłem).
Musisz upewnić się, że masz wspólny wolumin współdzielony dla kontenerów Nginx i PHP. W tym woluminie miałbyś swój index.php
. Oto prosty przykład 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"
Następnie należy uruchomić następujące polecenie w katalogu, w którym docker-compose.yml
plik to:
$ docker-compose -p prefix
Powodem „prefiksu” jest to, że tworzysz grupowanie projektów dla swoich kontenerów, aby nie kolidować z innymi nazwami kontenerów.
Oczywiście wtedy potrzebujesz konfiguracji witryny nginx, która wskazuje na /var/www/html
. Będziesz mieć niewiele wymagań konfiguracyjnych dla kontenera php-fpm.
Uwaga dodatkowa dotycząca konfiguracji nginx. Powyższy plik docker-compose.yml jest niekompletny bez odwoływania się do kontenera php w konfiguracji nginx. Wyglądałoby to tak (w skrócie):
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
}
Zauważysz, że nazwałem kontener „php7”, możesz faktycznie dodać kolejny kontener „php5” do tego docker-compose.yml
a następnie pozwala to na zdefiniowanie witryn nginx, które używają różnych wersji PHP działających na tej samej konfiguracji docker-compose.
Rozumiem, że nie odpowiada to bezpośrednio na twoje pytanie, ponieważ nie rozwiązuje go za pomocą apache, ale jest to alternatywa do rozważenia.
Mam nadzieję, że to przynajmniej podsunie Ci pomysły, które pomogą rozwiązać Twoją konfigurację.