23 septembre 2015 · 4 min de lecture
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.
Entrons directement dans le vif du sujet. Je veux par exemple :
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 questionrun
: 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]
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.
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 :
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 .