PHP с nginx обычно выполняется с использованием php-fpm, который представляет собой отдельный процесс.
Сохраняя основную идею докера одного процесса (подробности см. В конце ответа) для каждого контейнера, имеет смысл иметь процессы nginx и php-fpm в отдельных контейнерах.
Поскольку связь между nginx и php-fpm возникает через fastcgi, контейнер php-fpm также может находиться на отдельном хосте, что позволяет использовать кластер контейнеров php-fpm за nginx.
За стеной комментариев приведем еще немного предыстории, в документации докера есть параграф о том, что у контейнера должен быть только один интерес .
Основная идея контейнера Linux ( lxc ) состоит в том, чтобы запустить процесс в изолированном пространстве имен на уровне процессора и памяти, а Docker добавляет к этому изоляцию на уровне файловой системы.
Преимущество состоит в том, что компрометация процесса в этом пространстве имен не позволяет читать память других процессов и, следовательно, должна предотвращать другие компрометации на хосте.
Говоря о nginx и php-fpm, они работают в паре, но у каждого есть свои проблемы, nginx выполнит HTTP-часть, маршрутизацию, проверку заголовков и т. Д., А php-fpm выполнит интерпретацию кода и вернет html-часть в nginx. , Хотя обычно оба вместе подают одно приложение, это не обязательно.
В зависимости от контекста может быть проще иметь контейнер, включающий весь стек для приложения, на рабочей станции разработчика, например. Но в идеале для производственного использования старайтесь поддерживать меньшее количество взаимодействий внутри контейнера, поскольку разделение процессов в одном и том же контейнере с супервизором приносит свою долю проблем с точки зрения процесса зомби и обработки журналов (пример приведен здесь только для иллюстрации).
Итак, наконец, я процитирую страницу докера с некоторым акцентом:
Хотя «один процесс на контейнер» часто является хорошим практическим правилом, это не жесткое и быстрое правило. Делайте все возможное, чтобы контейнеры были максимально чистыми и модульными .
Не существует «правила серебряной пули», которое применимо ко всему, это всегда баланс между сложностью внутри контейнера и сложностью организации самих контейнеров.