Docker et PHP : conteneurisation d'applications — guide complet

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Docker et PHP : guide complet pour la conteneurisation d'applications

Le développement web moderne est impensable sans la conteneurisation. Docker est devenu le standard de facto pour empaqueter, livrer et exécuter des applications. Pour les développeurs PHP, l'utilisation de Docker résout de nombreux problèmes : de l'incompatibilité des versions PHP aux difficultés de configuration d'environnement sur différentes machines. Dans cet article, nous allons voir comment conteneuriser une application PHP à partir de zéro en utilisant Docker et docker-compose.



1. Bases de Docker pour le développeur PHP

Docker est une plateforme de développement, de livraison et d'exécution d'applications dans des environnements isolés (conteneurs). Chaque conteneur contient tout le nécessaire au fonctionnement : code, bibliothèques, utilitaires système et configurations. Pour PHP, c'est particulièrement pertinent car l'application dépend souvent d'une version spécifique de l'interpréteur, d'extensions (par exemple, pdo_mysql, redis, gd) et d'un serveur web (Apache ou Nginx).



Composants principaux de Docker :

  • Dockerfile — fichier texte avec des instructions pour construire une image.
  • Image — modèle immuable pour créer des conteneurs.
  • Conteneur — instance en cours d'exécution d'une image.
  • docker-compose — outil pour définir et exécuter des applications multi-conteneurs.


2. Création d'un Dockerfile pour une application PHP

Commençons par un exemple simple. Supposons que nous ayons une application PHP basée sur les frameworks Laravel ou Symfony. Créons un fichier Dockerfile à la racine du projet :



# Utilisation de l'image officielle PHP 8.2 avec FPMFROM php:8.2-fpm-alpine

# Définition du répertoire de travailWORKDIR /var/www/html

# Installation des dépendances système et des extensions PHPRUN apk add --no-cache \ git \ unzip \ libpng-dev \ libjpeg-turbo-dev \ freetype-dev \ && docker-php-ext-configure gd --with-freetype --with-jpeg \ && docker-php-ext-install -j$(nproc) \ pdo_mysql \ mbstring \ exif \ pcntl \ bcmath \ gd

# Installation de ComposerCOPY --from=composer:latest /usr/bin/composer /usr/bin/composer

# Copie des fichiers du projetCOPY . .

# Configuration des droits (pour Laravel/Symfony)RUN chown -R www-data:www-data /var/www/html \ && chmod -R 755 storage bootstrap/cache

# Ouverture du port 9000 (PHP-FPM)EXPOSE 9000

# Commande de démarrageCMD ["php-fpm"]


Ce Dockerfile effectue les opérations suivantes :

  1. Utilise l'image légère php:8.2-fpm-alpine.
  2. Installe les extensions nécessaires : pdo_mysql, gd, mbstring et autres.
  3. Copie Composer depuis l'image officielle.
  4. Transfère le code de l'application.
  5. Configure les droits d'accès pour le cache et les logs.


3. Configuration de docker-compose : PHP + Nginx + MySQL

Pour un projet réel, nous aurons besoin d'un serveur web et d'une base de données. Créons un fichier docker-compose.yml :



version: '3.8'

services: # Service PHP-FPM php: build: context: . dockerfile: Dockerfile container_name: app_php volumes: - .:/var/www/html networks: - app-network

# Serveur web Nginx nginx: image: nginx:alpine container_name: app_nginx ports: - "8080:80" volumes: - .:/var/www/html - ./nginx/default.conf:/etc/nginx/conf.d/default.conf depends_on: - php networks: - app-network

# Base de données MySQL mysql: image: mysql:8.0 container_name: app_mysql environment: MYSQL_ROOT_PASSWORD: root_password MYSQL_DATABASE: app_db MYSQL_USER: app_user MYSQL_PASSWORD: app_password ports: - "3306:3306" volumes: - mysql_data:/var/lib/mysql networks: -

Blogs

Book Recommendations