docker-compose.yml для nginx + php-fpm


Ниже приводится 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.



Структура файлов в каталоге, в котором запускается сборка:

nginx-php-fpm docker compose


Сборку можно запустить выполнив docker-compose up -d

docker-compose up -d



Если контейнеры уже существовали и нужно их пересобрать в команде требуются дополнительные ключи

docker-compose up -d --force-recreate --build



О том что docker-compose.yml для nginx-php-fpm отработал успешно будет говорить появление трех контейнеров:

Файл docker-compose.yml для конфигурации  nginx + php-fpm


Если теперь обратиться к веб-серверу, который доступен локально, вернётся результат выполнения PHP скрипта, который на хосте находится в директории src

curl 127.0.0.1/index.php



Чтобы все контейнеры запустились изначально не должно быть запущенного локально веб-сервера на порту 80.

Для контейнеров с apache и php порты не пробрасываются, для nginx порту 80 в контейнере ставится в соответствие порт 80 на хосте.



Читайте подробнее про docker volumes, volumes исопльзуются в рассмотренном примере.

Сказать спасибо