Tech Blog_

Docker en local : le workflow qui ne complique pas la vie

Le problème que Docker résout vraiment

Pas les microservices. Pas le scaling. En local, Docker sert à une chose : avoir le même environnement partout, sans installer PHP 8.3, PostgreSQL 16, Redis et Node 20 directement sur ta machine.

Structure de base

projet/
├── docker-compose.yml
├── Dockerfile          ← optionnel si tu utilises une image standard
└── src/

docker-compose.yml minimaliste pour un projet PHP

yaml
services:
  app:
    image: php:8.3-apache
    ports:
      - "8080:80"
    volumes:
      - ./src:/var/www/html
    depends_on:
      - db

  db:
    image: postgres:16-alpine
    environment:
      POSTGRES_DB: monprojet
      POSTGRES_USER: dev
      POSTGRES_PASSWORD: secret
    ports:
      - "5432:5432"
    volumes:
      - pgdata:/var/lib/postgresql/data

  adminer:
    image: adminer
    ports:
      - "8081:8080"

volumes:
  pgdata:

Lance avec :

bash
docker compose up -d       # démarrer en fond
docker compose logs -f     # voir les logs
docker compose down        # arrêter
docker compose down -v     # arrêter + effacer les volumes

Entrer dans un conteneur

bash
docker compose exec app bash     # shell dans le conteneur app
docker compose exec db psql -U dev monprojet  # psql directement

Dockerfile quand l'image de base ne suffit pas

dockerfile
FROM php:8.3-apache

# Extensions PHP
RUN docker-php-ext-install pdo pdo_pgsql

# Composer
COPY --from=composer:2 /usr/bin/composer /usr/bin/composer

WORKDIR /var/www/html
COPY src/ .

RUN composer install --no-dev --optimize-autoloader

Variables d'environnement sans taper son mot de passe dans le YAML

bash
# .env (à la racine, jamais committé)
POSTGRES_PASSWORD=monsupermotdepasse
yaml
# docker-compose.yml
services:
  db:
    environment:
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}

Docker Compose lit .env automatiquement.

Les commandes du quotidien

bash
docker ps                          # conteneurs en cours
docker images                      # images disponibles
docker system prune -f             # nettoyer les images/conteneurs inutilisés
docker stats                       # CPU/RAM en temps réel
docker compose restart app         # redémarrer un seul service
docker compose up -d --build app   # rebuilder après changement du Dockerfile

Quand ne pas utiliser Docker en local

  • Sites statiques (HTML/CSS/JS pur) → un simple python -m http.server 8080 suffit
  • Scripts PHP simples → PHP built-in server : php -S localhost:8080
  • Tu travailles sur iPad ou machine lente → la surcharge Docker n'en vaut pas le coût

Ajoute .dockerignore à la racine pour éviter de copier node_modules, .git et .env dans l'image : ça réduit drastiquement le temps de build.

Commentaires

Commentaires via Giscus — à activer dans post.php.

← Retour aux articles