Pourquoi Docker Compose : Laravel + MySQL ?
Docker Compose est une outil puissant qui permet de définir et de gérer les applications multi-conteneurs en utilisant un seul fichier YAML. Dans le contexte du développement Laravel, il est particulièrement utile pour créer des environnements d'intégration locale qui simulent la production. Cela permet aux développeurs de travailler sur leurs projets sans se soucier des dépendances externes et de s'assurer que l'environnement de production est tout aussi cohérent.
Un cas concret serait le développement d'une application Laravel avec une base de données MySQL. Sans Docker Compose, il faudrait installer manuellement la version appropriée de PHP, Composer, Node.js, MySQL et toute autre dépendance requise. Avec Docker Compose, on peut tout cela en quelques commandes simples.
Prerequis
- Connaissance de base de Laravel et Symfony
- Connaissance des conteneurs Docker et Dockerfile
- Installation de Docker (version 20.10 ou ultérieure)
- Installation de Docker Compose (version 1.29 ou ultérieure)
Concepts fondamentaux
1. docker-compose.yml
Ce fichier est la configuration principale qui définit les services, la réseau et le volume pour votre application.
## docker-compose.yml
version: '3.8'
services:
app:
build: .
ports:
- "8000:8000"
volumes:
- .:/var/www/html
environment:
- APP_ENV=local
- DB_HOST=db
- DB_PORT=3306
- DB_DATABASE=laravel
- DB_USERNAME=root
- DB_PASSWORD=
db:
image: mysql:8.0
volumes:
- db_data:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=laravel
2. Dockerfile
Ce fichier est utilisé pour construire l'image du conteneur qui sera lancé.
## Dockerfile
FROM php:7.4-fpm
## Installation des dépendances système
RUN apt-get update && apt-get install -y \
libpng-dev \
zip \
unzip \
git \
curl
## Installer PHP extensions
RUN docker-php-ext-install pdo_mysql mbstring bcmath
## Installer Composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
## Copier les fichiers du projet dans le conteneur
WORKDIR /var/www/html
3. Création de la structure du projet
On crée une structure de base pour notre projet Laravel.
mkdir my-laravel-app
cd my-laravel-app
## Créer un nouveau projet Laravel
composer create-project --prefer-dist laravel/laravel .
Mise en pratique : projet fil rouge
Étape 1 : Configurer docker-compose.yml et Dockerfile
Comme montré dans les concepts fondamentaux, le docker-compose.yml et le Dockerfile sont déjà configurés.
Étape 2 : Créer la base de données MySQL
On exécute la commande suivante pour démarrer les services définis dans docker-compose.yml.
docker-compose up -d
Cela va télécharger les images nécessaires si elles ne sont pas déjà présentes et les démarrer en arrière-plan.
Étape 3 : Installer les dépendances de Laravel
On accède au conteneur PHP avec la commande suivante :
docker-compose exec app bash
Dans le shell du conteneur, on installe les dépendances de notre projet :
composer install
npm install
php artisan migrate
Étape 4 : Créer une migration et un modèle
On crée une migration pour la table tasks et un modèle correspondant.
## Créer une migration
php artisan make:migration create_tasks_table --create=tasks
## Editer la migration dans database/migrations
Étape 5 : Définir le modèle et les contrôleurs
On crée un modèle et des contrôleurs pour gérer les tâches.
## Créer un modèle
php artisan make:model Task
## Créer des contrôleurs pour les tâches
php artisan make:controller TaskController --resource
Étape 6 : Définir les routes
On ajoute des routes dans routes/web.php pour accéder aux contrôleurs.
// routes/web.php
Route::resource('tasks', 'TaskController');
Étape 7 : Créer la vue
On crée une vue pour afficher la liste des tâches.
## Créer les vues dans resources/views/tasks
touch resources/views/tasks/index.blade.php
Étape 8 : Tester l'application
On accède à notre application à partir de http://localhost:8000/tasks dans le navigateur pour vérifier que tout fonctionne correctement.
Erreurs frequentes et debugging
Erreur 1 : Connexion MySQL échoue
## Mauvais
$ docker-compose exec app php artisan migrate
## Correct
$ docker-compose exec db mysql -uroot -proot laravel
Erreur 2 : Composer install failed
## Mauvais
$ composer install
## Correct
$ rm -rf vendor
$ composer install
Pour aller plus loin
Utiliser Docker Secrets pour gérer les mots de passe : En utilisant Docker Secrets, on peut stocker des informations sensibles comme les mots de passe en dehors du fichier
docker-compose.yml.Ajouter des logs personnalisés : Ajouter des scripts pour suivre les journaux de vos applications pour une meilleure visibilité.
Utiliser Docker Swarm pour la gestion de clusters : Docker Swarm permet de gérer et d'échelonner facilement des applications à grande échelle.
Défi pratique
Créez un petit projet Laravel qui utilise le package GuzzleHttp pour faire des requêtes HTTP vers une API externe. Configurez le projet avec Docker Compose pour que tout fonctionne correctement en local.