Créer une image docker avec Symfony 4

Gaotian
Gaotian
Jan 1, 2019 · 3 min read

Lors du précédent chapitre, nous avons commencé à utiliser docker-compose pour pouvoir changer à la volée notre code PHP sans avoir à sans cesse re-construire notre image : https://medium.com/@Gaotian/premi%C3%A8re-utilisation-de-docker-compose-296fe9690e70.

Je vous propose à présent de nous attaquer à quelque chose d’un peu plus imposant qu’un simple fichier php : le code d’une application Symfony 4.

Lors de ce chapitre nous utiliserons un tout nouveau projet et reprendrons le code de zéro.

Pré-requis

  • Composer
  • Docker

Création du projet Symfony

Tout d’abord nous générons le squelette de l’application Symfony.

Nous utilisons composer pour créer le nouveau projet : https://symfony.com/doc/current/best_practices/creating-the-project.html

Création de l’image docker

Nous reprenons les étapes vues dans les chapitres précédents:

  • ajout de Dockerfile pour l’image de l’application php
  • ajout de docker-compose.yml
  • ajout d’un Makefile

Pour commencer, nous créons un dossier docker dans lequel nous ajoutons un fichier Dockerfile avec comme contenu :

A priori, rien d’étonnant, puisqu’il s’agit exactement du même code que lors du chapitre précédent.

Pour docker-compose, nous reprenons également le même code, nous changeons simplement le nom de l’image et nous choisissons le port 81 plutôt que 82 par pur caprice. Nous créons ce fichier à la racine de notre application.

Le Makefile est identique à l’exception du port 81 qui remplace là encore le 82. Lui aussi se trouve à la racine du projet.

Lancement de l’application

Pour lancer l’application, nous utilisons sans surprise notre commande :

Si nous nous rendons à l’adresse http://0.0.0.0:81/ nous voyons la page d’accueil de Symfony.

Ajout de code Symfony

Nous allons maintenant ajouter notre propre code et une nouvelle page.

Nous créons un contrôleur BaseController.php que nous ajoutons dans le dossier src/Controller

Nous installons le bundle permettant d’ajout les routes en commentaire du contrôleur:

En nous rendant sur http://0.0.0.0:81/, nous voyons que nous avons remplacé la base d’accueil par défaut par un texte JSON rudimentaire.

Nous allons maintenant installer Twig :

Nous ajoutons une view index.html.twig dans un dossier /templates que nous plaçons à la racine :

Nous l’appelons dans le contrôleur :

Nous ajoutons une seconde page pour nous assurer que tout fonctionne correctement, d’abord en ajoutant dans le contrôleur en dessous du code précédent :

Puis en ajoutant une nouvelle vue dans /templates:

Test manuel de notre application

Est-ce que tout fonctionne comme convenu?

Si nous nous rendons sur la page : http://0.0.0.0:81, nous arrivons bel et bien sur notre view index.html.twig.

Si nous nous rendons sur une page à propos, par exemple http://0.0.0.0:81/apropos/equipe, nous nous rendons sur la bonne page avec le paramètre correctement utilisé.

Certes nous n’avons pas de tests automatisés ou de base de données liées mais nous avons une application symfony 4 basique qui fonctionne avec docker-compose.

Et quand nous en changeons le code, le résultat est visible aussitôt après un simple rechargement sans avoir à reconstruire nos images.

Code final

Le code est disponible sur github : https://github.com/gdarquie/symfony-docker

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch

Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore

Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store