Symfony Docker container

Pour faire tourner une application Symfony, vous avez besoin au minimum :

  • D'un serveur Web : Nginx, Apache, built-in PHP
  • D'un serveur PHP : >= PHP 5.x, PHP FPM, HHVM
  • Une base de données (optionnel)
  • Et un peu de vitriol

OK, mais j'ai déjà tout ça sur ma machine.

Certes, mais avez-vous la même version de PHP que vos équipiers ? Et même si l'application tourne correctement sur votre machine, pourriez-vous garantir qu'elle fonctionnera parfaitement en environnement de production ?

La compatibilité est un problème crucial à prendre en considération dès les premiers développements de votre application !
Pour cela, je vous propose un Dockerfile orchestrant le serveur Web, le serveur PHP et même optionnellement un SGBD (tadaaaaaaaa).

Installation

Tout d'abord, vous devez vous familiariser avec Docker, pièce maîtresse de cet environnement. Ça tombe bien, j'ai déjà rédigé un article à ce propos !

Le container Docker que je vous propose est hébergé sur le hub Docker : https://hub.docker.com/r/vincentchalamon/symfony/

Maintenant que vous savez tout sur Docker, il ne vous reste plus qu’à monter ce container ☺.

Euh…

Une simple commande pour les gouverner tous, voyons !!

docker run -d -P vincentchalamon/symfony  

Ah ben oui, j’allais le dire justement ☺

Par défaut, ce container expose le port 80, libre à vous de le mapper avec un autre port :

docker run -d -p 8888:80 vincentchalamon/symfony  

Utilisation

C'est bien beau tout ça, mais en quoi cela répond-t'il à la problématique de compatibilité pré-citée ?

Tout simplement grâce aux tags. Ce container vous propose plusieurs tags Docker en fonction de la version de Debian et de PHP désirée :

  • Wheezy PHP 5.4 : vincentchalamon/symfony:wheezy-php54
  • Wheezy PHP 5.5 : vincentchalamon/symfony:wheezy-php55
  • Jessie PHP 5.6 : vincentchalamon/symfony:jessie:php56

Ah, mais alors je peux directement créer mon environnement de travail compatible avec la production ? ☺

C'est tout à fait ça. Et si vous ne trouvez pas votre environnement, je vous invite à m'envoyer une PullRequest : https://github.com/vincentchalamon/docker-symfony

Base de données

Bah oui, et la base de données dans tout ça ?

Il est tout à fait possible d'utiliser une base de données MySQL, Postgre, Sqlite, etc… selon vos envies. C'est pour cette raison qu'aucun système n'est intégré nativement dans ce container : à vous de brancher celui qui vous plaît.

Il est très facile de brancher un SGBD grâce à docker compose. Créez le fichier docker-compose.yml à la racine de votre projet, et renseignez-le comme suit :

web:  
    image: vincentchalamon/symfony
    volumes:
        - .:/var/www
    net: "host"
    tty: true

mysql:  
    image: mysql
    net: "host"
    environment:
        MYSQL_USER: root
        MYSQL_ALLOW_EMPTY_PASSWORD: yes

Et voilà, votre environnement de travail est prêt et accessible pour votre projet Symfony.

Attention : cet environnement de travail n'est pas destiné à être utilisé en production !!!