Tutoriel Docker pour PHP

Ce tutoriel décrit le paramétrage de docker afin de définir un environnement de développement complet pour PHP / MySQL.

A partir d'un poste sous Windows, cette mise en place apporte fluidité et performance, sans sacrifier les outils de développement habituels.

La base de données

Tout d'abord, il est nécessaire de lancer le moteur de base de données, ici MySQL. Afin d'assurer une sauvegarde des données, il est préférable de mettre les données directement sur le disque et non au sein du container docker.

docker run --name mysql5 -v //c/monRep/base:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=motDePasse -p 80:80 -d mysql:latest

A noter ici, l'exposition du port 80 qui sera utile pour le serveur apache que nous allons lancer plus loin.

Ce lancement crée la base et lance le moteur de base de données qui est prêt à répondre à nos sollicitations.

Le peuplement de la base

Il est souvent nécessaire d'aller plus loin dans la création de la base, par exemple en y restaurant une base avec un nom d'utilisateur différent. La même image docker peut alors être utilisée pour accéder à la ligne de commande mysql :

docker run -it --link mysql5:mysql --rm mysql sh -c 'exec mysql -h"172.17.0.2" -P"3306" -uroot -p"motDePasse" '

L'adresse IP figurant ici est l'adresse du container précédemment lancée. Pour l'obtenir, il est nécessaire d'inspecter ce container :

docker ps

L'identifiant du container (première colonne) est à utiliser dans la commande suivante :

docker inspect nnnnnnnnn

Une fois dans la ligne de commande mysql, il est possible de créer l'utilisateur, de lui attribuer les droits et de créer la base de données à partir d'un fichier SQL.

Le serveur Apache et le moteur PHP

Dans une première approche, il est possible d'utiliser un container PHP / Apache déjà prêt comme dans les deux exemples suivants :

docker run -it -v c:/monRep/site:/var/www/html --network container:mysql5 ascdc/apache2-php7

docker run -it -v c:/monRep/site:/var/www/html --network container:mysql5 php:5.6-apache

Les deux cas fonctionnent bien, mais rapidement, il est nécessaire d'y intégrer des extensions PHP. Il faut alors créer une nouvelle image grâce à un fichier dockerfile comme par exemple celui-ci :

FROM php:5.6-apache
RUN apt-get update && apt-get install -y \
        libgd2-xpm-dev* \
    && docker-php-ext-install -j$(nproc) mysql \
    && docker-php-ext-install -j$(nproc) gd \

A partir de ce fichier, la construction de l'image se fait classiquement par :

docker build -t php56/custom . (à noter le point en fin de ligne référençant le répertoire courant)

Il suffit ensuite de la lancer à la place des images toutes faites utilisées précédemment :

docker run -it -v c:/monRep/site:/var/www/html --network container:mysql5 php56/custom


Le site est à présent accessible via localhost

Le développement

Les fichiers du site sont à présent directement accessibles dans le répertoire pointé (ici c:/monRep/site) depuis Windows. Il est donc possible d'utiliser l'environnement de développement habituel sous Windows (Eclipse, PHPStorm, ...).

Optimisons encore les performances

Afin d'optimiser les performances sur des socles lourds en nombre de fichiers, il est préférable de stocker directement les fichiers dans Docker. L'environnement de développement accède aux fichiers dans docker par différents moyens, au choix : SMB, FTP, ...

Ceci complique un peu l'environnement, mais on s'y retrouve grâce au gain de performance.