Докеризация PHP-приложения в единый Docker-образ Alpine+PHP+NGINX+logrotate

Идея

У меня есть несколько ультралегковесных PHP-скриптов, предоставляющих простой HTTP-API для тех или иных целей. Например, один из таких скриптов выполняет функции управления сетью (реализует протоколы SNMP, Telnet и т.д.) с доступом по HTTP-API. Но чтобы клиент мог эксплуатировать такой простой скрипт, ему необходимо установить и настроить WEB-сервер, РНР со всеми необходимыми расширениями, системные зависимости, такие как iproute2 и прочие и для многих клиентов это оказалось нетривиальной задачей. Так родилась идея поместить в один Docker-образ и скрипт и всё окружение, вместе со всеми необходимыми настройками. По идее, пользователь должен выполнить простую команду docker run ... чтобы всё это магическим образом сразу же заработало без какой-либо необходимости что-то устанавливать и настраивать самостоятельно.

Цель

  1. Нам нужен крайне легковесный Docker-образ, включающий в себя сам PHP-скрипт, php-fpm, nginx и остальное окружение, необходимое для работы.
  2. Доступ по HTTP должен быть только к единственному файлу index.php.
  3. Службы внутри контейнера должны работать от имени непривилегированного пользователя nobody, чтобы сделать контейнер чуточку безопасней.
  4. Так как клиенты разбросаны по всему миру, нужно чтобы часовой пояс клиента был корректным внутри контейнера, в том числе и для PHP.
  5. Все сообщения системных процессов (nginx, php и т.д.) должны выводиться на стандартный вывод stdout и stderr, как это требуется для процессов, работающих в контейнерах. Но выводить туда же логи самого PHP-скрипта может быть не совсем целесообразно, хотя и вполне допустимо. Всё же для логов PHP-скрипта условимся использовать отдельный лог-файл, который к тому же должен автоматически ротироваться без участия пользователя.

Вроде бы всё. Поехали.

Читать далее Докеризация PHP-приложения в единый Docker-образ Alpine+PHP+NGINX+logrotate