Photo by Hans-Peter Gauster / Unsplash

Création d'une Image Docker pour une Application Symfony avec Supervor

Tutoriels 29 janv. 2024

Dans ce tutoriel, nous allons voir comment créer une image Docker pour une application Symfony, intégrant à la fois un serveur web Apache2 et un service de bus de messages. Nous utiliserons Supervisor pour gérer ces services.


GitHub - symfony/symfony: The Symfony PHP framework
The Symfony PHP framework. Contribute to symfony/symfony development by creating an account on GitHub.

Pourquoi regrouper Apache et le Worker dans le même conteneur ?

Cette notion peut être contreversé mais regrouper Apache et le service de bus de messages dans le même conteneur Docker offre plusieurs avantages :

  1. Simplicité de déploiement : Un seul conteneur à gérer pour l'ensemble de l'application simplifie le processus de déploiement.
  2. Cohérence des environnements : Les environnements de développement, de test et de production sont plus uniformes, ce qui réduit les chances d'erreurs dues aux différences d'environnement.
  3. Gestion centralisée : Avec Supervisor, la gestion et le suivi des deux services sont centralisés, facilitant leur surveillance et leur maintenance.

Cependant, il est important de noter que cette approche peut ne pas être idéale pour des déploiements à grande échelle ou pour des applications nécessitant une haute disponibilité. Dans ces cas, une architecture de services distribués pourrait être préférable.

Prérequis

  • Connaissances de base en Docker et Symfony.
  • Docker installé sur votre machine.
  • Une application Symfony existante.

Étape 1 : Préparation du Dockerfile

Le Dockerfile est essentiel pour automatiser la création de votre image Docker. Voici un exemple adapté à notre besoin :Dockerfile

# Utiliser une image PHP avec Apache
FROM php:7.4-apache

# Mettre à jour les paquets et installer Supervisor
RUN apt-get update && apt-get install -y supervisor

# Copier les fichiers de l'application dans le conteneur
COPY . /var/www/html

# Installer les extensions PHP nécessaires
RUN docker-php-ext-install pdo pdo_pgsql

# Activer le mod_rewrite pour Apache
RUN a2enmod rewrite

# Copier le fichier supervisord.conf dans le conteneur
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf

# Exposer le port 80
EXPOSE 80

# Commande pour lancer Supervisor
CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf"]

Étape 2 : Configuration de Supervisor

Créez un fichier supervisord.conf pour gérer Apache et le service de bus de messages :

[supervisord]
nodaemon=true

[program:apache2]
command=/usr/sbin/apache2ctl -D FOREGROUND

[program:symfony-worker]
command=php /var/www/html/bin/console messenger:consume async
autostart=true
autorestart=true

Étape 3 : Construction de l'Image Docker et Exécution

Construisez l'image avec :

docker build -t ma-application-symfony .

Puis lancez le conteneur :

docker run -d -p 80:80 ma-application-symfony

Conclusion

Ce tutoriel vous a guidé dans la création d'une image Docker pour une application Symfony avec Apache2 et un service de bus de messages sous la supervision de Supervisor. Cette méthode offre une gestion simplifiée et une cohérence accrue pour vos applications.

Mots clés