Conteneuriser une application PHP avec Docker
Créer une image Docker pour PHP et Nginx, puis l’orchestrer avec Docker Compose.
Conteneuriser une application PHP avec Docker est une leçon PHP Academy gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage PHP Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours PHP Academy comprend 4 leçons au total.
Pourquoi Docker pour PHP ?
Docker regroupe votre application et ses dépendances dans une image de conteneur portable. La même image s’exécute de manière identique en développement, en intégration continue et en production, ce qui élimine les problèmes du type « ça fonctionne sur ma machine ».
Dockerfile PHP de base
Un Dockerfile minimal pour une application PHP + Nginx.
# Dockerfile
FROM php:8.3-fpm-alpine
# Install extensions
RUN docker-php-ext-install pdo pdo_mysql opcache
# Install Composer
COPY --from=composer:2 /usr/bin/composer /usr/bin/composer
WORKDIR /app
COPY composer.json composer.lock ./
RUN composer install --no-dev --optimize-autoloader
COPY . .
RUN chown -R www-data:www-data /app/storage /app/bootstrap/cacheConstruction en plusieurs étapes
Utilisez des constructions en plusieurs étapes pour garder une image finale légère : installez les outils de compilation dans une étape, puis copiez uniquement les artefacts dans l’image finale.
# Stage 1: builder
FROM composer:2 AS builder
WORKDIR /app
COPY composer.json composer.lock ./
RUN composer install --no-dev --optimize-autoloader
# Stage 2: runtime
FROM php:8.3-fpm-alpine
WORKDIR /app
COPY --from=builder /app/vendor ./vendor
COPY . .docker-compose.yml
Orchestrez plusieurs services (PHP-FPM, Nginx, MySQL, Redis) avec Docker Compose.
# docker-compose.yml
services:
app:
build: .
volumes:
- .:/app
nginx:
image: nginx:alpine
ports: ["80:80"]
volumes:
- .:/app
- ./docker/nginx.conf:/etc/nginx/conf.d/default.conf
mysql:
image: mysql:8
environment:
MYSQL_DATABASE: myapp
MYSQL_ROOT_PASSWORD: secret
volumes:
- db_data:/var/lib/mysql
redis:
image: redis:alpine
volumes:
db_data:Configuration du conteneur Nginx
Montez une configuration Nginx personnalisée pour transmettre les requêtes PHP-FPM.
# docker/nginx.conf
server {
listen 80;
root /app/public;
index index.php;
location / { try_files $uri /index.php?$query_string; }
location ~ \.php$ {
fastcgi_pass app:9000; # service name from docker-compose
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
}Variables d’environnement
Transmettez les variables d’environnement aux conteneurs — n’intégrez jamais de secrets dans les images.
# docker-compose.yml:
services:
app:
env_file: .env
# or explicit:
environment:
- APP_ENV=production
- DB_HOST=mysqlCommandes Artisan de Laravel
Exécutez les commandes Artisan à l’intérieur du conteneur.
$ docker compose exec app php artisan migrate
$ docker compose exec app php artisan config:cache
$ docker compose exec app php artisan queue:workVérifications d’état
Ajoutez des vérifications d’état afin que les orchestrateurs, comme Kubernetes et ECS, sachent quand le conteneur est prêt.
# Dockerfile:
HEALTHCHECK --interval=30s --timeout=5s \
CMD curl -f http://localhost/health || exit 1Création et publication d’images
Créez et publiez votre image dans un registre (Docker Hub, ECR, GHCR).
$ docker build -t myorg/myapp:1.0.0 .
$ docker push myorg/myapp:1.0.0Déploiement Kubernetes
Dans Kubernetes, définissez une ressource Deployment et une ressource Service à l’aide de votre image. Déployez les nouvelles versions avec kubectl set image ou mettez à jour le YAML, puis appliquez-le.
Renforcement de la sécurité en production
Bonnes pratiques Docker en production : utilisez un utilisateur sans privilèges root, un système de fichiers racine en lecture seule et une image de base minimale (Alpine), n’incluez aucune dépendance de développement, fixez les balises d’image et recherchez les CVE avec docker scout.
Résumé
Créez un Dockerfile pour PHP-FPM + Composer. Utilisez docker-compose pour le développement local avec des services Nginx, MySQL et Redis. En production, utilisez des constructions en plusieurs étapes, injectez les variables d’environnement et exécutez le tout avec Kubernetes ou ECS.
Vérification rapide
Quel est le principal avantage des constructions Docker en plusieurs étapes ?
Questions Fréquemment Posées
La leçon « Conteneuriser une application PHP avec Docker » est-elle gratuite ?
Oui — le texte complet de « Conteneuriser une application PHP avec Docker » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours PHP Academy, passe à CoddyKit PRO. Le cours PHP Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Conteneuriser une application PHP avec Docker » ?
Créer une image Docker pour PHP et Nginx, puis l’orchestrer avec Docker Compose. Tu pratiques PHP Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer PHP Academy ?
Aucune expérience préalable n'est requise. PHP Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 4 sur 4.
Combien de temps prend la leçon « Conteneuriser une application PHP avec Docker » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon PHP Academy ?
Oui. Chaque leçon PHP Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Configuration de Nginx et PHP-FPM
- Variables d’environnement et fichiers .env
- Déployer avec GitHub Actions
- Conteneuriser une application PHP avec Docker