Докеризация 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

Установка Docker и docker-compose в Linux за минуту

Вы ищите, как быстро установить Docker и docker-compose в Linux? Можете закрывать все остальные вкладки с результатами поиска. Вы нашли самую лучшую инструкцию, описывающую как это сделать!

Приведенные команды сработают в Ubuntu. Если у вас не Ubuntu, то, может быть, вы сами поймете, что изменить в этих командах. Вероятно, они могут вовсе вам не подойди, если у вас не Debian-like дистрибутив. Будьте внимательны!

Чтобы узнать последнюю доступную версию docker-compose, перейдите по адресу https://github.com/docker/compose/releases и запомните номер версии последнего релиза. На момент написания статьи это был номер 1.24.0. Этот номер релиза пригодится при загрузки docker-compose — подставьте его вместо устаревшего номера релиза.

Вы можете просто взять и построчно вставить приведенный ниже набор команд в командную строку терминала Linux. Не забудьте изменить номер версии docker-compose.

sudo apt remove docker docker-engine docker.io
sudo apt update && sudo apt install -y apt-transport-https lsb-release ca-certificates
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -sc) stable"
sudo apt update && sudo apt install -y docker-ce

# Чтобы управлять докером без sudo, добавим себя в группу docker
sudo groupadd docker
sudo usermod -aG docker ${USER}

# Теперь загрузим компоуз. Не забудьте про номер версии
sudo curl -L https://github.com/docker/compose/releases/download/1.24.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

Вот и всё. Теперь ознакомьтесь со статьей о настройке окружения Docker для разработки и отладки и приступайте к разработке!

PhpStorm + Docker + Xdebug

В этой небольшой статье я опишу рабочее решение настройки Xdebug для использования его при отладке в PhpStorm с использованием удаленного интерпретатора PHP, работающего внутри Docker-контейнера.

В итоге получится конфигурация на базе окружения в Docker-контейнерах, которая позволит производить отладку Web-приложения, консольного приложения, тестов, запускаемых из консоли и запускаемых из PhpStorm.

Исходные данные

У вас должны быть установлены Linux, PhpStorm, Docker, Docker-compose. У меня в блоге есть небольшая памятка, как установить Docker и docker-compose в Linux. Если Вы ведете разработку не на Linux, то Вам, наверное, придется чуть сложнее, но раз Вы читаете эту статью, значит Вы уже озадачились вопросом отладки с использованием php в контейнере Docker и у Вас уже всё давно установлено. Если настройки для MacOS или Windows будут отличаться от приведенных в статье, я обязательно укажу на это.

Статья будет рассмотрена на следующем примере. Каталог на локальной машине (хосте), в котором планируется разработать некоторое приложение: /home/denis/code/docker-xdebug. При этом корень Web-сервера находится в подкаталоге public. Основной каталог проекта отображается внутрь Docker-контейнеров на каталог /var/www. Внутри Docker-контейнера, при этом, получаем путь к корневому каталогу Web-сервера /var/www/public — именно на него настроен Web-сервер nginx.

Читать далее PhpStorm + Docker + Xdebug