DevOps

Conteneurisation Laravel avec Docker Compose

La mise en place d’une conteneurisation pour une application Laravel à l’aide de Docker Compose est une approche moderne et efficace qui offre une gestion simplifiée de l’environnement de développement et de déploiement. Docker Compose permet de définir et de gérer plusieurs conteneurs Docker comme une application unique, ce qui facilite la configuration, la gestion des dépendances et la reproductibilité de l’environnement.

Pour créer une configuration Docker Compose pour une application Laravel, plusieurs étapes doivent être suivies. Tout d’abord, il est essentiel de créer un fichier docker-compose.yml à la racine du projet Laravel. Ce fichier sera le point central de la configuration de l’environnement de développement. Dans ce fichier, vous spécifierez les services nécessaires à votre application, tels que le serveur web, la base de données, et éventuellement d’autres services comme Redis ou Elasticsearch.

Prenons un exemple concret de configuration Docker Compose pour une application Laravel avec un serveur web Nginx et une base de données MySQL. Le fichier docker-compose.yml pourrait ressembler à ceci :

yaml
version: '3' services: web: image: nginx:latest container_name: monapp-web volumes: - ./src:/var/www/html ports: - "8080:80" networks: - app-network app: build: context: . dockerfile: Dockerfile container_name: monapp-app volumes: - ./src:/var/www/html depends_on: - db networks: - app-network db: image: mysql:latest container_name: monapp-db environment: MYSQL_DATABASE: monapp MYSQL_ROOT_PASSWORD: root MYSQL_USER: user MYSQL_PASSWORD: password ports: - "3306:3306" networks: - app-network networks: app-network: driver: bridge

Dans cet exemple, trois services sont définis : web pour le serveur web Nginx, app pour l’application Laravel, et db pour la base de données MySQL. Les volumes sont utilisés pour monter le code source de l’application Laravel dans les conteneurs correspondants, assurant ainsi la synchronisation entre l’environnement local et les conteneurs.

Le service app fait référence à un fichier Dockerfile, qui décrit comment construire l’image Docker pour l’application Laravel. Un exemple de Dockerfile pour une application Laravel pourrait ressembler à ceci :

Dockerfile
FROM php:7.4-fpm WORKDIR /var/www/html RUN apt-get update && apt-get install -y \ git \ unzip \ libzip-dev \ && docker-php-ext-install zip pdo_mysql RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer COPY . . RUN composer install --no-interaction CMD ["php", "artisan", "serve", "--host=0.0.0.0", "--port=9000"]

Ce Dockerfile utilise l’image officielle PHP 7.4-fpm, installe les dépendances nécessaires, copie le code source de l’application, exécute la commande Composer pour installer les dépendances PHP, et définit la commande par défaut pour démarrer le serveur Laravel.

Pour exécuter l’application Laravel avec Docker Compose, vous devez exécuter la commande suivante dans le répertoire où se trouve le fichier docker-compose.yml :

bash
docker-compose up -d

Cette commande construira les images nécessaires, créera et démarrera les conteneurs définis dans le fichier docker-compose.yml. L’option -d permet d’exécuter les conteneurs en arrière-plan.

Une fois les conteneurs en cours d’exécution, vous pourrez accéder à votre application Laravel à l’adresse http://localhost:8080 dans cet exemple, où le serveur web Nginx écoute sur le port 8080. Vous pourrez également accéder à l’interface d’administration de la base de données MySQL à l’adresse http://localhost:3306.

La configuration présentée ici est un exemple de base et peut être adaptée en fonction des besoins spécifiques de votre application. Vous pouvez ajouter d’autres services, ajuster les volumes, les réseaux, ou personnaliser les images Docker en fonction des exigences de votre projet.

En résumé, l’utilisation de Docker Compose pour la conteneurisation d’une application Laravel offre un moyen efficace de gérer l’environnement de développement et de déploiement. Cela facilite la collaboration entre les membres de l’équipe, garantit la reproductibilité de l’environnement, et simplifie le déploiement de l’application sur différentes plates-formes.

Plus de connaissances

La mise en place d’une infrastructure conteneurisée pour une application Laravel à l’aide de Docker Compose offre de nombreux avantages en termes de gestion de l’environnement, de déploiement et de collaboration au sein d’une équipe de développement. Explorons plus en détail certains aspects clés de cette approche.

Structuration du fichier docker-compose.yml

Le fichier docker-compose.yml joue un rôle crucial dans la définition de l’infrastructure conteneurisée. Analysons plus en détail les éléments de la configuration dans l’exemple précédent :

  1. Services :

    • Chaque service (web, app, db) représente une composante de l’application.
    • Le service web utilise l’image Nginx pour servir les fichiers statiques et rediriger les requêtes vers le service app.
    • Le service app est construit à partir d’un Dockerfile personnalisé, contenant les dépendances nécessaires pour exécuter l’application Laravel.
    • Le service db utilise l’image MySQL et définit les paramètres de configuration pour la base de données.
  2. Volumes :

    • Les volumes sont utilisés pour monter le répertoire du code source de l’application dans les conteneurs correspondants. Cela permet des modifications en temps réel dans l’environnement de développement sans avoir à reconstruire les images Docker.
  3. Réseaux :

    • Un réseau personnalisé (app-network) est défini pour faciliter la communication entre les différents services. Cela garantit une isolation efficace et permet aux services de se référencer les uns les autres par leur nom de service.

Dockerfile pour l’application Laravel

Le fichier Dockerfile décrit comment construire l’image Docker pour le service app. Dans l’exemple fourni, voici quelques points clés à noter :

  1. Image de base :

    • L’image de base est php:7.4-fpm, une image officielle de PHP adaptée pour les applications web.
  2. Installation des dépendances :

    • Les dépendances nécessaires, telles que Git, Unzip, et les extensions PHP (zip, pdo_mysql), sont installées.
  3. Installation de Composer :

    • Composer, le gestionnaire de dépendances PHP, est installé de manière à pouvoir exécuter les commandes Composer nécessaires pour installer les dépendances de l’application Laravel.
  4. Copie du code source :

    • Le code source de l’application est copié dans le conteneur, permettant ainsi à Docker de construire une image avec les fichiers de l’application.
  5. Commande par défaut :

    • La commande par défaut spécifie comment lancer l’application. Dans cet exemple, le serveur web de développement intégré de Laravel est utilisé.

Démarrage de l’application avec Docker Compose

Lorsque vous exécutez la commande docker-compose up -d, Docker Compose effectue plusieurs actions essentielles :

  1. Construction des images :

    • Si les images spécifiées dans le fichier docker-compose.yml ne sont pas déjà présentes, Docker Compose les construira en utilisant les instructions fournies dans les Dockerfiles.
  2. Création des conteneurs :

    • Docker Compose crée des conteneurs individuels pour chaque service, en utilisant les images construites ou téléchargées.
  3. Montage des volumes :

    • Les volumes spécifiés dans le fichier docker-compose.yml sont montés, assurant ainsi la synchronisation du code source entre l’environnement local et les conteneurs.
  4. Lancement des services :

    • Les services spécifiés dans le fichier docker-compose.yml sont démarrés, et les conteneurs associés s’exécutent en arrière-plan.

Avantages de l’approche Docker Compose pour Laravel

  1. Portabilité de l’environnement :

    • Grâce à Docker Compose, l’environnement de développement est portable. Les mêmes images Docker peuvent être utilisées sur différentes machines, garantissant une cohérence entre les environnements de développement.
  2. Isolation des services :

    • Chaque service est isolé dans son propre conteneur, facilitant la gestion des dépendances et évitant les conflits potentiels entre les composants de l’application.
  3. Reproductibilité :

    • La configuration définie dans le fichier docker-compose.yml assure la reproductibilité de l’environnement. Il suffit de partager ce fichier avec les membres de l’équipe pour qu’ils puissent déployer l’application avec la même configuration.
  4. Facilité de déploiement :

    • Lors du déploiement en production, la transition de l’environnement de développement à l’environnement de production est simplifiée grâce à l’utilisation de conteneurs. Les mêmes images Docker peuvent être déployées sur différentes infrastructures.

En conclusion, l’utilisation de Docker Compose pour Laravel simplifie significativement la gestion de l’environnement de développement, renforce la cohérence entre les membres de l’équipe, et facilite le déploiement de l’application sur différentes plates-formes. Cette approche moderne s’inscrit dans la tendance DevOps en favorisant la collaboration entre les équipes de développement et d’exploitation, tout en assurant une infrastructure reproductible et scalable.

Bouton retour en haut de la page