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 :

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 :

docker-compose

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 :

docker-start

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

docker-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 🙂

docker-down

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

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 🙂