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 up pour 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

  1. Utilisez des images Alpine quand c’est possible pour reduire la taille
  2. Montez les volumes pour le code source en developpement
  3. Utilisez des variables d’environnement pour la configuration
  4. 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.

CommandeDescription
docker-compose upDemarre les services
docker-compose downArrete les services
docker-compose logsAffiche les logs
docker-compose execExecute une commande