Jusqu’ici, nous utilisons l’image Apache standard et montons un fichier httpd.conf depuis le host pour activer PHP-FPM.
Problème : ce volume rend le déploiement moins portable et ajoute une étape manuelle.
Solution : créer une image personnalisée qui intègre directement notre httpd.conf et la configuration pour PHP-FPM.
Étapes pour créer l’image
Structure de projet :
monprojet/
│
├─ Dockerfile
├─ httpd.conf
└─ app/
└─ index.phpExemple de Dockerfile :
# Image de base : Apache standard
FROM httpd:2.4
# Copier notre configuration Apache personnalisée
COPY httpd.conf /usr/local/apache2/conf/httpd.conf
# Copier l'application web
COPY app/ /usr/local/apache2/htdocs/
# Exposer le port 80
EXPOSE 80
# Commande par défaut (déjà définie dans l'image httpd)
CMD ["httpd-foreground"]Dans le httpd.conf, on configure le proxy vers PHP-FPM sur le port de votre conteneur PHP-FPM, par exemple
ServerName localhost
LoadModule mpm_event_module modules/mod_mpm_event.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
LoadModule dir_module modules/mod_dir.so
LoadModule mime_module modules/mod_mime.so
LoadModule log_config_module modules/mod_log_config.so
DocumentRoot "/var/www/html"
<Directory "/var/www/html">
AllowOverride All
Require all granted
</Directory>
DirectoryIndex index.php index.html
ProxyPassMatch ^/(.*\.php)$ fcgi://php-fpm:9000/var/www/html/$1Construire et lancer l’image
- Construction :
docker build -t mon-apache-phpfpm:latest .
- Lancement du conteneur :
docker run -d -p 8080:80 --name mon-site --network monprojet-network mon-apache-phpfpm:latest
- Note : on connecte le conteneur au réseau Docker où tourne PHP-FPM (
monprojet-network) pour que le proxy fonctionne.
Avantages de cette approche
- Portable : plus besoin de monter le fichier
httpd.conf. - Prêt à l’emploi : tout est intégré dans l’image.
- Facile à reproduire : pour d’autres projets, il suffit de reconstruire avec un autre dossier
app/. - Sécurisé et propre : moins de volumes exposés et moins d’erreurs de configuration manuelle.
Astuce débutant : pour aller plus loin, vous pouvez créer une image encore plus légère en supprimant les modules Apache inutiles ou en partant d’images “slim”, mais l’idée principale est ici de rendre le déploiement simple et autonome.