---
title: 'Docker pour le developpement web : Guide pratique'
description: 'Apprenez a utiliser Docker pour creer des environnements de developpement reproductibles et simplifier le deploiement de vos applications.'
pubDate: 2024-03-10
family: 'devops-cloud'
tags: []
heroImage: '/images/docker-pour-le-developpement-web.webp'
videoUrl: 'https://www.youtube.com/watch?v=dQw4w9WgXcQ'
---

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 :

```yaml
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

```dockerfile
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

```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 :

```bash
# 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

```yaml
# 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 |
