PHP-FPM dans Docker

Cas d'utilisation : faire tourner php 5.3.3 sur une machine de développement en Fedora 20 / 21, pour déploiement en production sur RHEL-6 (et aucune SCL de php 5.3 n'est actuellement disponible).

Cet exemple peut facilement s'adapter pour toutes les versions disponibles sous forme de RPM (5.3.3 dans RHEL-6, 5.4.16 dans RHEL-7, 5.4.16 et 5.5.6 dans RHSCL 1.2 ou en utilisant un dépôt tiers).

J'utilise le Dockerfile suivant :

FROM centos:6
RUN yum -y update && yum clean all
RUN yum -y install php-fpm php-mbstring php-mysql php-gd && yum clean all
RUN sed -e 's/127.0.0.1:9000/9000/' \\
        -e '/allowed_clients/d' \\
        -e '/catch_workers_output/s/^;//' \\
        -e '/error_log/d' \\
        -i /etc/php-fpm.d/www.conf
RUN mkdir -p /var/www/html
EXPOSE 9000
ENTRYPOINT /usr/sbin/php-fpm --nodaemonize

Installation :

  • yum install permet de récupérer les paquets binaires disponibles, la liste des extensions est à adapter aux besoins
Dossier des scripts :
  • le dossier /var/www/html utilisé dans l'exemple est à adapté en fonction de l'emplacement des applications

Description des changements de la configuration du pool fpm :

  • listen = 9000 pour écouter sur toutes les interfaces
  • suppression de listen.allowed_clients pour autoriser les connexions depuis l'extérieur du container
  • suppression de l'error_log pour utiliser la journalisation globale
  • activation de catch_workers_ouput pour que le server principal récupère et trace les erreurs des pools

Création du container :

docker build -t fpm53 .

Lancement du container :

docker run -v /var/www/html:/var/www/html -p 127.0.0.1:9003:9000 fpm53

A noter : mappage du dossier /var/www/html et du port 9000 (du container) sur le port 9003 (de l'hote)

Conclusion :

Même si je suis un fervent adepte des Software Collections, en leur absence, on dispose très simplement d'une version opérationnelle de PHP 5.3.3 sur une distribution récente (testé sous Fedora 20) en bénéficiant de l'utilisation des dépôts officiels.

Vus : 588
Publié par Remi Collet : 73