Docker a revolutionne la maniere dont nous developpons et deployons des applications. Dans ce guide, nous allons voir comment l’utiliser efficacement pour le developpement web.
Pourquoi utiliser Docker ?
- Reproductibilite : Chaque membre de l’equipe a exactement le meme environnement
- Isolation : Les dependances d’un projet n’interferent pas avec un autre
- Simplicite : Un seul
docker-compose uppour demarrer tout l’environnement
Structure type d’un projet
Voici une structure de fichiers recommandee :
mon-projet/
├── docker/
│ ├── nginx/
│ │ └── default.conf
│ └── php/
│ └── Dockerfile
├── src/
├── docker-compose.yml
└── .env
Configuration Docker Compose
Voici un exemple de docker-compose.yml pour une application PHP/Symfony :
version: '3.8'
services:
nginx:
image: nginx:alpine
ports:
- '8080:80'
volumes:
- ./src:/var/www/html
- ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
depends_on:
- php
php:
build:
context: ./docker/php
volumes:
- ./src:/var/www/html
environment:
- DATABASE_URL=mysql://root:root@mysql:3306/app
mysql:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: app
volumes:
- mysql_data:/var/lib/mysql
ports:
- '3306:3306'
redis:
image: redis:alpine
ports:
- '6379:6379'
volumes:
mysql_data:
Dockerfile pour PHP
FROM php:8.3-fpm-alpine
# Installation des extensions PHP
RUN apk add --no-cache \
icu-dev \
libzip-dev \
&& docker-php-ext-install \
intl \
pdo_mysql \
zip \
opcache
# Installation de Composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
# Configuration PHP
COPY php.ini /usr/local/etc/php/conf.d/custom.ini
WORKDIR /var/www/html
# L'utilisateur www-data pour eviter les problemes de permissions
RUN chown -R www-data:www-data /var/www/html
USER www-data
Configuration Nginx
server {
listen 80;
server_name localhost;
root /var/www/html/public;
location / {
try_files $uri /index.php$is_args$args;
}
location ~ ^/index\.php(/|$) {
fastcgi_pass php:9000;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT $realpath_root;
internal;
}
location ~ \.php$ {
return 404;
}
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
}
Commandes utiles
Voici les commandes Docker que vous utiliserez le plus souvent :
# Demarrer les conteneurs en arriere-plan
docker-compose up -d
# Voir les logs
docker-compose logs -f
# Executer une commande dans un conteneur
docker-compose exec php composer install
docker-compose exec php bin/console cache:clear
# Arreter et supprimer les conteneurs
docker-compose down
# Reconstruire les images
docker-compose build --no-cache
Bonnes pratiques
- Utilisez des images Alpine quand c’est possible pour reduire la taille
- Montez les volumes pour le code source en developpement
- Utilisez des variables d’environnement pour la configuration
- Separez les configurations dev/prod avec des fichiers override
# docker-compose.override.yml (dev only)
services:
php:
volumes:
- ./src:/var/www/html
environment:
- APP_ENV=dev
- XDEBUG_MODE=debug
Conclusion
Docker simplifie grandement la gestion des environnements de developpement. Une fois la configuration initiale effectuee, chaque nouveau developpeur peut demarrer le projet en quelques minutes.
| Commande | Description |
|---|---|
docker-compose up | Demarre les services |
docker-compose down | Arrete les services |
docker-compose logs | Affiche les logs |
docker-compose exec | Execute une commande |