[05/07/2016] : màj du docker-compose (suppression conteneur code+alias) + màj schéma + ajout PHPMyAdmin + simplification toolbox.
Un grand merci à tous ceux qui m’ont fait des retours ♥
TL;DR : Répo Github du projet
Une stack Docker pour votre application Symfony
Je développe des applications web depuis quelques temps sur une stack Vagrant que j’ai un peu pimpé. Bosser sur une VM est vraiment plus agréable/malléable qu’un WAMP. Cependant, cette solution si miraculeuse soit-elle a aussi ses inconvénients.
Tout d’abord, le temps d’initialisation de la box est particulièrement long. Deuxième argument, si
on se plante on est obligé de tout réinstaller (ex: récemment j’ai oublié de mettre un point avant
le slash de cette commande… sudo rm -rf /
). Et enfin, si on souhaite instancier plusieurs
machines sur une seule, le PC hôte se retrouve rapidement sur les rotules.
Ce sont donc ces trois points qui m’ont motivé à migrer mon poste de dev sur Docker (et puis si autant de monde en parle, c’est sans doutes que ça vaut le détour !).
Je vais volontairement passer sous silence l’étape de présentation de Docker. Il y a plein d’articles/conférences à ce sujet sur la toile. Voici une conférence que j’ai bien aimé à ce sujet : Docker de “Zéro” à “Héros” par l’excellent Nicolas DE LOOF (qui anime aussi la web série Quoi d’neuf Docker ?).
Un conteneur pour les gouverner tous ?
Lors de mes premières expériences avec Docker, j’étais parti sur un méga-conteneur qui portait PHP, Apache, MySQL… tout ce qui est nécessaire pour faire tourner une application web. Et puis j’ai vite lâché l’affaire car je ne voyais pas la plus-value de cet outil comparé à ma vagrant. (ma première expérience avec Docker)
1 application (process) = 1 conteneur
A l’occasion du 3e anniversaire de Docker, j’ai vraiment vu l’intérêt de cet outil. Sans doutes, parce que le TP était plus pertinent que bon nombre d’articles sur la toile. Il faut donc lancer un process par conteneur. Le tout se fera avec docker-compose, qui jouera le rôle de chef d’orchestre de tous mes conteneurs.
Voici l’objectif vers lequel je souhaite tendre :
Détail des conteneurs :
- NGINX : le serveur web ;
- PHP-FPM : le service qui exécutera le code PHP (PHP7 s’il vous plait !) ;
- Application : un conteneur qui portera le code symfony ;
- MySQL : Un SGBDR que l’on ne présente plus ;
- Redis : Un SGBD clé-valeur avec lequel j’aime bien jouer en ce moment ;
- ELK : Le trio de choc : Elasticsearch - Logstash - Kibana… parcequ’il y a mieux que les
| tail
/| grep
pour visualiser ses logs !
Nota : Je suis parti du travail de Vincent COMPOSIEUX qui est plutôt propre pour ensuite l’adapter à mes besoins.
Solution
La 22 et 23e ligne du fichier (services.php.volumes) indiquent qu’il y a un mapping de volumes. Il vous faudra donc indiquer le chemin (absolu ou relatif) vers l’application Symfony. Le répertoire de logs se construiera tout seul comme un grand.
2 composantes du docker-compose n’étant pas des images, il faut donc construire les Dockerfiles.
Il faut garder à l’esprit que les images se doivent d’être les plus petites possibles. Il ne faut
installer que ce qui est nécessaire (le apt-get clean est
implicite sur les debian).
Une fois que tout est prêt, un petit docker-compose build
permettra de construire les différentes
images. Et un docker-compose up
lancera le tout.
Vous pouvez vérifier avec la commande docker-compose ps (tout doit-être à Up) :
Maintenant, vous allez devoir retrouver l’IP associée au conteneur NGINX et modifier votre fichier hosts :
Vous devrez aussi modifier le fichier parameters.yml de votre application :
Et voilà !
Accédez à votre application sur symfony.dev pour voir votre application et sur symfony.dev:81 pour consulter les logs avec Kibana.
Le code source est sur mon répo GitHub : https://github.com/maxpou/docker-symfony
Et je veux mon PHPMyAdmin moi !
C’est très simple, il suffit d’ajouter ceci à votre fichier docker-compose :
Accédez ensuite à l’interface web via : symfony.dev:8080
Boîte à outils
Voici quelques commandes qui peuvent-être utiles :
About the author
Hey, I'm Maxence Poutord, a passionate software engineer. In my day-to-day job, I'm working as a senior front-end engineer at Orderfox. When I'm not working, you can find me travelling the world or cooking.
Follow me on BlueskyRecommended posts
Thomas Harris is a fraudulent YouTuber who uses fake crypto tutorials to spread malware. He artificially inflates his channel's popularity and promotes a malicious script that downloads harmful files and steals crypto. This scam, powered by AI-generated content, highlights the growing sophistication of online threats.
I've been maintaining a massive Vue.js codebase for the last 3 years. Here are 9 lessons I've learned along the way.