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 8080suffit - 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 copiernode_modules,.gitet.envdans l'image : ça réduit drastiquement le temps de build.
Commentaires via Giscus — à activer dans
post.php.