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

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 : conteneurisation d'applications de A à Z



La conteneurisation d'applications PHP avec Docker est devenue la norme du développement web moderne. Que vous créiez une simple page d'atterrissage ou une application d'entreprise complexe, Docker assure l'uniformité de l'environnement à toutes les étapes : du développement local à la production. Dans cet article, nous allons parcourir toutes les étapes de création d'une infrastructure Docker pour une application PHP — du Dockerfile de base à une pile complète avec Nginx et MySQL.



Pourquoi Docker est important pour un développeur PHP



Le développement PHP traditionnel est souvent confronté au problème "ça marche sur ma machine". Différentes versions de PHP, extensions, configurations de serveur — tout cela entraîne des conflits. Docker résout ce problème une fois pour toutes :



  • Isolation de l'environnement — chaque application possède son propre ensemble de dépendances
  • Reproductibilité — environnement identique sur toutes les machines
  • Évolutivité — ajout facile de nouveaux services (Redis, Elasticsearch)
  • Intégration CI/CD — les conteneurs sont parfaits pour les pipelines


Passons de la théorie à la pratique et créons un environnement Docker complet pour une application PHP.



Création d'un Dockerfile de base pour PHP



Commençons par l'essentiel — le Dockerfile. C'est l'instruction pour construire l'image de votre application PHP. Voici la configuration optimale pour une application prête pour la production :



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

# Installation des dépendances systèmeRUN apk add --no-cache \ git \ unzip \ libpq-dev \ libzip-dev \ && docker-php-ext-install \ pdo_mysql \ zip \ opcache

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

# Configuration d'OPcache pour la productionRUN { \ echo 'opcache.memory_consumption=128'; \ echo 'opcache.interned_strings_buffer=8'; \ echo 'opcache.max_accelerated_files=4000'; \ echo 'opcache.revalidate_freq=2'; \ echo 'opcache.fast_shutdown=1'; \ echo 'opcache.enable_cli=1'; \} > /usr/local/etc/php/conf.d/opcache.ini

# Copie des fichiers de l'applicationWORKDIR /var/www/htmlCOPY . .

# Définition des permissionsRUN chown -R www-data:www-data /var/www/html \ && chmod -R 755 storage bootstrap/cache

# Lancement de PHP-FPMCMD ["php-fpm"]

EXPOSE 9000


Ce Dockerfile utilise Alpine Linux — une image minimale qui réduit considérablement la taille du conteneur final. Nous installons uniquement les extensions nécessaires : pdo_mysql pour travailler avec la base de données et zip pour Composer.



Construction et exécution du conteneur



# Construction de l'imagedocker build -t my-php-app .

# Exécution du conteneurdocker run -d -p 9000:9000 --name php-app my-php-app


Pile complète avec Nginx et MySQL via docker-compose



Une application réelle est rarement composée d'un seul conteneur PHP. Nous avons besoin d'un serveur web et d'une base de données. C'est là que docker-compose entre en jeu — un outil d'orchestration de plusieurs conteneurs.



Créons le fichier docker-compose.yml :



version: '3.8'

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

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

# Base de données MySQL db: image: mysql:8.0 container_name: php-mysql ports: - "3306:3306" environment: MYSQL_ROOT_PASSWORD: root_password MYSQL_DATABASE: app_database MYSQL_USER: app_user MYSQL_

Blogs

Book Recommendations