Ниже приводится docker-compose.yml для сервисов nginx-php-fpm. Скрипты сайта размещаются в каталоге src в директории в которой находится docker-compose.yml
Файл docker-compose.yml для конфигурации nginx + php-fpm
Конфигурационные файлы apache и nginx также копируются к контейнер на этапе сборки
version: '3'
services:
apache:
image: httpd:2.4
volumes:
- ./src:/var/www/html
- ./httpd/httpd.conf:/usr/local/apache2/conf/httpd.conf
depends_on:
- php
nginx:
image: nginx:1.13
ports:
- 80:80
volumes:
- ./src:/var/www/html
- ./nginx/nginx.conf:/etc/nginx/nginx.conf
depends_on:
- apache
php:
image: php:7.2-fpm
volumes:
- ./src:/var/www/html
Краткое описание
Файл предназначен для сборки трех контейнеров. Они будут обеспечивать работу сайта на PHP.
Для сборки нужен каталог src на хост машине с файлами сайта. В контейнерах этот каталог будет соответствовать /var/www/html — docroot сайта.
Также локально по путям ./httpd/httpd.conf и ./nginx/nginx.conf относительно каталога с docker-compose.yml должны быть подготовлены основные конфигурационные файлы сервисов httpd и nginx. На этапе сборки файлы будут проброшены к контейнеры.
Примеры файлов можно посмотреть в материале про сборку LAMP стэка в Docker.
Можно взять настройки как есть из статьи. В файле для nginx уже задано проксирование запросов на порт 9000, на котором по умолчанию запускается сервис php-fpm.
Комбинации nginx + php-fpm будет достаточно для обработки PHP скриптов. apache существует в настоящей сборке для поддержки файлов .htaccess.
Структура файлов в каталоге, в котором запускается сборка:
Сборку можно запустить выполнив docker-compose up -d
docker-compose up -d
Если контейнеры уже существовали и нужно их пересобрать в команде требуются дополнительные ключи
docker-compose up -d --force-recreate --build
О том что docker-compose.yml для nginx-php-fpm отработал успешно будет говорить появление трех контейнеров:
Если теперь обратиться к веб-серверу, который доступен локально, вернётся результат выполнения PHP скрипта, который на хосте находится в директории src
curl 127.0.0.1/index.php
Чтобы все контейнеры запустились изначально не должно быть запущенного локально веб-сервера на порту 80.
Для контейнеров с apache и php порты не пробрасываются, для nginx порту 80 в контейнере ставится в соответствие порт 80 на хосте.
Читайте подробнее про docker volumes, volumes исопльзуются в рассмотренном примере.