Cet article met à votre disposition un starter kit PHP/FPM/Nginx/MYSQL dans Docker (Application de virtualisation via la gestion de conteneur). Cet starter kit à pour objectif de vous permettre de vous lancer très rapidement avec une configuration qui fonctionne pour vos projets.
Ce ‘starter kit’ docker permet d’initialiser très rapidement un environnement LAMP.
Il comprend :
- Nginx
- Php 7 FPM
- MySQL
- Phpmyadmin
- Redis
Pour débuter vous devez avoir Docker et Docker-compose qui fonctionnent sur votre machine :
Si ce n’est pas le cas, je vous invite à suivre les procédures suivantes :
- Docker : https://docs.docker.com/engine/installation/linux/ubuntulinux/
- Docker-Compose : https://docs.docker.com/compose/install/
Pour vérifier que vos installations sont ok, tapez docker-compose et vérifiez que l’application répond. Vous devriez obtenir quelque chose qui ressemble à ça :
Une fois ces installations fonctionnelles, vous pouvez faire un checkout du starter kit.
Installation:
Ok, tout fonctionne, donc checkout :
git clone https://github.com/tellaw/template-docker.git
Le kit de dev est donc sur votre poste… simple, non ?
Vous pouvez alors le lancer via la commande :
docker-compose up -d
La commande va télécharger les images, puis faire les configurations utiles.
Elle devrait se terminer par :
Voila, tout fonctionne, si vous pointez sur local.dev (pensez à l’ajouter dans votre fichier host avant), vous devriez voir apparaitre une page avec un message de test.
Pour stopper le kit de dev… très simple :
docker-compose stop
Attention : Ne pas confondre « docker-compose stop » et « docker-compose down ».
Le second stop bien vos conteneurs, mais il va également les détruire… Vi… c’est toujours agaçant comme erreur 🙂
Comment fonctionne ce kit de dev ?
1/ Nginx :
- Nginx va positionner ses logs dans le sous dossier logs/nginx du kit.
- Les sources se trouvent dans www/
- La configuration est modifiable dans config/nginx/ (vous pouvez y modifier le vhost)
nginx: image: nginx:stable volumes: - ./logs/nginx/:/var/log/nginx - ./config/nginx/:/etc/nginx/conf.d - ./www:/var/www/app/ links: - php:fpm ports: - 80:80
Enfin, Nginx ecoute sur le port 80.
2/ PHP Fpm
- PHP dispose d’une référence au container mysql par l’alias : webstack_mysql
- PHP référence aussi le serveur REDIS via l’alias : webstack_redis
- Vous pouvez surcharger la configuration dans config/php
- Le dossier de log est à modifier suivant l’endroit ou votre application va loguer.
php: build: containers/container-php links: - db:webstack_mysql - redis:webstack_redis volumes: - ./logs/app:/var/www/app/var/logs - ./config/php:/usr/local/etc/php/conf.d - ./www:/var/www/app/
3/ MySQL & PHPMyAdmin
- Vous pouvez surcharger la configuration de Mysql dans ‘config/mysql/’
- Les fichiers de données se trouvent dans ‘data/mysql’. Il est important de sortir ces fichier du container, pour ne pas perdre vos données en cas de re-construction du container.
- PHPMyAdmin dispose du mot de passe ‘root’ pour le compte ‘root’. (oui, pas secure… mais en dev :-))
- Enfin, PHPMyAdmin ecoute sur ‘local.dev:8080’
db: image: mysql:5.7 ports: - 3306:3306 volumes: - ./config/mysql:/etc/mysql/conf.d:ro - ./data/mysql:/var/lib/mysql environment: - MYSQL_ROOT_PASSWORD=root phpmyadmin: image: phpmyadmin/phpmyadmin links: - db:db ports: - 8080:80 environment: PMA_USER : root PMA_PASSWORD : root
ATTENTION :
Il est possible que vous obteniez l’erreur :
chown: changing ownership of '/var/lib/mysql/': Operation not permitted
Cette erreur vient du montage du dossier de base vers la machine hôte. Je n’ai pas encore trouvé la correction, qui risque de vous obliger à supprimer la ligne suivante pour conserver dans le conteneur les fichiers de données de MySQL.
- ./data/mysql:/var/lib/mysql
Vous pouvez vous connecter au container PHP si besoin (pour lancer une ligne de commande) :
docker exec -it <mon_container> bash
Dans notre cas le container se nomme :
docker ps
donc dans notre cas :
docker exec -it templatephp_php_1 bash
Voila, vous devriez avoir tout en main pour travailler.
Ah si… le lien vers mon compte github :
https://github.com/tellaw/template-docker
Bon courage 🙂