Nếu bạn đang làm việc với PHP và bạn muốn có một quy trình duy nhất cho mỗi vùng chứa, thì tôi khuyên bạn nên sử dụng Nginx và sử dụng PHP-FPM, vì nó dễ định cấu hình hơn Apache cho kiểu thiết lập này (ít nhất đó là những gì tôi 'đã tìm thấy).
Bạn cần đảm bảo rằng bạn có một khối lượng chia sẻ chung cho cả vùng chứa Nginx và PHP. Trong tập đó, bạn sẽ có index.php
. Đây là một ví dụ thô về docker-compost.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"
Sau đó, bạn sẽ chạy lệnh sau đây trong thư mục có docker-compose.yml
tệp là:
$ docker-compose -p prefix
Lý do cho "tiền tố" là bạn tạo một nhóm dự án cho các vùng chứa của mình để không xung đột với các tên vùng chứa khác.
Đương nhiên, sau đó bạn cần một cấu hình trang web nginx trỏ đến /var/www/html
. Bạn sẽ có ít hoặc không có yêu cầu cấu hình cho vùng chứa php-fpm.
Một lưu ý phụ về cấu hình nginx. Docker-compos.yml ở trên chưa hoàn chỉnh nếu không có tham chiếu đến vùng chứa php trong cấu hình nginx. Điều này trông giống như vậy (nói một cách đại khái):
Máy chủ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
}
Bạn sẽ nhận thấy rằng tôi đã đặt tên cho vùng chứa là "php7", bạn thực sự có thể thêm một vùng chứa "php5" khác vào docker-compose.yml
này và sau đó, điều đó cho phép bạn xác định các trang web nginx sử dụng các phiên bản PHP khác nhau, tất cả đều chạy trên cùng một thiết lập docker-comp.
Tôi đánh giá cao rằng điều này không trực tiếp trả lời câu hỏi của bạn vì nó không giải quyết được nó bằng cách sử dụng apache, nhưng đó là một giải pháp thay thế để xem xét.
Hy vọng rằng điều này ít nhất cung cấp cho bạn ý tưởng để giúp giải quyết thiết lập của bạn.