LAMP sous Docker

Par Jean-François GAZET le 23 septembre 2015

Docker

LAMP, qu’on ne présente plus, c’est Linux Apache MySQL et PHP. Tout un environnement logiciel pour faire fonctionner un site internet.

Pour préparer une nouvelle machine de développement web, il faut installer PHP, Apache, et MySQL. Il faut ensuite personnaliser ces logiciels selon ses besoins. Ce qui implique d’ouvrir chaque fichier de configuration pour modifier les paramètres afin, par exemple, d’afficher tous les messages d’erreur PHP, choisir le ou les dossiers contenant les sites internet, choisir le port, etc… mais ça, c’était avant.

On peut utiliser ces applications dans des containers Docker que vous aurez préalablement adapté selon vos besoins. Vous pouvez ensuite les déployer très simplement sur différentes machines.

Je vous laisse consulter la documentation officielle pour installer Docker.

Cas concret

Entrons directement dans le vif du sujet. Je veux par exemple :

  • lancer un serveur Apache/PHP;
  • Apache ayant été configuré pour le développement;
  • accessible sur le port 81;
  • je veux travailler dans mon dossier /home/toto/monsite.

Je tape en ligne de commande :

docker run -d -p 81:80 -v /home/toto/monsite:/var/www/html apache-php-dev

Et j’accède au site à l’adresse suivante :
http://localhost:81/

Je veux un deuxième serveur, là, tout de suite, sur le port 82, accédant au dossier /home/toto/monsite2 :

docker run -d -p 82:80 -v /home/toto/monsite2:/var/www/html apache-php-dev

J’accède au site à l’adresse suivante :
http://localhost:82/

Explications sur la commande saisie :
docker : l’application en question
run : démarre un container, plus d’infos sur la commande “run” ici
-d : en tâche de fond
-p 82:80 : associe le port 82 de la machine hôte sur le 80 du container
-v /home/toto/monsite:/var/www/html : associe les dossiers (hôte:conteneur)
apache-php-dev : nom de l’image du container, dont je vous décris plus bas la création.

Bon c’est joli tout ça mais comment consulter le log Apache ?
Pas de problème, on va se “connecter” en bash sur l’image en cours d’exécution :

Pour afficher les images actuellement en fonctionnement :

docker ps

La réponse est du genre :

CONTAINER ID        IMAGE
e8a9b92051a9        apache-php-dev

C’est l’ID du container qui nous intéresse. Tapez la commande suivante en remplaçant l’identifiant :

docker exec -it e8a9b92051a9 bash

Et vous êtes connecté en root, le container étant basé sur Ubuntu :

root@e8a9b92051a9:/# _

Vous pouvez maintenant installer des applications (apt-get install), copier des fichiers, faire ce que vous voulez et… consulter le log Apache :

tail -f /var/log/apache2/error.log

Attention ! tout ce que vous faites ici en ligne de commande sera perdu !
Quand vous arrêtez le container, rien n’est sauvegardé. Il est toutefois possible de conserver les modifications en faisant un commit. Cela créera un nouveau container.

Pour voir les containers disponibles sur votre système, la commande est :

docker images

Il est possible d’importer et exporter des containers. Pour en arrêter un en cours d’exécution, la commande est :

docker stop [ID]

ou plus brutalement :

docker kill [ID]

Base de données MySQL

C’est bien beau Apache/PHP mais avec MySQL ou MariaDB, c’est mieux.

Téléchargez l’image officielle :

docker pull mysql

Démarrage de MySQL :

docker run -d -p 3306:3306 -v /home/toto/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=azerty mysql

docker run -d : vu précédemment;
-p 3306:3306 : ports MySQL par défaut;
-v /home/toto/mysql:/var/lib/mysql : association des dossiers hôte/container pour le stockage des bases de données;
-e MYSQL_ROOT_PASSWORD=azerty : Arrgh ! Changez-moi ce mot de passe root !
mysql : nom du container à démarrer.

Mais quelle est l’adresse IP de mon serveur MySQL ?

docker inspect [ID] | grep IPAddress

Pour se connecter au serveur MySQL en ligne de commande :

docker ps
docker exec -it [ID DU CONTAINER] bash
mysql -u root -p

Bref, avec Docker vous pouvez créer une multitude de configurations différentes et démarrer les services à la demande.

Pour aller plus loin

Créez vos propres images avec un fichier Dockerfile. C’est un simple fichier texte. Consultez la documentation de référence sur Dockerfile pour plus de détail. Voici comment créer un container personnalisé avec Apache-PHP :

FROM ubuntu:14.04

MAINTAINER Jean-François GAZET <theboss@jeffprod.com>

LABEL version="1.0"
LABEL description="Apache 2 / PHP"

RUN apt-get -y update && apt-get install -y \
apache2 \
php5 \
libapache2-mod-php5 \
php5-gd \
php5-json \
php5-sqlite \
php5-mysql \
php5-mcrypt \
mcrypt

# on veut une machine de dev qui affiche toutes les erreurs PHP
RUN sed -i -e 's/^error_reporting\s*=.*/error_reporting = E_ALL/' /etc/php5/apache2/php.ini
RUN sed -i -e 's/^display_errors\s*=.*/display_errors = On/' /etc/php5/apache2/php.ini

# commandes à exécuter au démarrage de l'instance de l'image
# ici on démarrera Apache
CMD ["/usr/sbin/apache2ctl","-DFOREGROUND"]

Créez le container en vous plaçant dans le même dossier que ce fichier Dockerfile et tapez :

docker build -t apache-php-dev .

Partagez cet article


A lire également Tous les articles