Dans le monde du développement logiciel moderne, la conteneurisation est devenue la pierre angulaire d'un déploiement efficace et d'une évolutivité. Docker facilite le regroupement d'applications et de leurs dépendances dans des conteneurs portables. Dans ce blog, nous vous guiderons dans la création d'une application PHP et MySQL multi-conteneurs à l'aide de Docker Compose.
Cohérence : exécutez votre application dans le même environnement à toutes les étapes de développement et de production.
Isolation : conservez les services comme PHP et MySQL dans des conteneurs séparés pour des configurations modulaires et maintenables.
Facilité de mise à l'échelle : ajoutez ou supprimez facilement des conteneurs à mesure que l'application se développe.
Votre répertoire de projet devrait ressembler à ceci :
project/ │ ├── php-app/ │ ├── Dockerfile │ └── index.php │ └── docker-compose.yml
Voici le fichier docker-compose.yml :
version: '3.8' services: php-app: build: ./php-app # Builds the PHP app Docker image from the ./php-app directory ports: - "8080:80" # Maps port 8080 on the host to port 80 in the container depends_on: - mysql # Ensures MySQL starts before the PHP app mysql: image: mysql:8.0 # Uses the official MySQL image ports: - "3306:3306" # Maps port 3306 on the host to port 3306 in the container environment: MYSQL_ROOT_PASSWORD: root # Root password for MySQL MYSQL_DATABASE: mydb # Initial database to create volumes: - mysql-data:/var/lib/mysql # Persists MySQL data in a named volume volumes: mysql-data: # Declares a named volume for MySQL data persistence
Le fichier index.php se connecte au conteneur MySQL :
<?php $servername = "mysql"; // Service name defined in docker-compose.yml $username = "root"; $password = "root"; $database = "mydb"; try { // Create connection $conn = new PDO("mysql:host=$servername;dbname=$database", $username, $password); // Set PDO error mode to exception $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); echo "Connected to MySQL successfully!"; } catch (PDOException $e) { echo "Connection failed: " . $e->getMessage(); } ?>
Le Dockerfile construit le conteneur PHP avec les dépendances requises :
# Use the official PHP image FROM php:8.2-apache # Install PDO MySQL extension RUN docker-php-ext-install pdo pdo_mysql # Set the working directory WORKDIR /var/www/html # Copy the application code COPY index.php . # Expose port 80 EXPOSE 80
Créer la structure du répertoire
Créer et démarrer les conteneurs Ouvrez un terminal dans le répertoire du projet et exécutez :
docker-compose up --build
Accédez à l'application PHP Visitez http://localhost:8080 dans votre navigateur. Si tout est correctement configuré, vous devriez voir :
Connected to MySQL successfully!
Utilisez un client MySQL ou MySQL Workbench.
Connectez-vous à localhost :3306 avec :
Nom d'utilisateur : root
Mot de passe : root
Vérifiez que la base de données mydb est créée.
Gestion des dépendances des services : depend_on garantit que MySQL démarre avant l'application PHP.
Persistance des données : le volume mysql-data stocke les données MySQL, évitant ainsi toute perte lors du redémarrage du conteneur.
Mappage des ports : accédez facilement aux services via les ports mappés sur la machine hôte.
Ajoutez plus de services comme Nginx ou Redis au fichier Compose.
Utilisez les fichiers .env pour gérer les configurations sensibles.
Faites évoluer les services à l’aide de l’option de mise à l’échelle de Docker Compose pour la mise à l’échelle horizontale.
Avec cette configuration, vous avez créé une application PHP et MySQL évolutive et modulaire à l'aide de Docker Compose. La conteneurisation simplifie la gestion de l'environnement et prépare votre application aux déploiements cloud. Que vous soyez débutant ou développeur chevronné, Docker est un outil indispensable au développement d'applications modernes.
Prêt à faire passer votre configuration au niveau supérieur ? Essayez de l'intégrer avec des pipelines CI/CD ou Kubernetes pour un environnement de production.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!